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