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