[{"data":1,"prerenderedAt":3398},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nitro":534,"-integrate-frameworks-nitro-surround":3393},[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":3386,"extension":3387,"links":3388,"meta":3389,"navigation":3390,"path":246,"seo":3391,"stem":247,"__hash__":3392},"docs\u002F4.integrate\u002Fframeworks\u002F04.nitro.md",{"type":537,"value":538,"toc":3366},"minimark",[539,548,595,599,604,675,679,952,955,961,1433,1436,1495,1528,1532,1550,1912,1928,1931,1951,1955,1970,2352,2365,2369,2372,2376,2611,2623,2627,2786,2795,2797,2801,2804,3159,3162,3166,3173,3316,3323,3327,3333,3362],[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,1527],{},"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","After emit"," in Wide events.",[596,1529,1531],{"id":1530},"error-handling","Error Handling",[540,1533,1534,1537,1538,1541,1542,1545,1546,1549],{},[544,1535,1536],{},"createError"," produces structured errors with ",[544,1539,1540],{},"why",", ",[544,1543,1544],{},"fix",", and ",[544,1547,1548],{},"link"," fields that help both humans and AI agents understand what went wrong.",[605,1551,1552,1730],{},[608,1553,1556],{"className":683,"code":1554,"filename":1555,"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,1557,1558,1576,1599,1603,1625,1641,1645,1656,1668,1684,1700,1716,1723],{"__ignoreMap":614},[618,1559,1560,1562,1564,1566,1568,1570,1572,1574],{"class":620,"line":621},[618,1561,694],{"class":693},[618,1563,698],{"class":697},[618,1565,977],{"class":701},[618,1567,705],{"class":697},[618,1569,708],{"class":693},[618,1571,711],{"class":697},[618,1573,986],{"class":627},[618,1575,717],{"class":697},[618,1577,1578,1580,1582,1584,1586,1589,1591,1593,1595,1597],{"class":620,"line":720},[618,1579,694],{"class":693},[618,1581,698],{"class":697},[618,1583,997],{"class":701},[618,1585,1164],{"class":697},[618,1587,1588],{"class":701}," createError",[618,1590,705],{"class":697},[618,1592,708],{"class":693},[618,1594,711],{"class":697},[618,1596,733],{"class":627},[618,1598,717],{"class":697},[618,1600,1601],{"class":620,"line":738},[618,1602,742],{"emptyLinePlaceholder":741},[618,1604,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623],{"class":620,"line":745},[618,1606,748],{"class":693},[618,1608,751],{"class":693},[618,1610,977],{"class":754},[618,1612,757],{"class":701},[618,1614,1025],{"class":1024},[618,1616,1028],{"class":697},[618,1618,1032],{"class":1031},[618,1620,818],{"class":697},[618,1622,1037],{"class":1024},[618,1624,1040],{"class":697},[618,1626,1627,1629,1631,1633,1635,1637,1639],{"class":620,"line":763},[618,1628,1045],{"class":1024},[618,1630,1048],{"class":701},[618,1632,1051],{"class":697},[618,1634,997],{"class":754},[618,1636,757],{"class":766},[618,1638,1032],{"class":701},[618,1640,838],{"class":766},[618,1642,1643],{"class":620,"line":776},[618,1644,742],{"emptyLinePlaceholder":741},[618,1646,1647,1650,1652,1654],{"class":620,"line":786},[618,1648,1649],{"class":693},"  throw",[618,1651,1588],{"class":754},[618,1653,757],{"class":766},[618,1655,760],{"class":697},[618,1657,1658,1661,1663,1666],{"class":620,"line":812},[618,1659,1660],{"class":766},"    status",[618,1662,770],{"class":697},[618,1664,1665],{"class":1476}," 402",[618,1667,821],{"class":697},[618,1669,1670,1673,1675,1677,1680,1682],{"class":620,"line":824},[618,1671,1672],{"class":766},"    message",[618,1674,770],{"class":697},[618,1676,711],{"class":697},[618,1678,1679],{"class":627},"Payment failed",[618,1681,806],{"class":697},[618,1683,821],{"class":697},[618,1685,1686,1689,1691,1693,1696,1698],{"class":620,"line":832},[618,1687,1688],{"class":766},"    why",[618,1690,770],{"class":697},[618,1692,711],{"class":697},[618,1694,1695],{"class":627},"Card declined by issuer",[618,1697,806],{"class":697},[618,1699,821],{"class":697},[618,1701,1702,1705,1707,1709,1712,1714],{"class":620,"line":1189},[618,1703,1704],{"class":766},"    fix",[618,1706,770],{"class":697},[618,1708,711],{"class":697},[618,1710,1711],{"class":627},"Try a different payment method",[618,1713,806],{"class":697},[618,1715,821],{"class":697},[618,1717,1718,1721],{"class":620,"line":1209},[618,1719,1720],{"class":697},"  }",[618,1722,838],{"class":766},[618,1724,1726,1728],{"class":620,"line":1725},13,[618,1727,835],{"class":697},[618,1729,838],{"class":701},[608,1731,1734],{"className":683,"code":1732,"filename":1733,"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,1735,1736,1754,1772,1791,1795,1817,1833,1837,1847,1857,1871,1885,1899,1905],{"__ignoreMap":614},[618,1737,1738,1740,1742,1744,1746,1748,1750,1752],{"class":620,"line":621},[618,1739,694],{"class":693},[618,1741,698],{"class":697},[618,1743,1228],{"class":701},[618,1745,705],{"class":697},[618,1747,708],{"class":693},[618,1749,711],{"class":697},[618,1751,600],{"class":627},[618,1753,717],{"class":697},[618,1755,1756,1758,1760,1762,1764,1766,1768,1770],{"class":620,"line":720},[618,1757,694],{"class":693},[618,1759,698],{"class":697},[618,1761,997],{"class":701},[618,1763,705],{"class":697},[618,1765,708],{"class":693},[618,1767,711],{"class":697},[618,1769,877],{"class":627},[618,1771,717],{"class":697},[618,1773,1774,1776,1778,1780,1782,1784,1786,1789],{"class":620,"line":738},[618,1775,694],{"class":693},[618,1777,698],{"class":697},[618,1779,1588],{"class":701},[618,1781,705],{"class":697},[618,1783,708],{"class":693},[618,1785,711],{"class":697},[618,1787,1788],{"class":627},"evlog",[618,1790,717],{"class":697},[618,1792,1793],{"class":620,"line":745},[618,1794,742],{"emptyLinePlaceholder":741},[618,1796,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815],{"class":620,"line":763},[618,1798,748],{"class":693},[618,1800,751],{"class":693},[618,1802,1228],{"class":754},[618,1804,757],{"class":701},[618,1806,1025],{"class":1024},[618,1808,1028],{"class":697},[618,1810,1032],{"class":1031},[618,1812,818],{"class":697},[618,1814,1037],{"class":1024},[618,1816,1040],{"class":697},[618,1818,1819,1821,1823,1825,1827,1829,1831],{"class":620,"line":776},[618,1820,1045],{"class":1024},[618,1822,1048],{"class":701},[618,1824,1051],{"class":697},[618,1826,997],{"class":754},[618,1828,757],{"class":766},[618,1830,1032],{"class":701},[618,1832,838],{"class":766},[618,1834,1835],{"class":620,"line":786},[618,1836,742],{"emptyLinePlaceholder":741},[618,1838,1839,1841,1843,1845],{"class":620,"line":812},[618,1840,1649],{"class":693},[618,1842,1588],{"class":754},[618,1844,757],{"class":766},[618,1846,760],{"class":697},[618,1848,1849,1851,1853,1855],{"class":620,"line":824},[618,1850,1660],{"class":766},[618,1852,770],{"class":697},[618,1854,1665],{"class":1476},[618,1856,821],{"class":697},[618,1858,1859,1861,1863,1865,1867,1869],{"class":620,"line":832},[618,1860,1672],{"class":766},[618,1862,770],{"class":697},[618,1864,711],{"class":697},[618,1866,1679],{"class":627},[618,1868,806],{"class":697},[618,1870,821],{"class":697},[618,1872,1873,1875,1877,1879,1881,1883],{"class":620,"line":1189},[618,1874,1688],{"class":766},[618,1876,770],{"class":697},[618,1878,711],{"class":697},[618,1880,1695],{"class":627},[618,1882,806],{"class":697},[618,1884,821],{"class":697},[618,1886,1887,1889,1891,1893,1895,1897],{"class":620,"line":1209},[618,1888,1704],{"class":766},[618,1890,770],{"class":697},[618,1892,711],{"class":697},[618,1894,1711],{"class":627},[618,1896,806],{"class":697},[618,1898,821],{"class":697},[618,1900,1901,1903],{"class":620,"line":1725},[618,1902,1720],{"class":697},[618,1904,838],{"class":766},[618,1906,1908,1910],{"class":620,"line":1907},14,[618,1909,835],{"class":697},[618,1911,838],{"class":701},[1913,1914,1916,1917,1919,1920,1922,1923,1919,1925,1927],"callout",{"color":1915,"icon":13},"info","In Nitro v3, import ",[544,1918,1536],{}," from ",[544,1921,733],{}," - it wraps the Nitro error handler. In Nitro v2, import ",[544,1924,1536],{},[544,1926,1788],{}," directly.",[596,1929,504],{"id":1930},"configuration",[540,1932,1933,1934,1937,1938,1541,1941,1541,1944,1541,1947,1950],{},"See the ",[585,1935,1936],{"href":505},"Configuration reference"," for all available options (",[544,1939,1940],{},"enabled",[544,1942,1943],{},"pretty",[544,1945,1946],{},"silent",[544,1948,1949],{},"sampling",", etc.).",[600,1952,1954],{"id":1953},"route-filtering","Route Filtering",[540,1956,1957,1958,1961,1962,1965,1966,1969],{},"Use ",[544,1959,1960],{},"include"," and ",[544,1963,1964],{},"exclude"," to control which routes are logged, and ",[544,1967,1968],{},"routes"," to assign different service names to different route groups:",[605,1971,1972,2169],{},[608,1973,1975],{"className":683,"code":1974,"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,1976,1977,1995,2009,2013,2025,2033,2041,2063,2083,2092,2119,2145,2150,2156,2162],{"__ignoreMap":614},[618,1978,1979,1981,1983,1985,1987,1989,1991,1993],{"class":620,"line":621},[618,1980,694],{"class":693},[618,1982,698],{"class":697},[618,1984,702],{"class":701},[618,1986,705],{"class":697},[618,1988,708],{"class":693},[618,1990,711],{"class":697},[618,1992,714],{"class":627},[618,1994,717],{"class":697},[618,1996,1997,1999,2001,2003,2005,2007],{"class":620,"line":720},[618,1998,694],{"class":693},[618,2000,725],{"class":701},[618,2002,728],{"class":693},[618,2004,711],{"class":697},[618,2006,733],{"class":627},[618,2008,717],{"class":697},[618,2010,2011],{"class":620,"line":738},[618,2012,742],{"emptyLinePlaceholder":741},[618,2014,2015,2017,2019,2021,2023],{"class":620,"line":745},[618,2016,748],{"class":693},[618,2018,751],{"class":693},[618,2020,702],{"class":754},[618,2022,757],{"class":701},[618,2024,760],{"class":697},[618,2026,2027,2029,2031],{"class":620,"line":763},[618,2028,767],{"class":766},[618,2030,770],{"class":697},[618,2032,773],{"class":701},[618,2034,2035,2037,2039],{"class":620,"line":776},[618,2036,779],{"class":754},[618,2038,757],{"class":701},[618,2040,760],{"class":697},[618,2042,2043,2046,2048,2051,2053,2056,2058,2061],{"class":620,"line":786},[618,2044,2045],{"class":766},"      include",[618,2047,770],{"class":697},[618,2049,2050],{"class":701}," [",[618,2052,806],{"class":697},[618,2054,2055],{"class":627},"\u002Fapi\u002F**",[618,2057,806],{"class":697},[618,2059,2060],{"class":701},"]",[618,2062,821],{"class":697},[618,2064,2065,2068,2070,2072,2074,2077,2079,2081],{"class":620,"line":812},[618,2066,2067],{"class":766},"      exclude",[618,2069,770],{"class":697},[618,2071,2050],{"class":701},[618,2073,806],{"class":697},[618,2075,2076],{"class":627},"\u002Fapi\u002Fhealth",[618,2078,806],{"class":697},[618,2080,2060],{"class":701},[618,2082,821],{"class":697},[618,2084,2085,2088,2090],{"class":620,"line":824},[618,2086,2087],{"class":766},"      routes",[618,2089,770],{"class":697},[618,2091,1040],{"class":697},[618,2093,2094,2097,2100,2102,2104,2106,2108,2110,2112,2115,2117],{"class":620,"line":832},[618,2095,2096],{"class":697},"        '",[618,2098,2099],{"class":766},"\u002Fapi\u002Fauth\u002F**",[618,2101,806],{"class":697},[618,2103,770],{"class":697},[618,2105,698],{"class":697},[618,2107,796],{"class":766},[618,2109,770],{"class":697},[618,2111,711],{"class":697},[618,2113,2114],{"class":627},"auth-service",[618,2116,806],{"class":697},[618,2118,809],{"class":697},[618,2120,2121,2123,2126,2128,2130,2132,2134,2136,2138,2141,2143],{"class":620,"line":1189},[618,2122,2096],{"class":697},[618,2124,2125],{"class":766},"\u002Fapi\u002Fpayment\u002F**",[618,2127,806],{"class":697},[618,2129,770],{"class":697},[618,2131,698],{"class":697},[618,2133,796],{"class":766},[618,2135,770],{"class":697},[618,2137,711],{"class":697},[618,2139,2140],{"class":627},"payment-service",[618,2142,806],{"class":697},[618,2144,809],{"class":697},[618,2146,2147],{"class":620,"line":1209},[618,2148,2149],{"class":697},"      },\n",[618,2151,2152,2154],{"class":620,"line":1725},[618,2153,815],{"class":697},[618,2155,838],{"class":701},[618,2157,2158,2160],{"class":620,"line":1907},[618,2159,827],{"class":701},[618,2161,821],{"class":697},[618,2163,2165,2167],{"class":620,"line":2164},15,[618,2166,835],{"class":697},[618,2168,838],{"class":701},[608,2170,2172],{"className":683,"code":2171,"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,2173,2174,2192,2206,2210,2222,2230,2238,2256,2274,2282,2306,2330,2334,2340,2346],{"__ignoreMap":614},[618,2175,2176,2178,2180,2182,2184,2186,2188,2190],{"class":620,"line":621},[618,2177,694],{"class":693},[618,2179,698],{"class":697},[618,2181,853],{"class":701},[618,2183,705],{"class":697},[618,2185,708],{"class":693},[618,2187,711],{"class":697},[618,2189,862],{"class":627},[618,2191,717],{"class":697},[618,2193,2194,2196,2198,2200,2202,2204],{"class":620,"line":720},[618,2195,694],{"class":693},[618,2197,725],{"class":701},[618,2199,728],{"class":693},[618,2201,711],{"class":697},[618,2203,877],{"class":627},[618,2205,717],{"class":697},[618,2207,2208],{"class":620,"line":738},[618,2209,742],{"emptyLinePlaceholder":741},[618,2211,2212,2214,2216,2218,2220],{"class":620,"line":745},[618,2213,748],{"class":693},[618,2215,751],{"class":693},[618,2217,853],{"class":754},[618,2219,757],{"class":701},[618,2221,760],{"class":697},[618,2223,2224,2226,2228],{"class":620,"line":763},[618,2225,767],{"class":766},[618,2227,770],{"class":697},[618,2229,773],{"class":701},[618,2231,2232,2234,2236],{"class":620,"line":776},[618,2233,779],{"class":754},[618,2235,757],{"class":701},[618,2237,760],{"class":697},[618,2239,2240,2242,2244,2246,2248,2250,2252,2254],{"class":620,"line":786},[618,2241,2045],{"class":766},[618,2243,770],{"class":697},[618,2245,2050],{"class":701},[618,2247,806],{"class":697},[618,2249,2055],{"class":627},[618,2251,806],{"class":697},[618,2253,2060],{"class":701},[618,2255,821],{"class":697},[618,2257,2258,2260,2262,2264,2266,2268,2270,2272],{"class":620,"line":812},[618,2259,2067],{"class":766},[618,2261,770],{"class":697},[618,2263,2050],{"class":701},[618,2265,806],{"class":697},[618,2267,2076],{"class":627},[618,2269,806],{"class":697},[618,2271,2060],{"class":701},[618,2273,821],{"class":697},[618,2275,2276,2278,2280],{"class":620,"line":824},[618,2277,2087],{"class":766},[618,2279,770],{"class":697},[618,2281,1040],{"class":697},[618,2283,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304],{"class":620,"line":832},[618,2285,2096],{"class":697},[618,2287,2099],{"class":766},[618,2289,806],{"class":697},[618,2291,770],{"class":697},[618,2293,698],{"class":697},[618,2295,796],{"class":766},[618,2297,770],{"class":697},[618,2299,711],{"class":697},[618,2301,2114],{"class":627},[618,2303,806],{"class":697},[618,2305,809],{"class":697},[618,2307,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328],{"class":620,"line":1189},[618,2309,2096],{"class":697},[618,2311,2125],{"class":766},[618,2313,806],{"class":697},[618,2315,770],{"class":697},[618,2317,698],{"class":697},[618,2319,796],{"class":766},[618,2321,770],{"class":697},[618,2323,711],{"class":697},[618,2325,2140],{"class":627},[618,2327,806],{"class":697},[618,2329,809],{"class":697},[618,2331,2332],{"class":620,"line":1209},[618,2333,2149],{"class":697},[618,2335,2336,2338],{"class":620,"line":1725},[618,2337,815],{"class":697},[618,2339,838],{"class":701},[618,2341,2342,2344],{"class":620,"line":1907},[618,2343,827],{"class":701},[618,2345,821],{"class":697},[618,2347,2348,2350],{"class":620,"line":2164},[618,2349,835],{"class":697},[618,2351,838],{"class":701},[1913,2353,2356,2359,2360,1961,2362,2364],{"color":2354,"icon":2355},"warning","i-lucide-alert-triangle",[1499,2357,2358],{},"Exclusions take precedence."," If a path matches both ",[544,2361,1960],{},[544,2363,1964],{},", it will be excluded.",[596,2366,2368],{"id":2367},"drain-enrichers","Drain & Enrichers",[540,2370,2371],{},"Use Nitro plugin hooks to send logs to external services and enrich them with additional context.",[600,2373,2375],{"id":2374},"drain-plugin","Drain Plugin",[608,2377,2380],{"className":683,"code":2378,"filename":2379,"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,2381,2382,2404,2424,2444,2448,2474,2503,2522,2528,2548,2552,2574,2605],{"__ignoreMap":614},[618,2383,2384,2386,2389,2391,2394,2396,2398,2400,2402],{"class":620,"line":621},[618,2385,694],{"class":693},[618,2387,2388],{"class":693}," type",[618,2390,698],{"class":697},[618,2392,2393],{"class":701}," DrainContext",[618,2395,705],{"class":697},[618,2397,708],{"class":693},[618,2399,711],{"class":697},[618,2401,1788],{"class":627},[618,2403,717],{"class":697},[618,2405,2406,2408,2410,2413,2415,2417,2419,2422],{"class":620,"line":720},[618,2407,694],{"class":693},[618,2409,698],{"class":697},[618,2411,2412],{"class":701}," createAxiomDrain",[618,2414,705],{"class":697},[618,2416,708],{"class":693},[618,2418,711],{"class":697},[618,2420,2421],{"class":627},"evlog\u002Faxiom",[618,2423,717],{"class":697},[618,2425,2426,2428,2430,2433,2435,2437,2439,2442],{"class":620,"line":738},[618,2427,694],{"class":693},[618,2429,698],{"class":697},[618,2431,2432],{"class":701}," createDrainPipeline",[618,2434,705],{"class":697},[618,2436,708],{"class":693},[618,2438,711],{"class":697},[618,2440,2441],{"class":627},"evlog\u002Fpipeline",[618,2443,717],{"class":697},[618,2445,2446],{"class":620,"line":745},[618,2447,742],{"emptyLinePlaceholder":741},[618,2449,2450,2453,2456,2459,2461,2464,2467,2470,2472],{"class":620,"line":763},[618,2451,2452],{"class":1024},"const",[618,2454,2455],{"class":701}," pipeline ",[618,2457,2458],{"class":697},"=",[618,2460,2432],{"class":754},[618,2462,2463],{"class":697},"\u003C",[618,2465,2466],{"class":624},"DrainContext",[618,2468,2469],{"class":697},">",[618,2471,757],{"class":701},[618,2473,760],{"class":697},[618,2475,2476,2479,2481,2483,2486,2488,2491,2493,2496,2498,2501],{"class":620,"line":776},[618,2477,2478],{"class":766},"  batch",[618,2480,770],{"class":697},[618,2482,698],{"class":697},[618,2484,2485],{"class":766}," size",[618,2487,770],{"class":697},[618,2489,2490],{"class":1476}," 50",[618,2492,1164],{"class":697},[618,2494,2495],{"class":766}," intervalMs",[618,2497,770],{"class":697},[618,2499,2500],{"class":1476}," 5000",[618,2502,809],{"class":697},[618,2504,2505,2508,2510,2512,2515,2517,2520],{"class":620,"line":786},[618,2506,2507],{"class":766},"  retry",[618,2509,770],{"class":697},[618,2511,698],{"class":697},[618,2513,2514],{"class":766}," maxAttempts",[618,2516,770],{"class":697},[618,2518,2519],{"class":1476}," 3",[618,2521,809],{"class":697},[618,2523,2524,2526],{"class":620,"line":812},[618,2525,835],{"class":697},[618,2527,838],{"class":701},[618,2529,2530,2532,2535,2537,2540,2542,2545],{"class":620,"line":824},[618,2531,2452],{"class":1024},[618,2533,2534],{"class":701}," drain ",[618,2536,2458],{"class":697},[618,2538,2539],{"class":754}," pipeline",[618,2541,757],{"class":701},[618,2543,2544],{"class":754},"createAxiomDrain",[618,2546,2547],{"class":701},"())\n",[618,2549,2550],{"class":620,"line":832},[618,2551,742],{"emptyLinePlaceholder":741},[618,2553,2554,2556,2558,2561,2563,2565,2568,2570,2572],{"class":620,"line":1189},[618,2555,748],{"class":693},[618,2557,751],{"class":693},[618,2559,2560],{"class":754}," defineNitroPlugin",[618,2562,757],{"class":701},[618,2564,757],{"class":697},[618,2566,2567],{"class":1031},"nitroApp",[618,2569,818],{"class":697},[618,2571,1037],{"class":1024},[618,2573,1040],{"class":697},[618,2575,2576,2579,2581,2584,2586,2589,2591,2593,2596,2598,2600,2603],{"class":620,"line":1209},[618,2577,2578],{"class":701},"  nitroApp",[618,2580,1092],{"class":697},[618,2582,2583],{"class":701},"hooks",[618,2585,1092],{"class":697},[618,2587,2588],{"class":754},"hook",[618,2590,757],{"class":766},[618,2592,806],{"class":697},[618,2594,2595],{"class":627},"evlog:drain",[618,2597,806],{"class":697},[618,2599,1164],{"class":697},[618,2601,2602],{"class":701}," drain",[618,2604,838],{"class":766},[618,2606,2607,2609],{"class":620,"line":1725},[618,2608,835],{"class":697},[618,2610,838],{"class":701},[1913,2612,2613,2614,1919,2617,2619,2620,1092],{"color":1915,"icon":13},"For Nitro v3 standalone, use ",[544,2615,2616],{},"definePlugin",[544,2618,714],{}," instead of ",[544,2621,2622],{},"defineNitroPlugin",[600,2624,2626],{"id":2625},"enricher-plugin","Enricher Plugin",[608,2628,2631],{"className":683,"code":2629,"filename":2630,"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,2632,2633,2658,2662,2686,2690,2710,2744,2774,2780],{"__ignoreMap":614},[618,2634,2635,2637,2639,2642,2644,2647,2649,2651,2653,2656],{"class":620,"line":621},[618,2636,694],{"class":693},[618,2638,698],{"class":697},[618,2640,2641],{"class":701}," createUserAgentEnricher",[618,2643,1164],{"class":697},[618,2645,2646],{"class":701}," createGeoEnricher",[618,2648,705],{"class":697},[618,2650,708],{"class":693},[618,2652,711],{"class":697},[618,2654,2655],{"class":627},"evlog\u002Fenrichers",[618,2657,717],{"class":697},[618,2659,2660],{"class":620,"line":720},[618,2661,742],{"emptyLinePlaceholder":741},[618,2663,2664,2666,2669,2671,2673,2676,2679,2681,2683],{"class":620,"line":738},[618,2665,2452],{"class":1024},[618,2667,2668],{"class":701}," enrichers ",[618,2670,2458],{"class":697},[618,2672,2050],{"class":701},[618,2674,2675],{"class":754},"createUserAgentEnricher",[618,2677,2678],{"class":701},"()",[618,2680,1164],{"class":697},[618,2682,2646],{"class":754},[618,2684,2685],{"class":701},"()]\n",[618,2687,2688],{"class":620,"line":745},[618,2689,742],{"emptyLinePlaceholder":741},[618,2691,2692,2694,2696,2698,2700,2702,2704,2706,2708],{"class":620,"line":763},[618,2693,748],{"class":693},[618,2695,751],{"class":693},[618,2697,2560],{"class":754},[618,2699,757],{"class":701},[618,2701,757],{"class":697},[618,2703,2567],{"class":1031},[618,2705,818],{"class":697},[618,2707,1037],{"class":1024},[618,2709,1040],{"class":697},[618,2711,2712,2714,2716,2718,2720,2722,2724,2726,2729,2731,2733,2735,2738,2740,2742],{"class":620,"line":776},[618,2713,2578],{"class":701},[618,2715,1092],{"class":697},[618,2717,2583],{"class":701},[618,2719,1092],{"class":697},[618,2721,2588],{"class":754},[618,2723,757],{"class":766},[618,2725,806],{"class":697},[618,2727,2728],{"class":627},"evlog:enrich",[618,2730,806],{"class":697},[618,2732,1164],{"class":697},[618,2734,1028],{"class":697},[618,2736,2737],{"class":1031},"ctx",[618,2739,818],{"class":697},[618,2741,1037],{"class":1024},[618,2743,1040],{"class":697},[618,2745,2746,2749,2751,2753,2756,2759,2762,2765,2768,2770,2772],{"class":620,"line":786},[618,2747,2748],{"class":693},"    for",[618,2750,1028],{"class":766},[618,2752,2452],{"class":1024},[618,2754,2755],{"class":701}," enricher",[618,2757,2758],{"class":697}," of",[618,2760,2761],{"class":701}," enrichers",[618,2763,2764],{"class":766},") ",[618,2766,2767],{"class":754},"enricher",[618,2769,757],{"class":766},[618,2771,2737],{"class":701},[618,2773,838],{"class":766},[618,2775,2776,2778],{"class":620,"line":812},[618,2777,1720],{"class":697},[618,2779,838],{"class":766},[618,2781,2782,2784],{"class":620,"line":824},[618,2783,835],{"class":697},[618,2785,838],{"class":701},[1913,2787,1933,2790,1961,2792,2794],{"color":2788,"icon":2789},"neutral","i-lucide-arrow-right",[585,2791,138],{"href":143},[585,2793,431],{"href":432}," docs for the full list of available drains and enrichers.",[596,2796,61],{"id":1949},[600,2798,2800],{"id":2799},"head-sampling","Head Sampling",[540,2802,2803],{},"Randomly keep a percentage of logs per level. Runs before the request completes.",[605,2805,2806,2990],{},[608,2807,2809],{"className":683,"code":2808,"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,2810,2811,2829,2843,2847,2859,2867,2875,2884,2922,2931,2946,2960,2967,2971,2977,2983],{"__ignoreMap":614},[618,2812,2813,2815,2817,2819,2821,2823,2825,2827],{"class":620,"line":621},[618,2814,694],{"class":693},[618,2816,698],{"class":697},[618,2818,702],{"class":701},[618,2820,705],{"class":697},[618,2822,708],{"class":693},[618,2824,711],{"class":697},[618,2826,714],{"class":627},[618,2828,717],{"class":697},[618,2830,2831,2833,2835,2837,2839,2841],{"class":620,"line":720},[618,2832,694],{"class":693},[618,2834,725],{"class":701},[618,2836,728],{"class":693},[618,2838,711],{"class":697},[618,2840,733],{"class":627},[618,2842,717],{"class":697},[618,2844,2845],{"class":620,"line":738},[618,2846,742],{"emptyLinePlaceholder":741},[618,2848,2849,2851,2853,2855,2857],{"class":620,"line":745},[618,2850,748],{"class":693},[618,2852,751],{"class":693},[618,2854,702],{"class":754},[618,2856,757],{"class":701},[618,2858,760],{"class":697},[618,2860,2861,2863,2865],{"class":620,"line":763},[618,2862,767],{"class":766},[618,2864,770],{"class":697},[618,2866,773],{"class":701},[618,2868,2869,2871,2873],{"class":620,"line":776},[618,2870,779],{"class":754},[618,2872,757],{"class":701},[618,2874,760],{"class":697},[618,2876,2877,2880,2882],{"class":620,"line":786},[618,2878,2879],{"class":766},"      sampling",[618,2881,770],{"class":697},[618,2883,1040],{"class":697},[618,2885,2886,2889,2891,2893,2896,2898,2901,2903,2906,2908,2910,2912,2915,2917,2920],{"class":620,"line":812},[618,2887,2888],{"class":766},"        rates",[618,2890,770],{"class":697},[618,2892,698],{"class":697},[618,2894,2895],{"class":766}," info",[618,2897,770],{"class":697},[618,2899,2900],{"class":1476}," 10",[618,2902,1164],{"class":697},[618,2904,2905],{"class":766}," warn",[618,2907,770],{"class":697},[618,2909,2490],{"class":1476},[618,2911,1164],{"class":697},[618,2913,2914],{"class":766}," debug",[618,2916,770],{"class":697},[618,2918,2919],{"class":1476}," 5",[618,2921,809],{"class":697},[618,2923,2924,2927,2929],{"class":620,"line":824},[618,2925,2926],{"class":766},"        keep",[618,2928,770],{"class":697},[618,2930,773],{"class":701},[618,2932,2933,2936,2939,2941,2944],{"class":620,"line":832},[618,2934,2935],{"class":697},"          {",[618,2937,2938],{"class":766}," duration",[618,2940,770],{"class":697},[618,2942,2943],{"class":1476}," 1000",[618,2945,809],{"class":697},[618,2947,2948,2950,2953,2955,2958],{"class":620,"line":1189},[618,2949,2935],{"class":697},[618,2951,2952],{"class":766}," status",[618,2954,770],{"class":697},[618,2956,2957],{"class":1476}," 400",[618,2959,809],{"class":697},[618,2961,2962,2965],{"class":620,"line":1209},[618,2963,2964],{"class":701},"        ]",[618,2966,821],{"class":697},[618,2968,2969],{"class":620,"line":1725},[618,2970,2149],{"class":697},[618,2972,2973,2975],{"class":620,"line":1907},[618,2974,815],{"class":697},[618,2976,838],{"class":701},[618,2978,2979,2981],{"class":620,"line":2164},[618,2980,827],{"class":701},[618,2982,821],{"class":697},[618,2984,2986,2988],{"class":620,"line":2985},16,[618,2987,835],{"class":697},[618,2989,838],{"class":701},[608,2991,2993],{"className":683,"code":2992,"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,2994,2995,3013,3027,3031,3043,3051,3059,3067,3099,3107,3119,3131,3137,3141,3147,3153],{"__ignoreMap":614},[618,2996,2997,2999,3001,3003,3005,3007,3009,3011],{"class":620,"line":621},[618,2998,694],{"class":693},[618,3000,698],{"class":697},[618,3002,853],{"class":701},[618,3004,705],{"class":697},[618,3006,708],{"class":693},[618,3008,711],{"class":697},[618,3010,862],{"class":627},[618,3012,717],{"class":697},[618,3014,3015,3017,3019,3021,3023,3025],{"class":620,"line":720},[618,3016,694],{"class":693},[618,3018,725],{"class":701},[618,3020,728],{"class":693},[618,3022,711],{"class":697},[618,3024,877],{"class":627},[618,3026,717],{"class":697},[618,3028,3029],{"class":620,"line":738},[618,3030,742],{"emptyLinePlaceholder":741},[618,3032,3033,3035,3037,3039,3041],{"class":620,"line":745},[618,3034,748],{"class":693},[618,3036,751],{"class":693},[618,3038,853],{"class":754},[618,3040,757],{"class":701},[618,3042,760],{"class":697},[618,3044,3045,3047,3049],{"class":620,"line":763},[618,3046,767],{"class":766},[618,3048,770],{"class":697},[618,3050,773],{"class":701},[618,3052,3053,3055,3057],{"class":620,"line":776},[618,3054,779],{"class":754},[618,3056,757],{"class":701},[618,3058,760],{"class":697},[618,3060,3061,3063,3065],{"class":620,"line":786},[618,3062,2879],{"class":766},[618,3064,770],{"class":697},[618,3066,1040],{"class":697},[618,3068,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097],{"class":620,"line":812},[618,3070,2888],{"class":766},[618,3072,770],{"class":697},[618,3074,698],{"class":697},[618,3076,2895],{"class":766},[618,3078,770],{"class":697},[618,3080,2900],{"class":1476},[618,3082,1164],{"class":697},[618,3084,2905],{"class":766},[618,3086,770],{"class":697},[618,3088,2490],{"class":1476},[618,3090,1164],{"class":697},[618,3092,2914],{"class":766},[618,3094,770],{"class":697},[618,3096,2919],{"class":1476},[618,3098,809],{"class":697},[618,3100,3101,3103,3105],{"class":620,"line":824},[618,3102,2926],{"class":766},[618,3104,770],{"class":697},[618,3106,773],{"class":701},[618,3108,3109,3111,3113,3115,3117],{"class":620,"line":832},[618,3110,2935],{"class":697},[618,3112,2938],{"class":766},[618,3114,770],{"class":697},[618,3116,2943],{"class":1476},[618,3118,809],{"class":697},[618,3120,3121,3123,3125,3127,3129],{"class":620,"line":1189},[618,3122,2935],{"class":697},[618,3124,2952],{"class":766},[618,3126,770],{"class":697},[618,3128,2957],{"class":1476},[618,3130,809],{"class":697},[618,3132,3133,3135],{"class":620,"line":1209},[618,3134,2964],{"class":701},[618,3136,821],{"class":697},[618,3138,3139],{"class":620,"line":1725},[618,3140,2149],{"class":697},[618,3142,3143,3145],{"class":620,"line":1907},[618,3144,815],{"class":697},[618,3146,838],{"class":701},[618,3148,3149,3151],{"class":620,"line":2164},[618,3150,827],{"class":701},[618,3152,821],{"class":697},[618,3154,3155,3157],{"class":620,"line":2985},[618,3156,835],{"class":697},[618,3158,838],{"class":701},[540,3160,3161],{},"Each level is a percentage from 0 to 100. Levels you don't configure default to 100% (keep everything).",[600,3163,3165],{"id":3164},"custom-tail-sampling","Custom Tail Sampling",[540,3167,3168,3169,3172],{},"For conditions beyond status, duration, and path, use the ",[544,3170,3171],{},"evlog:emit:keep"," hook:",[608,3174,3177],{"className":683,"code":3175,"filename":3176,"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,3178,3179,3199,3231,3275,3304,3310],{"__ignoreMap":614},[618,3180,3181,3183,3185,3187,3189,3191,3193,3195,3197],{"class":620,"line":621},[618,3182,748],{"class":693},[618,3184,751],{"class":693},[618,3186,2560],{"class":754},[618,3188,757],{"class":701},[618,3190,757],{"class":697},[618,3192,2567],{"class":1031},[618,3194,818],{"class":697},[618,3196,1037],{"class":1024},[618,3198,1040],{"class":697},[618,3200,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229],{"class":620,"line":720},[618,3202,2578],{"class":701},[618,3204,1092],{"class":697},[618,3206,2583],{"class":701},[618,3208,1092],{"class":697},[618,3210,2588],{"class":754},[618,3212,757],{"class":766},[618,3214,806],{"class":697},[618,3216,3171],{"class":627},[618,3218,806],{"class":697},[618,3220,1164],{"class":697},[618,3222,1028],{"class":697},[618,3224,2737],{"class":1031},[618,3226,818],{"class":697},[618,3228,1037],{"class":1024},[618,3230,1040],{"class":697},[618,3232,3233,3236,3238,3240,3243,3245,3248,3250,3253,3256,3258,3261,3264,3267,3269,3272],{"class":620,"line":738},[618,3234,3235],{"class":1024},"    const",[618,3237,1103],{"class":701},[618,3239,1051],{"class":697},[618,3241,3242],{"class":701}," ctx",[618,3244,1092],{"class":697},[618,3246,3247],{"class":701},"context",[618,3249,1092],{"class":697},[618,3251,3252],{"class":701},"user",[618,3254,3255],{"class":693}," as",[618,3257,698],{"class":697},[618,3259,3260],{"class":766}," premium",[618,3262,3263],{"class":697},"?:",[618,3265,3266],{"class":624}," boolean",[618,3268,705],{"class":697},[618,3270,3271],{"class":697}," |",[618,3273,3274],{"class":624}," undefined\n",[618,3276,3277,3280,3282,3284,3287,3290,3292,3294,3296,3299,3301],{"class":620,"line":745},[618,3278,3279],{"class":693},"    if",[618,3281,1028],{"class":766},[618,3283,3252],{"class":701},[618,3285,3286],{"class":697},"?.",[618,3288,3289],{"class":701},"premium",[618,3291,2764],{"class":766},[618,3293,2737],{"class":701},[618,3295,1092],{"class":697},[618,3297,3298],{"class":701},"shouldKeep",[618,3300,1051],{"class":697},[618,3302,3303],{"class":1202}," true\n",[618,3305,3306,3308],{"class":620,"line":763},[618,3307,1720],{"class":697},[618,3309,838],{"class":766},[618,3311,3312,3314],{"class":620,"line":776},[618,3313,835],{"class":697},[618,3315,838],{"class":701},[1913,3317,3318,3319,3322],{"color":1915,"icon":13},"Errors are always kept by default. You have to explicitly set ",[544,3320,3321],{},"error: 0"," to drop them.",[596,3324,3326],{"id":3325},"next-steps","Next Steps",[540,3328,3329,3330,3332],{},"Deepen your ",[1499,3331,245],{}," integration:",[557,3334,3335,3340,3345,3350],{},[560,3336,3337,3339],{},[585,3338,46],{"href":47},": Design comprehensive events with context layering",[560,3341,3342,3344],{},[585,3343,138],{"href":143},": Send logs to Axiom, Sentry, PostHog, and more",[560,3346,3347,3349],{},[585,3348,61],{"href":62},": Control log volume with head and tail sampling",[560,3351,3352,3354,3355,1541,3357,1545,3359,3361],{},[585,3353,51],{"href":52},": Throw errors with ",[544,3356,1540],{},[544,3358,1544],{},[544,3360,1548],{}," fields",[3363,3364,3365],"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":3367},[3368,3372,3373,3374,3377,3381,3385],{"id":598,"depth":720,"text":25,"children":3369},[3370,3371],{"id":602,"depth":738,"text":603},{"id":677,"depth":738,"text":678},{"id":954,"depth":720,"text":46},{"id":1530,"depth":720,"text":1531},{"id":1930,"depth":720,"text":504,"children":3375},[3376],{"id":1953,"depth":738,"text":1954},{"id":2367,"depth":720,"text":2368,"children":3378},[3379,3380],{"id":2374,"depth":738,"text":2375},{"id":2625,"depth":738,"text":2626},{"id":1949,"depth":720,"text":61,"children":3382},[3383,3384],{"id":2799,"depth":738,"text":2800},{"id":3164,"depth":738,"text":3165},{"id":3325,"depth":720,"text":3326},"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":3386},"jtJXpU402J9umUixsipVrZoumagPv0atISozXNhmMpU",[3394,3396],{"title":240,"path":241,"stem":242,"description":3395,"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":3397,"icon":253,"children":-1},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.",1786792894432]