[{"data":1,"prerenderedAt":3402},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nitro":538,"-integrate-frameworks-nitro-surround":3397},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,507,512,515,520,524,529,533],{"title":36,"path":504,"stem":505,"icon":506},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":508,"path":509,"stem":510,"icon":511},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":513,"stem":514,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":516,"path":517,"stem":518,"icon":519},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":521,"path":522,"stem":523,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":525,"path":526,"stem":527,"icon":528},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":530,"path":531,"stem":532,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":534,"path":535,"stem":536,"icon":537},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"id":539,"title":245,"body":540,"description":3390,"extension":3391,"links":3392,"meta":3393,"navigation":3394,"path":246,"seo":3395,"stem":247,"__hash__":3396},"docs\u002F4.integrate\u002Fframeworks\u002F04.nitro.md",{"type":541,"value":542,"toc":3370},"minimark",[543,552,599,603,608,679,683,956,959,965,1437,1440,1499,1532,1536,1554,1916,1932,1935,1955,1959,1974,2356,2369,2373,2376,2380,2615,2627,2631,2790,2799,2801,2805,2808,3163,3166,3170,3177,3320,3327,3331,3337,3366],[544,545,546,547,551],"p",{},"evlog provides modules for both Nitro v3 and Nitro v2 (nitropack). The module hooks into the request lifecycle, creating a request-scoped logger accessible via ",[548,549,550],"code",{},"useLogger(event)",", and emits a wide event when the response completes.",[553,554,557,560,585],"prompt",{":actions":555,"description":556,"icon":248},"[\"copy\",\"cursor\",\"claude\"]","Set up evlog in my Nitro app",[544,558,559],{},"Set up evlog in my Nitro app.",[561,562,563,567,570,573,576,579,582],"ul",{},[564,565,566],"li",{},"Install evlog: pnpm add evlog",[564,568,569],{},"Import the evlog module in nitro.config.ts (evlog\u002Fnitro for v2, evlog\u002Fnitro\u002Fv3 for v3)",[564,571,572],{},"Configure env.service with your app name",[564,574,575],{},"Use useLogger(event) in route handlers to build wide events",[564,577,578],{},"Use log.set() to accumulate context throughout the request",[564,580,581],{},"Throw errors with createError({ message, status, why, fix })",[564,583,584],{},"Wide events are auto-emitted when each request completes",[544,586,587,588,594,595],{},"Docs: ",[589,590,591],"a",{"href":591,"rel":592},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fnitro",[593],"nofollow","\nAdapters: ",[589,596,597],{"href":597,"rel":598},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[593],[600,601,25],"h2",{"id":602},"quick-start",[604,605,607],"h3",{"id":606},"_1-install","1. Install",[609,610,611,636,650,664],"code-group",{},[612,613,619],"pre",{"className":614,"code":615,"filename":616,"language":617,"meta":618,"style":618},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[548,620,621],{"__ignoreMap":618},[622,623,626,629,633],"span",{"class":624,"line":625},"line",1,[622,627,616],{"class":628},"sBMFI",[622,630,632],{"class":631},"sfazB"," add",[622,634,635],{"class":631}," evlog\n",[612,637,640],{"className":614,"code":638,"filename":639,"language":617,"meta":618,"style":618},"bun add evlog\n","bun",[548,641,642],{"__ignoreMap":618},[622,643,644,646,648],{"class":624,"line":625},[622,645,639],{"class":628},[622,647,632],{"class":631},[622,649,635],{"class":631},[612,651,654],{"className":614,"code":652,"filename":653,"language":617,"meta":618,"style":618},"yarn add evlog\n","yarn",[548,655,656],{"__ignoreMap":618},[622,657,658,660,662],{"class":624,"line":625},[622,659,653],{"class":628},[622,661,632],{"class":631},[622,663,635],{"class":631},[612,665,668],{"className":614,"code":666,"filename":667,"language":617,"meta":618,"style":618},"npm install evlog\n","npm",[548,669,670],{"__ignoreMap":618},[622,671,672,674,677],{"class":624,"line":625},[622,673,667],{"class":628},[622,675,676],{"class":631}," install",[622,678,635],{"class":631},[604,680,682],{"id":681},"_2-add-the-module","2. Add the module",[609,684,685,843],{},[612,686,691],{"className":687,"code":688,"filename":689,"language":690,"meta":618,"style":618},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from 'nitro'\nimport evlog from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","nitro.config.ts (v3)","typescript",[548,692,693,722,740,747,765,778,788,814,826,834],{"__ignoreMap":618},[622,694,695,699,703,707,710,713,716,719],{"class":624,"line":625},[622,696,698],{"class":697},"s7zQu","import",[622,700,702],{"class":701},"sMK4o"," {",[622,704,706],{"class":705},"sTEyZ"," defineConfig",[622,708,709],{"class":701}," }",[622,711,712],{"class":697}," from",[622,714,715],{"class":701}," '",[622,717,718],{"class":631},"nitro",[622,720,721],{"class":701},"'\n",[622,723,725,727,730,733,735,738],{"class":624,"line":724},2,[622,726,698],{"class":697},[622,728,729],{"class":705}," evlog ",[622,731,732],{"class":697},"from",[622,734,715],{"class":701},[622,736,737],{"class":631},"evlog\u002Fnitro\u002Fv3",[622,739,721],{"class":701},[622,741,743],{"class":624,"line":742},3,[622,744,746],{"emptyLinePlaceholder":745},true,"\n",[622,748,750,753,756,759,762],{"class":624,"line":749},4,[622,751,752],{"class":697},"export",[622,754,755],{"class":697}," default",[622,757,706],{"class":758},"s2Zo4",[622,760,761],{"class":705},"(",[622,763,764],{"class":701},"{\n",[622,766,768,772,775],{"class":624,"line":767},5,[622,769,771],{"class":770},"swJcz","  modules",[622,773,774],{"class":701},":",[622,776,777],{"class":705}," [\n",[622,779,781,784,786],{"class":624,"line":780},6,[622,782,783],{"class":758},"    evlog",[622,785,761],{"class":705},[622,787,764],{"class":701},[622,789,791,794,796,798,801,803,805,808,811],{"class":624,"line":790},7,[622,792,793],{"class":770},"      env",[622,795,774],{"class":701},[622,797,702],{"class":701},[622,799,800],{"class":770}," service",[622,802,774],{"class":701},[622,804,715],{"class":701},[622,806,807],{"class":631},"my-app",[622,809,810],{"class":701},"'",[622,812,813],{"class":701}," },\n",[622,815,817,820,823],{"class":624,"line":816},8,[622,818,819],{"class":701},"    }",[622,821,822],{"class":705},")",[622,824,825],{"class":701},",\n",[622,827,829,832],{"class":624,"line":828},9,[622,830,831],{"class":705},"  ]",[622,833,825],{"class":701},[622,835,837,840],{"class":624,"line":836},10,[622,838,839],{"class":701},"}",[622,841,842],{"class":705},")\n",[612,844,847],{"className":687,"code":845,"filename":846,"language":690,"meta":618,"style":618},"import { defineNitroConfig } from 'nitropack\u002Fconfig'\nimport evlog from 'evlog\u002Fnitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","nitro.config.ts (v2)",[548,848,849,869,884,888,900,908,916,936,944,950],{"__ignoreMap":618},[622,850,851,853,855,858,860,862,864,867],{"class":624,"line":625},[622,852,698],{"class":697},[622,854,702],{"class":701},[622,856,857],{"class":705}," defineNitroConfig",[622,859,709],{"class":701},[622,861,712],{"class":697},[622,863,715],{"class":701},[622,865,866],{"class":631},"nitropack\u002Fconfig",[622,868,721],{"class":701},[622,870,871,873,875,877,879,882],{"class":624,"line":724},[622,872,698],{"class":697},[622,874,729],{"class":705},[622,876,732],{"class":697},[622,878,715],{"class":701},[622,880,881],{"class":631},"evlog\u002Fnitro",[622,883,721],{"class":701},[622,885,886],{"class":624,"line":742},[622,887,746],{"emptyLinePlaceholder":745},[622,889,890,892,894,896,898],{"class":624,"line":749},[622,891,752],{"class":697},[622,893,755],{"class":697},[622,895,857],{"class":758},[622,897,761],{"class":705},[622,899,764],{"class":701},[622,901,902,904,906],{"class":624,"line":767},[622,903,771],{"class":770},[622,905,774],{"class":701},[622,907,777],{"class":705},[622,909,910,912,914],{"class":624,"line":780},[622,911,783],{"class":758},[622,913,761],{"class":705},[622,915,764],{"class":701},[622,917,918,920,922,924,926,928,930,932,934],{"class":624,"line":790},[622,919,793],{"class":770},[622,921,774],{"class":701},[622,923,702],{"class":701},[622,925,800],{"class":770},[622,927,774],{"class":701},[622,929,715],{"class":701},[622,931,807],{"class":631},[622,933,810],{"class":701},[622,935,813],{"class":701},[622,937,938,940,942],{"class":624,"line":816},[622,939,819],{"class":701},[622,941,822],{"class":705},[622,943,825],{"class":701},[622,945,946,948],{"class":624,"line":828},[622,947,831],{"class":705},[622,949,825],{"class":701},[622,951,952,954],{"class":624,"line":836},[622,953,839],{"class":701},[622,955,842],{"class":705},[600,957,46],{"id":958},"wide-events",[544,960,961,962,964],{},"Build up context progressively throughout a request with ",[548,963,550],{},". evlog emits a single wide event when the request completes.",[609,966,967,1218],{},[612,968,971],{"className":687,"code":969,"filename":970,"language":690,"meta":618,"style":618},"import { defineHandler } from 'nitro\u002Fh3'\nimport { useLogger } from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId } })\n  log.set({ cart: { items: body.items.length, total: body.total } })\n\n  return { success: true }\n})\n","routes\u002Fapi\u002Fcheckout.post.ts (v3)",[548,972,973,993,1012,1016,1045,1064,1085,1089,1130,1187,1191,1211],{"__ignoreMap":618},[622,974,975,977,979,982,984,986,988,991],{"class":624,"line":625},[622,976,698],{"class":697},[622,978,702],{"class":701},[622,980,981],{"class":705}," defineHandler",[622,983,709],{"class":701},[622,985,712],{"class":697},[622,987,715],{"class":701},[622,989,990],{"class":631},"nitro\u002Fh3",[622,992,721],{"class":701},[622,994,995,997,999,1002,1004,1006,1008,1010],{"class":624,"line":724},[622,996,698],{"class":697},[622,998,702],{"class":701},[622,1000,1001],{"class":705}," useLogger",[622,1003,709],{"class":701},[622,1005,712],{"class":697},[622,1007,715],{"class":701},[622,1009,737],{"class":631},[622,1011,721],{"class":701},[622,1013,1014],{"class":624,"line":742},[622,1015,746],{"emptyLinePlaceholder":745},[622,1017,1018,1020,1022,1024,1026,1030,1033,1037,1039,1042],{"class":624,"line":749},[622,1019,752],{"class":697},[622,1021,755],{"class":697},[622,1023,981],{"class":758},[622,1025,761],{"class":705},[622,1027,1029],{"class":1028},"spNyl","async",[622,1031,1032],{"class":701}," (",[622,1034,1036],{"class":1035},"sHdIc","event",[622,1038,822],{"class":701},[622,1040,1041],{"class":1028}," =>",[622,1043,1044],{"class":701}," {\n",[622,1046,1047,1050,1053,1056,1058,1060,1062],{"class":624,"line":767},[622,1048,1049],{"class":1028},"  const",[622,1051,1052],{"class":705}," log",[622,1054,1055],{"class":701}," =",[622,1057,1001],{"class":758},[622,1059,761],{"class":770},[622,1061,1036],{"class":705},[622,1063,842],{"class":770},[622,1065,1066,1068,1071,1073,1076,1079,1081,1083],{"class":624,"line":780},[622,1067,1049],{"class":1028},[622,1069,1070],{"class":705}," body",[622,1072,1055],{"class":701},[622,1074,1075],{"class":697}," await",[622,1077,1078],{"class":758}," readBody",[622,1080,761],{"class":770},[622,1082,1036],{"class":705},[622,1084,842],{"class":770},[622,1086,1087],{"class":624,"line":790},[622,1088,746],{"emptyLinePlaceholder":745},[622,1090,1091,1094,1097,1100,1102,1105,1108,1110,1112,1115,1117,1119,1121,1124,1126,1128],{"class":624,"line":816},[622,1092,1093],{"class":705},"  log",[622,1095,1096],{"class":701},".",[622,1098,1099],{"class":758},"set",[622,1101,761],{"class":770},[622,1103,1104],{"class":701},"{",[622,1106,1107],{"class":770}," user",[622,1109,774],{"class":701},[622,1111,702],{"class":701},[622,1113,1114],{"class":770}," id",[622,1116,774],{"class":701},[622,1118,1070],{"class":705},[622,1120,1096],{"class":701},[622,1122,1123],{"class":705},"userId",[622,1125,709],{"class":701},[622,1127,709],{"class":701},[622,1129,842],{"class":770},[622,1131,1132,1134,1136,1138,1140,1142,1145,1147,1149,1152,1154,1156,1158,1161,1163,1166,1169,1172,1174,1176,1178,1181,1183,1185],{"class":624,"line":828},[622,1133,1093],{"class":705},[622,1135,1096],{"class":701},[622,1137,1099],{"class":758},[622,1139,761],{"class":770},[622,1141,1104],{"class":701},[622,1143,1144],{"class":770}," cart",[622,1146,774],{"class":701},[622,1148,702],{"class":701},[622,1150,1151],{"class":770}," items",[622,1153,774],{"class":701},[622,1155,1070],{"class":705},[622,1157,1096],{"class":701},[622,1159,1160],{"class":705},"items",[622,1162,1096],{"class":701},[622,1164,1165],{"class":705},"length",[622,1167,1168],{"class":701},",",[622,1170,1171],{"class":770}," total",[622,1173,774],{"class":701},[622,1175,1070],{"class":705},[622,1177,1096],{"class":701},[622,1179,1180],{"class":705},"total",[622,1182,709],{"class":701},[622,1184,709],{"class":701},[622,1186,842],{"class":770},[622,1188,1189],{"class":624,"line":836},[622,1190,746],{"emptyLinePlaceholder":745},[622,1192,1194,1197,1199,1202,1204,1208],{"class":624,"line":1193},11,[622,1195,1196],{"class":697},"  return",[622,1198,702],{"class":701},[622,1200,1201],{"class":770}," success",[622,1203,774],{"class":701},[622,1205,1207],{"class":1206},"sfNiH"," true",[622,1209,1210],{"class":701}," }\n",[622,1212,1214,1216],{"class":624,"line":1213},12,[622,1215,839],{"class":701},[622,1217,842],{"class":705},[612,1219,1222],{"className":687,"code":1220,"filename":1221,"language":690,"meta":618,"style":618},"import { defineEventHandler, readBody } from 'h3'\nimport { useLogger } from 'evlog\u002Fnitro'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId } })\n  log.set({ cart: { items: body.items.length, total: body.total } })\n\n  return { success: true }\n})\n","routes\u002Fapi\u002Fcheckout.post.ts (v2)",[548,1223,1224,1247,1265,1269,1291,1307,1325,1329,1363,1413,1417,1431],{"__ignoreMap":618},[622,1225,1226,1228,1230,1233,1235,1237,1239,1241,1243,1245],{"class":624,"line":625},[622,1227,698],{"class":697},[622,1229,702],{"class":701},[622,1231,1232],{"class":705}," defineEventHandler",[622,1234,1168],{"class":701},[622,1236,1078],{"class":705},[622,1238,709],{"class":701},[622,1240,712],{"class":697},[622,1242,715],{"class":701},[622,1244,604],{"class":631},[622,1246,721],{"class":701},[622,1248,1249,1251,1253,1255,1257,1259,1261,1263],{"class":624,"line":724},[622,1250,698],{"class":697},[622,1252,702],{"class":701},[622,1254,1001],{"class":705},[622,1256,709],{"class":701},[622,1258,712],{"class":697},[622,1260,715],{"class":701},[622,1262,881],{"class":631},[622,1264,721],{"class":701},[622,1266,1267],{"class":624,"line":742},[622,1268,746],{"emptyLinePlaceholder":745},[622,1270,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289],{"class":624,"line":749},[622,1272,752],{"class":697},[622,1274,755],{"class":697},[622,1276,1232],{"class":758},[622,1278,761],{"class":705},[622,1280,1029],{"class":1028},[622,1282,1032],{"class":701},[622,1284,1036],{"class":1035},[622,1286,822],{"class":701},[622,1288,1041],{"class":1028},[622,1290,1044],{"class":701},[622,1292,1293,1295,1297,1299,1301,1303,1305],{"class":624,"line":767},[622,1294,1049],{"class":1028},[622,1296,1052],{"class":705},[622,1298,1055],{"class":701},[622,1300,1001],{"class":758},[622,1302,761],{"class":770},[622,1304,1036],{"class":705},[622,1306,842],{"class":770},[622,1308,1309,1311,1313,1315,1317,1319,1321,1323],{"class":624,"line":780},[622,1310,1049],{"class":1028},[622,1312,1070],{"class":705},[622,1314,1055],{"class":701},[622,1316,1075],{"class":697},[622,1318,1078],{"class":758},[622,1320,761],{"class":770},[622,1322,1036],{"class":705},[622,1324,842],{"class":770},[622,1326,1327],{"class":624,"line":790},[622,1328,746],{"emptyLinePlaceholder":745},[622,1330,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361],{"class":624,"line":816},[622,1332,1093],{"class":705},[622,1334,1096],{"class":701},[622,1336,1099],{"class":758},[622,1338,761],{"class":770},[622,1340,1104],{"class":701},[622,1342,1107],{"class":770},[622,1344,774],{"class":701},[622,1346,702],{"class":701},[622,1348,1114],{"class":770},[622,1350,774],{"class":701},[622,1352,1070],{"class":705},[622,1354,1096],{"class":701},[622,1356,1123],{"class":705},[622,1358,709],{"class":701},[622,1360,709],{"class":701},[622,1362,842],{"class":770},[622,1364,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":624,"line":828},[622,1366,1093],{"class":705},[622,1368,1096],{"class":701},[622,1370,1099],{"class":758},[622,1372,761],{"class":770},[622,1374,1104],{"class":701},[622,1376,1144],{"class":770},[622,1378,774],{"class":701},[622,1380,702],{"class":701},[622,1382,1151],{"class":770},[622,1384,774],{"class":701},[622,1386,1070],{"class":705},[622,1388,1096],{"class":701},[622,1390,1160],{"class":705},[622,1392,1096],{"class":701},[622,1394,1165],{"class":705},[622,1396,1168],{"class":701},[622,1398,1171],{"class":770},[622,1400,774],{"class":701},[622,1402,1070],{"class":705},[622,1404,1096],{"class":701},[622,1406,1180],{"class":705},[622,1408,709],{"class":701},[622,1410,709],{"class":701},[622,1412,842],{"class":770},[622,1414,1415],{"class":624,"line":836},[622,1416,746],{"emptyLinePlaceholder":745},[622,1418,1419,1421,1423,1425,1427,1429],{"class":624,"line":1193},[622,1420,1196],{"class":697},[622,1422,702],{"class":701},[622,1424,1201],{"class":770},[622,1426,774],{"class":701},[622,1428,1207],{"class":1206},[622,1430,1210],{"class":701},[622,1432,1433,1435],{"class":624,"line":1213},[622,1434,839],{"class":701},[622,1436,842],{"class":705},[544,1438,1439],{},"One request, one log line with all context:",[612,1441,1444],{"className":614,"code":1442,"filename":1443,"language":617,"meta":618,"style":618},"10:23:45 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n  ├─ user: id=usr_123\n  ├─ cart: items=3 total=14999\n  └─ requestId: a1b2c3d4-...\n","Terminal output",[548,1445,1446,1457,1468,1488],{"__ignoreMap":618},[622,1447,1448,1451,1454],{"class":624,"line":625},[622,1449,1450],{"class":628},"10:23:45",[622,1452,1453],{"class":631}," INFO",[622,1455,1456],{"class":705}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[622,1458,1459,1462,1465],{"class":624,"line":724},[622,1460,1461],{"class":628},"  ├─",[622,1463,1464],{"class":631}," user:",[622,1466,1467],{"class":631}," id=usr_123\n",[622,1469,1470,1472,1475,1478,1482,1485],{"class":624,"line":742},[622,1471,1461],{"class":628},[622,1473,1474],{"class":631}," cart:",[622,1476,1477],{"class":631}," items=",[622,1479,1481],{"class":1480},"sbssI","3",[622,1483,1484],{"class":631}," total=",[622,1486,1487],{"class":1480},"14999\n",[622,1489,1490,1493,1496],{"class":624,"line":749},[622,1491,1492],{"class":628},"  └─",[622,1494,1495],{"class":631}," requestId:",[622,1497,1498],{"class":631}," a1b2c3d4-...\n",[544,1500,1501,1502,1507,1508,1511,1512,1518,1519,1522,1523,1526,1527,1531],{},"Nitro uses ",[1503,1504,1505],"strong",{},[548,1506,550],{}," (event-bound scope), not ",[548,1509,1510],{},"AsyncLocalStorage",", so ",[1503,1513,1514,1517],{},[548,1515,1516],{},"log.fork()"," is not available"," here yet. For AI SDK streaming responses, evlog defers wide-event emit until the response body finishes so ",[548,1520,1521],{},"createAILogger(log)"," metadata stays on the same request event. Post-emit warnings only apply when code calls ",[548,1524,1525],{},"set()"," after the wide event has actually emitted, for example in non-streaming handlers or background work. See ",[589,1528,1530],{"href":1529},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","After emit"," in Wide events.",[600,1533,1535],{"id":1534},"error-handling","Error Handling",[544,1537,1538,1541,1542,1545,1546,1549,1550,1553],{},[548,1539,1540],{},"createError"," produces structured errors with ",[548,1543,1544],{},"why",", ",[548,1547,1548],{},"fix",", and ",[548,1551,1552],{},"link"," fields that help both humans and AI agents understand what went wrong.",[609,1555,1556,1734],{},[612,1557,1560],{"className":687,"code":1558,"filename":1559,"language":690,"meta":618,"style":618},"import { defineHandler } from 'nitro\u002Fh3'\nimport { useLogger, createError } from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n\n  throw createError({\n    status: 402,\n    message: 'Payment failed',\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n  })\n})\n","routes\u002Fapi\u002Fpayment.post.ts (v3)",[548,1561,1562,1580,1603,1607,1629,1645,1649,1660,1672,1688,1704,1720,1727],{"__ignoreMap":618},[622,1563,1564,1566,1568,1570,1572,1574,1576,1578],{"class":624,"line":625},[622,1565,698],{"class":697},[622,1567,702],{"class":701},[622,1569,981],{"class":705},[622,1571,709],{"class":701},[622,1573,712],{"class":697},[622,1575,715],{"class":701},[622,1577,990],{"class":631},[622,1579,721],{"class":701},[622,1581,1582,1584,1586,1588,1590,1593,1595,1597,1599,1601],{"class":624,"line":724},[622,1583,698],{"class":697},[622,1585,702],{"class":701},[622,1587,1001],{"class":705},[622,1589,1168],{"class":701},[622,1591,1592],{"class":705}," createError",[622,1594,709],{"class":701},[622,1596,712],{"class":697},[622,1598,715],{"class":701},[622,1600,737],{"class":631},[622,1602,721],{"class":701},[622,1604,1605],{"class":624,"line":742},[622,1606,746],{"emptyLinePlaceholder":745},[622,1608,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627],{"class":624,"line":749},[622,1610,752],{"class":697},[622,1612,755],{"class":697},[622,1614,981],{"class":758},[622,1616,761],{"class":705},[622,1618,1029],{"class":1028},[622,1620,1032],{"class":701},[622,1622,1036],{"class":1035},[622,1624,822],{"class":701},[622,1626,1041],{"class":1028},[622,1628,1044],{"class":701},[622,1630,1631,1633,1635,1637,1639,1641,1643],{"class":624,"line":767},[622,1632,1049],{"class":1028},[622,1634,1052],{"class":705},[622,1636,1055],{"class":701},[622,1638,1001],{"class":758},[622,1640,761],{"class":770},[622,1642,1036],{"class":705},[622,1644,842],{"class":770},[622,1646,1647],{"class":624,"line":780},[622,1648,746],{"emptyLinePlaceholder":745},[622,1650,1651,1654,1656,1658],{"class":624,"line":790},[622,1652,1653],{"class":697},"  throw",[622,1655,1592],{"class":758},[622,1657,761],{"class":770},[622,1659,764],{"class":701},[622,1661,1662,1665,1667,1670],{"class":624,"line":816},[622,1663,1664],{"class":770},"    status",[622,1666,774],{"class":701},[622,1668,1669],{"class":1480}," 402",[622,1671,825],{"class":701},[622,1673,1674,1677,1679,1681,1684,1686],{"class":624,"line":828},[622,1675,1676],{"class":770},"    message",[622,1678,774],{"class":701},[622,1680,715],{"class":701},[622,1682,1683],{"class":631},"Payment failed",[622,1685,810],{"class":701},[622,1687,825],{"class":701},[622,1689,1690,1693,1695,1697,1700,1702],{"class":624,"line":836},[622,1691,1692],{"class":770},"    why",[622,1694,774],{"class":701},[622,1696,715],{"class":701},[622,1698,1699],{"class":631},"Card declined by issuer",[622,1701,810],{"class":701},[622,1703,825],{"class":701},[622,1705,1706,1709,1711,1713,1716,1718],{"class":624,"line":1193},[622,1707,1708],{"class":770},"    fix",[622,1710,774],{"class":701},[622,1712,715],{"class":701},[622,1714,1715],{"class":631},"Try a different payment method",[622,1717,810],{"class":701},[622,1719,825],{"class":701},[622,1721,1722,1725],{"class":624,"line":1213},[622,1723,1724],{"class":701},"  }",[622,1726,842],{"class":770},[622,1728,1730,1732],{"class":624,"line":1729},13,[622,1731,839],{"class":701},[622,1733,842],{"class":705},[612,1735,1738],{"className":687,"code":1736,"filename":1737,"language":690,"meta":618,"style":618},"import { defineEventHandler } from 'h3'\nimport { useLogger } from 'evlog\u002Fnitro'\nimport { createError } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  throw createError({\n    status: 402,\n    message: 'Payment failed',\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n  })\n})\n","routes\u002Fapi\u002Fpayment.post.ts (v2)",[548,1739,1740,1758,1776,1795,1799,1821,1837,1841,1851,1861,1875,1889,1903,1909],{"__ignoreMap":618},[622,1741,1742,1744,1746,1748,1750,1752,1754,1756],{"class":624,"line":625},[622,1743,698],{"class":697},[622,1745,702],{"class":701},[622,1747,1232],{"class":705},[622,1749,709],{"class":701},[622,1751,712],{"class":697},[622,1753,715],{"class":701},[622,1755,604],{"class":631},[622,1757,721],{"class":701},[622,1759,1760,1762,1764,1766,1768,1770,1772,1774],{"class":624,"line":724},[622,1761,698],{"class":697},[622,1763,702],{"class":701},[622,1765,1001],{"class":705},[622,1767,709],{"class":701},[622,1769,712],{"class":697},[622,1771,715],{"class":701},[622,1773,881],{"class":631},[622,1775,721],{"class":701},[622,1777,1778,1780,1782,1784,1786,1788,1790,1793],{"class":624,"line":742},[622,1779,698],{"class":697},[622,1781,702],{"class":701},[622,1783,1592],{"class":705},[622,1785,709],{"class":701},[622,1787,712],{"class":697},[622,1789,715],{"class":701},[622,1791,1792],{"class":631},"evlog",[622,1794,721],{"class":701},[622,1796,1797],{"class":624,"line":749},[622,1798,746],{"emptyLinePlaceholder":745},[622,1800,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819],{"class":624,"line":767},[622,1802,752],{"class":697},[622,1804,755],{"class":697},[622,1806,1232],{"class":758},[622,1808,761],{"class":705},[622,1810,1029],{"class":1028},[622,1812,1032],{"class":701},[622,1814,1036],{"class":1035},[622,1816,822],{"class":701},[622,1818,1041],{"class":1028},[622,1820,1044],{"class":701},[622,1822,1823,1825,1827,1829,1831,1833,1835],{"class":624,"line":780},[622,1824,1049],{"class":1028},[622,1826,1052],{"class":705},[622,1828,1055],{"class":701},[622,1830,1001],{"class":758},[622,1832,761],{"class":770},[622,1834,1036],{"class":705},[622,1836,842],{"class":770},[622,1838,1839],{"class":624,"line":790},[622,1840,746],{"emptyLinePlaceholder":745},[622,1842,1843,1845,1847,1849],{"class":624,"line":816},[622,1844,1653],{"class":697},[622,1846,1592],{"class":758},[622,1848,761],{"class":770},[622,1850,764],{"class":701},[622,1852,1853,1855,1857,1859],{"class":624,"line":828},[622,1854,1664],{"class":770},[622,1856,774],{"class":701},[622,1858,1669],{"class":1480},[622,1860,825],{"class":701},[622,1862,1863,1865,1867,1869,1871,1873],{"class":624,"line":836},[622,1864,1676],{"class":770},[622,1866,774],{"class":701},[622,1868,715],{"class":701},[622,1870,1683],{"class":631},[622,1872,810],{"class":701},[622,1874,825],{"class":701},[622,1876,1877,1879,1881,1883,1885,1887],{"class":624,"line":1193},[622,1878,1692],{"class":770},[622,1880,774],{"class":701},[622,1882,715],{"class":701},[622,1884,1699],{"class":631},[622,1886,810],{"class":701},[622,1888,825],{"class":701},[622,1890,1891,1893,1895,1897,1899,1901],{"class":624,"line":1213},[622,1892,1708],{"class":770},[622,1894,774],{"class":701},[622,1896,715],{"class":701},[622,1898,1715],{"class":631},[622,1900,810],{"class":701},[622,1902,825],{"class":701},[622,1904,1905,1907],{"class":624,"line":1729},[622,1906,1724],{"class":701},[622,1908,842],{"class":770},[622,1910,1912,1914],{"class":624,"line":1911},14,[622,1913,839],{"class":701},[622,1915,842],{"class":705},[1917,1918,1920,1921,1923,1924,1926,1927,1923,1929,1931],"callout",{"color":1919,"icon":13},"info","In Nitro v3, import ",[548,1922,1540],{}," from ",[548,1925,737],{}," - it wraps the Nitro error handler. In Nitro v2, import ",[548,1928,1540],{},[548,1930,1792],{}," directly.",[600,1933,508],{"id":1934},"configuration",[544,1936,1937,1938,1941,1942,1545,1945,1545,1948,1545,1951,1954],{},"See the ",[589,1939,1940],{"href":509},"Configuration reference"," for all available options (",[548,1943,1944],{},"enabled",[548,1946,1947],{},"pretty",[548,1949,1950],{},"silent",[548,1952,1953],{},"sampling",", etc.).",[604,1956,1958],{"id":1957},"route-filtering","Route Filtering",[544,1960,1961,1962,1965,1966,1969,1970,1973],{},"Use ",[548,1963,1964],{},"include"," and ",[548,1967,1968],{},"exclude"," to control which routes are logged, and ",[548,1971,1972],{},"routes"," to assign different service names to different route groups:",[609,1975,1976,2173],{},[612,1977,1979],{"className":687,"code":1978,"filename":689,"language":690,"meta":618,"style":618},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      include: ['\u002Fapi\u002F**'],\n      exclude: ['\u002Fapi\u002Fhealth'],\n      routes: {\n        '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n        '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[548,1980,1981,1999,2013,2017,2029,2037,2045,2067,2087,2096,2123,2149,2154,2160,2166],{"__ignoreMap":618},[622,1982,1983,1985,1987,1989,1991,1993,1995,1997],{"class":624,"line":625},[622,1984,698],{"class":697},[622,1986,702],{"class":701},[622,1988,706],{"class":705},[622,1990,709],{"class":701},[622,1992,712],{"class":697},[622,1994,715],{"class":701},[622,1996,718],{"class":631},[622,1998,721],{"class":701},[622,2000,2001,2003,2005,2007,2009,2011],{"class":624,"line":724},[622,2002,698],{"class":697},[622,2004,729],{"class":705},[622,2006,732],{"class":697},[622,2008,715],{"class":701},[622,2010,737],{"class":631},[622,2012,721],{"class":701},[622,2014,2015],{"class":624,"line":742},[622,2016,746],{"emptyLinePlaceholder":745},[622,2018,2019,2021,2023,2025,2027],{"class":624,"line":749},[622,2020,752],{"class":697},[622,2022,755],{"class":697},[622,2024,706],{"class":758},[622,2026,761],{"class":705},[622,2028,764],{"class":701},[622,2030,2031,2033,2035],{"class":624,"line":767},[622,2032,771],{"class":770},[622,2034,774],{"class":701},[622,2036,777],{"class":705},[622,2038,2039,2041,2043],{"class":624,"line":780},[622,2040,783],{"class":758},[622,2042,761],{"class":705},[622,2044,764],{"class":701},[622,2046,2047,2050,2052,2055,2057,2060,2062,2065],{"class":624,"line":790},[622,2048,2049],{"class":770},"      include",[622,2051,774],{"class":701},[622,2053,2054],{"class":705}," [",[622,2056,810],{"class":701},[622,2058,2059],{"class":631},"\u002Fapi\u002F**",[622,2061,810],{"class":701},[622,2063,2064],{"class":705},"]",[622,2066,825],{"class":701},[622,2068,2069,2072,2074,2076,2078,2081,2083,2085],{"class":624,"line":816},[622,2070,2071],{"class":770},"      exclude",[622,2073,774],{"class":701},[622,2075,2054],{"class":705},[622,2077,810],{"class":701},[622,2079,2080],{"class":631},"\u002Fapi\u002Fhealth",[622,2082,810],{"class":701},[622,2084,2064],{"class":705},[622,2086,825],{"class":701},[622,2088,2089,2092,2094],{"class":624,"line":828},[622,2090,2091],{"class":770},"      routes",[622,2093,774],{"class":701},[622,2095,1044],{"class":701},[622,2097,2098,2101,2104,2106,2108,2110,2112,2114,2116,2119,2121],{"class":624,"line":836},[622,2099,2100],{"class":701},"        '",[622,2102,2103],{"class":770},"\u002Fapi\u002Fauth\u002F**",[622,2105,810],{"class":701},[622,2107,774],{"class":701},[622,2109,702],{"class":701},[622,2111,800],{"class":770},[622,2113,774],{"class":701},[622,2115,715],{"class":701},[622,2117,2118],{"class":631},"auth-service",[622,2120,810],{"class":701},[622,2122,813],{"class":701},[622,2124,2125,2127,2130,2132,2134,2136,2138,2140,2142,2145,2147],{"class":624,"line":1193},[622,2126,2100],{"class":701},[622,2128,2129],{"class":770},"\u002Fapi\u002Fpayment\u002F**",[622,2131,810],{"class":701},[622,2133,774],{"class":701},[622,2135,702],{"class":701},[622,2137,800],{"class":770},[622,2139,774],{"class":701},[622,2141,715],{"class":701},[622,2143,2144],{"class":631},"payment-service",[622,2146,810],{"class":701},[622,2148,813],{"class":701},[622,2150,2151],{"class":624,"line":1213},[622,2152,2153],{"class":701},"      },\n",[622,2155,2156,2158],{"class":624,"line":1729},[622,2157,819],{"class":701},[622,2159,842],{"class":705},[622,2161,2162,2164],{"class":624,"line":1911},[622,2163,831],{"class":705},[622,2165,825],{"class":701},[622,2167,2169,2171],{"class":624,"line":2168},15,[622,2170,839],{"class":701},[622,2172,842],{"class":705},[612,2174,2176],{"className":687,"code":2175,"filename":846,"language":690,"meta":618,"style":618},"import { defineNitroConfig } from 'nitropack\u002Fconfig'\nimport evlog from 'evlog\u002Fnitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      include: ['\u002Fapi\u002F**'],\n      exclude: ['\u002Fapi\u002Fhealth'],\n      routes: {\n        '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n        '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[548,2177,2178,2196,2210,2214,2226,2234,2242,2260,2278,2286,2310,2334,2338,2344,2350],{"__ignoreMap":618},[622,2179,2180,2182,2184,2186,2188,2190,2192,2194],{"class":624,"line":625},[622,2181,698],{"class":697},[622,2183,702],{"class":701},[622,2185,857],{"class":705},[622,2187,709],{"class":701},[622,2189,712],{"class":697},[622,2191,715],{"class":701},[622,2193,866],{"class":631},[622,2195,721],{"class":701},[622,2197,2198,2200,2202,2204,2206,2208],{"class":624,"line":724},[622,2199,698],{"class":697},[622,2201,729],{"class":705},[622,2203,732],{"class":697},[622,2205,715],{"class":701},[622,2207,881],{"class":631},[622,2209,721],{"class":701},[622,2211,2212],{"class":624,"line":742},[622,2213,746],{"emptyLinePlaceholder":745},[622,2215,2216,2218,2220,2222,2224],{"class":624,"line":749},[622,2217,752],{"class":697},[622,2219,755],{"class":697},[622,2221,857],{"class":758},[622,2223,761],{"class":705},[622,2225,764],{"class":701},[622,2227,2228,2230,2232],{"class":624,"line":767},[622,2229,771],{"class":770},[622,2231,774],{"class":701},[622,2233,777],{"class":705},[622,2235,2236,2238,2240],{"class":624,"line":780},[622,2237,783],{"class":758},[622,2239,761],{"class":705},[622,2241,764],{"class":701},[622,2243,2244,2246,2248,2250,2252,2254,2256,2258],{"class":624,"line":790},[622,2245,2049],{"class":770},[622,2247,774],{"class":701},[622,2249,2054],{"class":705},[622,2251,810],{"class":701},[622,2253,2059],{"class":631},[622,2255,810],{"class":701},[622,2257,2064],{"class":705},[622,2259,825],{"class":701},[622,2261,2262,2264,2266,2268,2270,2272,2274,2276],{"class":624,"line":816},[622,2263,2071],{"class":770},[622,2265,774],{"class":701},[622,2267,2054],{"class":705},[622,2269,810],{"class":701},[622,2271,2080],{"class":631},[622,2273,810],{"class":701},[622,2275,2064],{"class":705},[622,2277,825],{"class":701},[622,2279,2280,2282,2284],{"class":624,"line":828},[622,2281,2091],{"class":770},[622,2283,774],{"class":701},[622,2285,1044],{"class":701},[622,2287,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308],{"class":624,"line":836},[622,2289,2100],{"class":701},[622,2291,2103],{"class":770},[622,2293,810],{"class":701},[622,2295,774],{"class":701},[622,2297,702],{"class":701},[622,2299,800],{"class":770},[622,2301,774],{"class":701},[622,2303,715],{"class":701},[622,2305,2118],{"class":631},[622,2307,810],{"class":701},[622,2309,813],{"class":701},[622,2311,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332],{"class":624,"line":1193},[622,2313,2100],{"class":701},[622,2315,2129],{"class":770},[622,2317,810],{"class":701},[622,2319,774],{"class":701},[622,2321,702],{"class":701},[622,2323,800],{"class":770},[622,2325,774],{"class":701},[622,2327,715],{"class":701},[622,2329,2144],{"class":631},[622,2331,810],{"class":701},[622,2333,813],{"class":701},[622,2335,2336],{"class":624,"line":1213},[622,2337,2153],{"class":701},[622,2339,2340,2342],{"class":624,"line":1729},[622,2341,819],{"class":701},[622,2343,842],{"class":705},[622,2345,2346,2348],{"class":624,"line":1911},[622,2347,831],{"class":705},[622,2349,825],{"class":701},[622,2351,2352,2354],{"class":624,"line":2168},[622,2353,839],{"class":701},[622,2355,842],{"class":705},[1917,2357,2360,2363,2364,1965,2366,2368],{"color":2358,"icon":2359},"warning","i-lucide-alert-triangle",[1503,2361,2362],{},"Exclusions take precedence."," If a path matches both ",[548,2365,1964],{},[548,2367,1968],{},", it will be excluded.",[600,2370,2372],{"id":2371},"drain-enrichers","Drain & Enrichers",[544,2374,2375],{},"Use Nitro plugin hooks to send logs to external services and enrich them with additional context.",[604,2377,2379],{"id":2378},"drain-plugin","Drain Plugin",[612,2381,2384],{"className":687,"code":2382,"filename":2383,"language":690,"meta":618,"style":618},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[548,2385,2386,2408,2428,2448,2452,2478,2507,2526,2532,2552,2556,2578,2609],{"__ignoreMap":618},[622,2387,2388,2390,2393,2395,2398,2400,2402,2404,2406],{"class":624,"line":625},[622,2389,698],{"class":697},[622,2391,2392],{"class":697}," type",[622,2394,702],{"class":701},[622,2396,2397],{"class":705}," DrainContext",[622,2399,709],{"class":701},[622,2401,712],{"class":697},[622,2403,715],{"class":701},[622,2405,1792],{"class":631},[622,2407,721],{"class":701},[622,2409,2410,2412,2414,2417,2419,2421,2423,2426],{"class":624,"line":724},[622,2411,698],{"class":697},[622,2413,702],{"class":701},[622,2415,2416],{"class":705}," createAxiomDrain",[622,2418,709],{"class":701},[622,2420,712],{"class":697},[622,2422,715],{"class":701},[622,2424,2425],{"class":631},"evlog\u002Faxiom",[622,2427,721],{"class":701},[622,2429,2430,2432,2434,2437,2439,2441,2443,2446],{"class":624,"line":742},[622,2431,698],{"class":697},[622,2433,702],{"class":701},[622,2435,2436],{"class":705}," createDrainPipeline",[622,2438,709],{"class":701},[622,2440,712],{"class":697},[622,2442,715],{"class":701},[622,2444,2445],{"class":631},"evlog\u002Fpipeline",[622,2447,721],{"class":701},[622,2449,2450],{"class":624,"line":749},[622,2451,746],{"emptyLinePlaceholder":745},[622,2453,2454,2457,2460,2463,2465,2468,2471,2474,2476],{"class":624,"line":767},[622,2455,2456],{"class":1028},"const",[622,2458,2459],{"class":705}," pipeline ",[622,2461,2462],{"class":701},"=",[622,2464,2436],{"class":758},[622,2466,2467],{"class":701},"\u003C",[622,2469,2470],{"class":628},"DrainContext",[622,2472,2473],{"class":701},">",[622,2475,761],{"class":705},[622,2477,764],{"class":701},[622,2479,2480,2483,2485,2487,2490,2492,2495,2497,2500,2502,2505],{"class":624,"line":780},[622,2481,2482],{"class":770},"  batch",[622,2484,774],{"class":701},[622,2486,702],{"class":701},[622,2488,2489],{"class":770}," size",[622,2491,774],{"class":701},[622,2493,2494],{"class":1480}," 50",[622,2496,1168],{"class":701},[622,2498,2499],{"class":770}," intervalMs",[622,2501,774],{"class":701},[622,2503,2504],{"class":1480}," 5000",[622,2506,813],{"class":701},[622,2508,2509,2512,2514,2516,2519,2521,2524],{"class":624,"line":790},[622,2510,2511],{"class":770},"  retry",[622,2513,774],{"class":701},[622,2515,702],{"class":701},[622,2517,2518],{"class":770}," maxAttempts",[622,2520,774],{"class":701},[622,2522,2523],{"class":1480}," 3",[622,2525,813],{"class":701},[622,2527,2528,2530],{"class":624,"line":816},[622,2529,839],{"class":701},[622,2531,842],{"class":705},[622,2533,2534,2536,2539,2541,2544,2546,2549],{"class":624,"line":828},[622,2535,2456],{"class":1028},[622,2537,2538],{"class":705}," drain ",[622,2540,2462],{"class":701},[622,2542,2543],{"class":758}," pipeline",[622,2545,761],{"class":705},[622,2547,2548],{"class":758},"createAxiomDrain",[622,2550,2551],{"class":705},"())\n",[622,2553,2554],{"class":624,"line":836},[622,2555,746],{"emptyLinePlaceholder":745},[622,2557,2558,2560,2562,2565,2567,2569,2572,2574,2576],{"class":624,"line":1193},[622,2559,752],{"class":697},[622,2561,755],{"class":697},[622,2563,2564],{"class":758}," defineNitroPlugin",[622,2566,761],{"class":705},[622,2568,761],{"class":701},[622,2570,2571],{"class":1035},"nitroApp",[622,2573,822],{"class":701},[622,2575,1041],{"class":1028},[622,2577,1044],{"class":701},[622,2579,2580,2583,2585,2588,2590,2593,2595,2597,2600,2602,2604,2607],{"class":624,"line":1213},[622,2581,2582],{"class":705},"  nitroApp",[622,2584,1096],{"class":701},[622,2586,2587],{"class":705},"hooks",[622,2589,1096],{"class":701},[622,2591,2592],{"class":758},"hook",[622,2594,761],{"class":770},[622,2596,810],{"class":701},[622,2598,2599],{"class":631},"evlog:drain",[622,2601,810],{"class":701},[622,2603,1168],{"class":701},[622,2605,2606],{"class":705}," drain",[622,2608,842],{"class":770},[622,2610,2611,2613],{"class":624,"line":1729},[622,2612,839],{"class":701},[622,2614,842],{"class":705},[1917,2616,2617,2618,1923,2621,2623,2624,1096],{"color":1919,"icon":13},"For Nitro v3 standalone, use ",[548,2619,2620],{},"definePlugin",[548,2622,718],{}," instead of ",[548,2625,2626],{},"defineNitroPlugin",[604,2628,2630],{"id":2629},"enricher-plugin","Enricher Plugin",[612,2632,2635],{"className":687,"code":2633,"filename":2634,"language":690,"meta":618,"style":618},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nconst enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[548,2636,2637,2662,2666,2690,2694,2714,2748,2778,2784],{"__ignoreMap":618},[622,2638,2639,2641,2643,2646,2648,2651,2653,2655,2657,2660],{"class":624,"line":625},[622,2640,698],{"class":697},[622,2642,702],{"class":701},[622,2644,2645],{"class":705}," createUserAgentEnricher",[622,2647,1168],{"class":701},[622,2649,2650],{"class":705}," createGeoEnricher",[622,2652,709],{"class":701},[622,2654,712],{"class":697},[622,2656,715],{"class":701},[622,2658,2659],{"class":631},"evlog\u002Fenrichers",[622,2661,721],{"class":701},[622,2663,2664],{"class":624,"line":724},[622,2665,746],{"emptyLinePlaceholder":745},[622,2667,2668,2670,2673,2675,2677,2680,2683,2685,2687],{"class":624,"line":742},[622,2669,2456],{"class":1028},[622,2671,2672],{"class":705}," enrichers ",[622,2674,2462],{"class":701},[622,2676,2054],{"class":705},[622,2678,2679],{"class":758},"createUserAgentEnricher",[622,2681,2682],{"class":705},"()",[622,2684,1168],{"class":701},[622,2686,2650],{"class":758},[622,2688,2689],{"class":705},"()]\n",[622,2691,2692],{"class":624,"line":749},[622,2693,746],{"emptyLinePlaceholder":745},[622,2695,2696,2698,2700,2702,2704,2706,2708,2710,2712],{"class":624,"line":767},[622,2697,752],{"class":697},[622,2699,755],{"class":697},[622,2701,2564],{"class":758},[622,2703,761],{"class":705},[622,2705,761],{"class":701},[622,2707,2571],{"class":1035},[622,2709,822],{"class":701},[622,2711,1041],{"class":1028},[622,2713,1044],{"class":701},[622,2715,2716,2718,2720,2722,2724,2726,2728,2730,2733,2735,2737,2739,2742,2744,2746],{"class":624,"line":780},[622,2717,2582],{"class":705},[622,2719,1096],{"class":701},[622,2721,2587],{"class":705},[622,2723,1096],{"class":701},[622,2725,2592],{"class":758},[622,2727,761],{"class":770},[622,2729,810],{"class":701},[622,2731,2732],{"class":631},"evlog:enrich",[622,2734,810],{"class":701},[622,2736,1168],{"class":701},[622,2738,1032],{"class":701},[622,2740,2741],{"class":1035},"ctx",[622,2743,822],{"class":701},[622,2745,1041],{"class":1028},[622,2747,1044],{"class":701},[622,2749,2750,2753,2755,2757,2760,2763,2766,2769,2772,2774,2776],{"class":624,"line":790},[622,2751,2752],{"class":697},"    for",[622,2754,1032],{"class":770},[622,2756,2456],{"class":1028},[622,2758,2759],{"class":705}," enricher",[622,2761,2762],{"class":701}," of",[622,2764,2765],{"class":705}," enrichers",[622,2767,2768],{"class":770},") ",[622,2770,2771],{"class":758},"enricher",[622,2773,761],{"class":770},[622,2775,2741],{"class":705},[622,2777,842],{"class":770},[622,2779,2780,2782],{"class":624,"line":816},[622,2781,1724],{"class":701},[622,2783,842],{"class":770},[622,2785,2786,2788],{"class":624,"line":828},[622,2787,839],{"class":701},[622,2789,842],{"class":705},[1917,2791,1937,2794,1965,2796,2798],{"color":2792,"icon":2793},"neutral","i-lucide-arrow-right",[589,2795,138],{"href":143},[589,2797,431],{"href":432}," docs for the full list of available drains and enrichers.",[600,2800,61],{"id":1953},[604,2802,2804],{"id":2803},"head-sampling","Head Sampling",[544,2806,2807],{},"Randomly keep a percentage of logs per level. Runs before the request completes.",[609,2809,2810,2994],{},[612,2811,2813],{"className":687,"code":2812,"filename":689,"language":690,"meta":618,"style":618},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n        keep: [\n          { duration: 1000 },\n          { status: 400 },\n        ],\n      },\n    })\n  ],\n})\n",[548,2814,2815,2833,2847,2851,2863,2871,2879,2888,2926,2935,2950,2964,2971,2975,2981,2987],{"__ignoreMap":618},[622,2816,2817,2819,2821,2823,2825,2827,2829,2831],{"class":624,"line":625},[622,2818,698],{"class":697},[622,2820,702],{"class":701},[622,2822,706],{"class":705},[622,2824,709],{"class":701},[622,2826,712],{"class":697},[622,2828,715],{"class":701},[622,2830,718],{"class":631},[622,2832,721],{"class":701},[622,2834,2835,2837,2839,2841,2843,2845],{"class":624,"line":724},[622,2836,698],{"class":697},[622,2838,729],{"class":705},[622,2840,732],{"class":697},[622,2842,715],{"class":701},[622,2844,737],{"class":631},[622,2846,721],{"class":701},[622,2848,2849],{"class":624,"line":742},[622,2850,746],{"emptyLinePlaceholder":745},[622,2852,2853,2855,2857,2859,2861],{"class":624,"line":749},[622,2854,752],{"class":697},[622,2856,755],{"class":697},[622,2858,706],{"class":758},[622,2860,761],{"class":705},[622,2862,764],{"class":701},[622,2864,2865,2867,2869],{"class":624,"line":767},[622,2866,771],{"class":770},[622,2868,774],{"class":701},[622,2870,777],{"class":705},[622,2872,2873,2875,2877],{"class":624,"line":780},[622,2874,783],{"class":758},[622,2876,761],{"class":705},[622,2878,764],{"class":701},[622,2880,2881,2884,2886],{"class":624,"line":790},[622,2882,2883],{"class":770},"      sampling",[622,2885,774],{"class":701},[622,2887,1044],{"class":701},[622,2889,2890,2893,2895,2897,2900,2902,2905,2907,2910,2912,2914,2916,2919,2921,2924],{"class":624,"line":816},[622,2891,2892],{"class":770},"        rates",[622,2894,774],{"class":701},[622,2896,702],{"class":701},[622,2898,2899],{"class":770}," info",[622,2901,774],{"class":701},[622,2903,2904],{"class":1480}," 10",[622,2906,1168],{"class":701},[622,2908,2909],{"class":770}," warn",[622,2911,774],{"class":701},[622,2913,2494],{"class":1480},[622,2915,1168],{"class":701},[622,2917,2918],{"class":770}," debug",[622,2920,774],{"class":701},[622,2922,2923],{"class":1480}," 5",[622,2925,813],{"class":701},[622,2927,2928,2931,2933],{"class":624,"line":828},[622,2929,2930],{"class":770},"        keep",[622,2932,774],{"class":701},[622,2934,777],{"class":705},[622,2936,2937,2940,2943,2945,2948],{"class":624,"line":836},[622,2938,2939],{"class":701},"          {",[622,2941,2942],{"class":770}," duration",[622,2944,774],{"class":701},[622,2946,2947],{"class":1480}," 1000",[622,2949,813],{"class":701},[622,2951,2952,2954,2957,2959,2962],{"class":624,"line":1193},[622,2953,2939],{"class":701},[622,2955,2956],{"class":770}," status",[622,2958,774],{"class":701},[622,2960,2961],{"class":1480}," 400",[622,2963,813],{"class":701},[622,2965,2966,2969],{"class":624,"line":1213},[622,2967,2968],{"class":705},"        ]",[622,2970,825],{"class":701},[622,2972,2973],{"class":624,"line":1729},[622,2974,2153],{"class":701},[622,2976,2977,2979],{"class":624,"line":1911},[622,2978,819],{"class":701},[622,2980,842],{"class":705},[622,2982,2983,2985],{"class":624,"line":2168},[622,2984,831],{"class":705},[622,2986,825],{"class":701},[622,2988,2990,2992],{"class":624,"line":2989},16,[622,2991,839],{"class":701},[622,2993,842],{"class":705},[612,2995,2997],{"className":687,"code":2996,"filename":846,"language":690,"meta":618,"style":618},"import { defineNitroConfig } from 'nitropack\u002Fconfig'\nimport evlog from 'evlog\u002Fnitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n        keep: [\n          { duration: 1000 },\n          { status: 400 },\n        ],\n      },\n    })\n  ],\n})\n",[548,2998,2999,3017,3031,3035,3047,3055,3063,3071,3103,3111,3123,3135,3141,3145,3151,3157],{"__ignoreMap":618},[622,3000,3001,3003,3005,3007,3009,3011,3013,3015],{"class":624,"line":625},[622,3002,698],{"class":697},[622,3004,702],{"class":701},[622,3006,857],{"class":705},[622,3008,709],{"class":701},[622,3010,712],{"class":697},[622,3012,715],{"class":701},[622,3014,866],{"class":631},[622,3016,721],{"class":701},[622,3018,3019,3021,3023,3025,3027,3029],{"class":624,"line":724},[622,3020,698],{"class":697},[622,3022,729],{"class":705},[622,3024,732],{"class":697},[622,3026,715],{"class":701},[622,3028,881],{"class":631},[622,3030,721],{"class":701},[622,3032,3033],{"class":624,"line":742},[622,3034,746],{"emptyLinePlaceholder":745},[622,3036,3037,3039,3041,3043,3045],{"class":624,"line":749},[622,3038,752],{"class":697},[622,3040,755],{"class":697},[622,3042,857],{"class":758},[622,3044,761],{"class":705},[622,3046,764],{"class":701},[622,3048,3049,3051,3053],{"class":624,"line":767},[622,3050,771],{"class":770},[622,3052,774],{"class":701},[622,3054,777],{"class":705},[622,3056,3057,3059,3061],{"class":624,"line":780},[622,3058,783],{"class":758},[622,3060,761],{"class":705},[622,3062,764],{"class":701},[622,3064,3065,3067,3069],{"class":624,"line":790},[622,3066,2883],{"class":770},[622,3068,774],{"class":701},[622,3070,1044],{"class":701},[622,3072,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101],{"class":624,"line":816},[622,3074,2892],{"class":770},[622,3076,774],{"class":701},[622,3078,702],{"class":701},[622,3080,2899],{"class":770},[622,3082,774],{"class":701},[622,3084,2904],{"class":1480},[622,3086,1168],{"class":701},[622,3088,2909],{"class":770},[622,3090,774],{"class":701},[622,3092,2494],{"class":1480},[622,3094,1168],{"class":701},[622,3096,2918],{"class":770},[622,3098,774],{"class":701},[622,3100,2923],{"class":1480},[622,3102,813],{"class":701},[622,3104,3105,3107,3109],{"class":624,"line":828},[622,3106,2930],{"class":770},[622,3108,774],{"class":701},[622,3110,777],{"class":705},[622,3112,3113,3115,3117,3119,3121],{"class":624,"line":836},[622,3114,2939],{"class":701},[622,3116,2942],{"class":770},[622,3118,774],{"class":701},[622,3120,2947],{"class":1480},[622,3122,813],{"class":701},[622,3124,3125,3127,3129,3131,3133],{"class":624,"line":1193},[622,3126,2939],{"class":701},[622,3128,2956],{"class":770},[622,3130,774],{"class":701},[622,3132,2961],{"class":1480},[622,3134,813],{"class":701},[622,3136,3137,3139],{"class":624,"line":1213},[622,3138,2968],{"class":705},[622,3140,825],{"class":701},[622,3142,3143],{"class":624,"line":1729},[622,3144,2153],{"class":701},[622,3146,3147,3149],{"class":624,"line":1911},[622,3148,819],{"class":701},[622,3150,842],{"class":705},[622,3152,3153,3155],{"class":624,"line":2168},[622,3154,831],{"class":705},[622,3156,825],{"class":701},[622,3158,3159,3161],{"class":624,"line":2989},[622,3160,839],{"class":701},[622,3162,842],{"class":705},[544,3164,3165],{},"Each level is a percentage from 0 to 100. Levels you don't configure default to 100% (keep everything).",[604,3167,3169],{"id":3168},"custom-tail-sampling","Custom Tail Sampling",[544,3171,3172,3173,3176],{},"For conditions beyond status, duration, and path, use the ",[548,3174,3175],{},"evlog:emit:keep"," hook:",[612,3178,3181],{"className":687,"code":3179,"filename":3180,"language":690,"meta":618,"style":618},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  })\n})\n","server\u002Fplugins\u002Fevlog-sampling.ts",[548,3182,3183,3203,3235,3279,3308,3314],{"__ignoreMap":618},[622,3184,3185,3187,3189,3191,3193,3195,3197,3199,3201],{"class":624,"line":625},[622,3186,752],{"class":697},[622,3188,755],{"class":697},[622,3190,2564],{"class":758},[622,3192,761],{"class":705},[622,3194,761],{"class":701},[622,3196,2571],{"class":1035},[622,3198,822],{"class":701},[622,3200,1041],{"class":1028},[622,3202,1044],{"class":701},[622,3204,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233],{"class":624,"line":724},[622,3206,2582],{"class":705},[622,3208,1096],{"class":701},[622,3210,2587],{"class":705},[622,3212,1096],{"class":701},[622,3214,2592],{"class":758},[622,3216,761],{"class":770},[622,3218,810],{"class":701},[622,3220,3175],{"class":631},[622,3222,810],{"class":701},[622,3224,1168],{"class":701},[622,3226,1032],{"class":701},[622,3228,2741],{"class":1035},[622,3230,822],{"class":701},[622,3232,1041],{"class":1028},[622,3234,1044],{"class":701},[622,3236,3237,3240,3242,3244,3247,3249,3252,3254,3257,3260,3262,3265,3268,3271,3273,3276],{"class":624,"line":742},[622,3238,3239],{"class":1028},"    const",[622,3241,1107],{"class":705},[622,3243,1055],{"class":701},[622,3245,3246],{"class":705}," ctx",[622,3248,1096],{"class":701},[622,3250,3251],{"class":705},"context",[622,3253,1096],{"class":701},[622,3255,3256],{"class":705},"user",[622,3258,3259],{"class":697}," as",[622,3261,702],{"class":701},[622,3263,3264],{"class":770}," premium",[622,3266,3267],{"class":701},"?:",[622,3269,3270],{"class":628}," boolean",[622,3272,709],{"class":701},[622,3274,3275],{"class":701}," |",[622,3277,3278],{"class":628}," undefined\n",[622,3280,3281,3284,3286,3288,3291,3294,3296,3298,3300,3303,3305],{"class":624,"line":749},[622,3282,3283],{"class":697},"    if",[622,3285,1032],{"class":770},[622,3287,3256],{"class":705},[622,3289,3290],{"class":701},"?.",[622,3292,3293],{"class":705},"premium",[622,3295,2768],{"class":770},[622,3297,2741],{"class":705},[622,3299,1096],{"class":701},[622,3301,3302],{"class":705},"shouldKeep",[622,3304,1055],{"class":701},[622,3306,3307],{"class":1206}," true\n",[622,3309,3310,3312],{"class":624,"line":767},[622,3311,1724],{"class":701},[622,3313,842],{"class":770},[622,3315,3316,3318],{"class":624,"line":780},[622,3317,839],{"class":701},[622,3319,842],{"class":705},[1917,3321,3322,3323,3326],{"color":1919,"icon":13},"Errors are always kept by default. You have to explicitly set ",[548,3324,3325],{},"error: 0"," to drop them.",[600,3328,3330],{"id":3329},"next-steps","Next Steps",[544,3332,3333,3334,3336],{},"Deepen your ",[1503,3335,245],{}," integration:",[561,3338,3339,3344,3349,3354],{},[564,3340,3341,3343],{},[589,3342,46],{"href":47},": Design comprehensive events with context layering",[564,3345,3346,3348],{},[589,3347,138],{"href":143},": Send logs to Axiom, Sentry, PostHog, and more",[564,3350,3351,3353],{},[589,3352,61],{"href":62},": Control log volume with head and tail sampling",[564,3355,3356,3358,3359,1545,3361,1549,3363,3365],{},[589,3357,51],{"href":52},": Throw errors with ",[548,3360,1544],{},[548,3362,1548],{},[548,3364,1552],{}," fields",[3367,3368,3369],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":618,"searchDepth":724,"depth":724,"links":3371},[3372,3376,3377,3378,3381,3385,3389],{"id":602,"depth":724,"text":25,"children":3373},[3374,3375],{"id":606,"depth":742,"text":607},{"id":681,"depth":742,"text":682},{"id":958,"depth":724,"text":46},{"id":1534,"depth":724,"text":1535},{"id":1934,"depth":724,"text":508,"children":3379},[3380],{"id":1957,"depth":742,"text":1958},{"id":2371,"depth":724,"text":2372,"children":3382},[3383,3384],{"id":2378,"depth":742,"text":2379},{"id":2629,"depth":742,"text":2630},{"id":1953,"depth":724,"text":61,"children":3386},[3387,3388],{"id":2803,"depth":742,"text":2804},{"id":3168,"depth":742,"text":3169},{"id":3329,"depth":724,"text":3330},"One module covers Nitro v3 and v2. Reach the request logger with `useLogger(event)`, and set drain and enrichers from Nitro plugins.","md",null,{},{"title":245,"icon":248},{"title":245,"description":3390},"v-_F3t7vbBBqx38div2VwJCjtRZJKG6Ymp3sr4vCszk",[3398,3400],{"title":240,"path":241,"stem":242,"description":3399,"icon":243,"children":-1},"Wire the handle and handleError hooks once, and every SvelteKit request carries a logger on `event.locals.log` until the response ends.",{"title":250,"path":251,"stem":252,"description":3401,"icon":253,"children":-1},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.",1786817434937]