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