[{"data":1,"prerenderedAt":2579},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-configuration":547,"-core-concepts-configuration-surround":2574},[4,35,159,201,289,446,531],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,325,346,373,400,428],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Observers","\u002Fbuild-on-top\u002Fobservers","5.build-on-top\u002Fobservers",[302,306,311,316,321],{"title":41,"path":303,"stem":304,"icon":305},"\u002Fbuild-on-top\u002Fobservers\u002Foverview","5.build-on-top\u002Fobservers\u002F1.overview","i-lucide-eye",{"title":307,"path":308,"stem":309,"icon":310},"Stream API","\u002Fbuild-on-top\u002Fobservers\u002Fin-process-stream","5.build-on-top\u002Fobservers\u002F2.in-process-stream","i-lucide-radio-tower",{"title":312,"path":313,"stem":314,"icon":315},"Stream server","\u002Fbuild-on-top\u002Fobservers\u002Fstream-server","5.build-on-top\u002Fobservers\u002F3.stream-server","i-lucide-radio",{"title":317,"path":318,"stem":319,"icon":320},"FS reader","\u002Fbuild-on-top\u002Fobservers\u002Ffs-reader","5.build-on-top\u002Fobservers\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":322,"stem":323,"icon":324},"\u002Fbuild-on-top\u002Fobservers\u002Fconsumer-recipes","5.build-on-top\u002Fobservers\u002F5.consumer-recipes","i-lucide-chef-hat",{"title":326,"path":327,"stem":328,"children":329,"page":34},"Pipeline","\u002Fbuild-on-top\u002Fpipeline","5.build-on-top\u002Fpipeline",[330,334,338,342],{"title":41,"path":331,"stem":332,"icon":333},"\u002Fbuild-on-top\u002Fpipeline\u002Foverview","5.build-on-top\u002Fpipeline\u002F1.overview","i-lucide-workflow",{"title":335,"path":336,"stem":337,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fpipeline\u002Fplugins","5.build-on-top\u002Fpipeline\u002F2.plugins",{"title":339,"path":340,"stem":341,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fpipeline\u002Fcustom-enrichers","5.build-on-top\u002Fpipeline\u002F3.custom-enrichers",{"title":343,"path":344,"stem":345,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Fpipeline\u002Ftail-sampling","5.build-on-top\u002Fpipeline\u002F4.tail-sampling",{"title":347,"path":348,"stem":349,"children":350,"page":34},"Scenarios","\u002Fbuild-on-top\u002Fscenarios","5.build-on-top\u002Fscenarios",[351,355,359,364,368],{"title":41,"path":352,"stem":353,"icon":354},"\u002Fbuild-on-top\u002Fscenarios\u002Foverview","5.build-on-top\u002Fscenarios\u002F0.overview","i-lucide-clipboard-list",{"title":356,"path":357,"stem":358,"icon":49},"Local debugging toolkit","\u002Fbuild-on-top\u002Fscenarios\u002Flocal-debugging-toolkit","5.build-on-top\u002Fscenarios\u002F1.local-debugging-toolkit",{"title":360,"path":361,"stem":362,"icon":363},"Tenant-aware logging","\u002Fbuild-on-top\u002Fscenarios\u002Ftenant-aware-logging","5.build-on-top\u002Fscenarios\u002F2.tenant-aware-logging","i-lucide-users",{"title":365,"path":366,"stem":367,"icon":129},"Compliance audit","\u002Fbuild-on-top\u002Fscenarios\u002Fcompliance-audit","5.build-on-top\u002Fscenarios\u002F3.compliance-audit",{"title":369,"path":370,"stem":371,"icon":372},"Cross-app error vocab","\u002Fbuild-on-top\u002Fscenarios\u002Fcross-app-error-vocab","5.build-on-top\u002Fscenarios\u002F4.cross-app-error-vocab","i-lucide-book",{"title":374,"path":375,"stem":376,"children":377,"page":34},"Shared packages","\u002Fbuild-on-top\u002Fshared","5.build-on-top\u002Fshared",[378,382,386,391,395],{"title":41,"path":379,"stem":380,"icon":381},"\u002Fbuild-on-top\u002Fshared\u002Foverview","5.build-on-top\u002Fshared\u002F1.overview","i-lucide-package",{"title":383,"path":384,"stem":385,"icon":381},"Catalogs as packages","\u002Fbuild-on-top\u002Fshared\u002Fcatalogs-as-packages","5.build-on-top\u002Fshared\u002F2.catalogs-as-packages",{"title":387,"path":388,"stem":389,"icon":390},"Drains as packages","\u002Fbuild-on-top\u002Fshared\u002Fdrains-as-packages","5.build-on-top\u002Fshared\u002F3.drains-as-packages","i-lucide-package-2",{"title":392,"path":393,"stem":394,"icon":28},"Enrichers as packages","\u002Fbuild-on-top\u002Fshared\u002Fenrichers-as-packages","5.build-on-top\u002Fshared\u002F4.enrichers-as-packages",{"title":396,"path":397,"stem":398,"icon":399},"Integration as package","\u002Fbuild-on-top\u002Fshared\u002Fintegration-as-package","5.build-on-top\u002Fshared\u002F5.integration-as-package","i-lucide-package-check",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Sinks","\u002Fbuild-on-top\u002Fsinks","5.build-on-top\u002Fsinks",[405,409,414,418,423],{"title":41,"path":406,"stem":407,"icon":408},"\u002Fbuild-on-top\u002Fsinks\u002Foverview","5.build-on-top\u002Fsinks\u002F1.overview","i-lucide-arrow-up-from-line",{"title":410,"path":411,"stem":412,"icon":413},"Custom drains","\u002Fbuild-on-top\u002Fsinks\u002Fcustom-drains","5.build-on-top\u002Fsinks\u002F2.custom-drains","i-lucide-code-2",{"title":415,"path":416,"stem":417,"icon":333},"Drain pipeline","\u002Fbuild-on-top\u002Fsinks\u002Fdrain-pipeline","5.build-on-top\u002Fsinks\u002F3.drain-pipeline",{"title":419,"path":420,"stem":421,"icon":422},"Identity headers","\u002Fbuild-on-top\u002Fsinks\u002Fidentity-headers","5.build-on-top\u002Fsinks\u002F4.identity-headers","i-lucide-fingerprint",{"title":424,"path":425,"stem":426,"icon":427},"Fanout","\u002Fbuild-on-top\u002Fsinks\u002Ffanout-and-multi-drain","5.build-on-top\u002Fsinks\u002F5.fanout-and-multi-drain","i-lucide-share-2",{"title":429,"path":430,"stem":431,"children":432,"page":34},"Sources","\u002Fbuild-on-top\u002Fsources","5.build-on-top\u002Fsources",[433,437,441],{"title":41,"path":434,"stem":435,"icon":436},"\u002Fbuild-on-top\u002Fsources\u002Foverview","5.build-on-top\u002Fsources\u002F1.overview","i-lucide-arrow-down-to-line",{"title":438,"path":439,"stem":440,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fsources\u002Fcustom-framework","5.build-on-top\u002Fsources\u002F2.custom-framework",{"title":442,"path":443,"stem":444,"icon":445},"Middleware toolkit","\u002Fbuild-on-top\u002Fsources\u002Fmiddleware-toolkit","5.build-on-top\u002Fsources\u002F3.middleware-toolkit","i-lucide-wrench",{"title":447,"path":448,"stem":449,"children":450,"page":34},"Adapters","\u002Fadapters","6.adapters",[451,454,494,509],{"title":41,"path":452,"stem":453,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":455,"path":456,"stem":457,"children":458,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[459,464,469,474,479,484,489],{"title":460,"path":461,"stem":462,"icon":463},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":465,"path":466,"stem":467,"icon":468},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":470,"path":471,"stem":472,"icon":473},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":475,"path":476,"stem":477,"icon":478},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":480,"path":481,"stem":482,"icon":483},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":485,"path":486,"stem":487,"icon":488},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":490,"path":491,"stem":492,"icon":493},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":495,"path":496,"stem":497,"children":498,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[499,504],{"title":500,"path":501,"stem":502,"icon":503},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":505,"path":506,"stem":507,"icon":508},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":510,"path":511,"stem":512,"children":513,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[514,517,522,526],{"title":326,"path":515,"stem":516,"icon":333},"\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":518,"path":519,"stem":520,"icon":521},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":523,"path":524,"stem":525,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":527,"path":528,"stem":529,"icon":530},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":532,"path":533,"stem":534,"children":535,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[536,539,543],{"title":41,"path":537,"stem":538,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":540,"path":541,"stem":542,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":544,"path":545,"stem":546,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":548,"title":170,"body":549,"description":2562,"extension":2563,"links":2564,"meta":2570,"navigation":2571,"path":171,"seo":2572,"stem":172,"__hash__":2573},"docs\u002F3.core-concepts\u002F1.configuration.md",{"type":550,"value":551,"toc":2546},"minimark",[552,565,575,582,857,1084,1091,1148,1164,1168,1178,1317,1321,1327,1427,1436,1440,1443,2099,2225,2247,2251,2260,2385,2389,2392,2395,2405,2500,2507,2510,2535,2542],[553,554,555,556,560,561,564],"p",{},"evlog has two configuration surfaces: ",[557,558,559],"strong",{},"global options"," set once at startup, and ",[557,562,563],{},"middleware options"," set per-framework integration. This page documents both.",[566,567,569,570,574],"h2",{"id":568},"global-options-initlogger","Global Options (",[571,572,573],"code",{},"initLogger",")",[553,576,577,578,581],{},"These options apply to all frameworks. Call ",[571,579,580],{},"initLogger()"," once at application startup for standalone frameworks (Hono, Express, Fastify, Elysia, NestJS, SvelteKit, Cloudflare Workers). For Nuxt and Nitro, these are set via module config and passed through automatically.",[583,584,590],"pre",{"className":585,"code":586,"filename":587,"language":588,"meta":589,"style":589},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  enabled: true,\n  env: { service: 'my-api', environment: 'production' },\n  pretty: false,\n  silent: false,\n  stringify: true,\n  minLevel: 'info',\n  sampling: { rates: { info: 10 }, keep: [{ status: 400 }] },\n  drain: createAxiomDrain(),\n})\n","src\u002Findex.ts","typescript","",[571,591,592,625,646,653,665,682,723,736,748,760,777,833,848],{"__ignoreMap":589},[593,594,597,601,605,609,612,615,618,622],"span",{"class":595,"line":596},"line",1,[593,598,600],{"class":599},"s7zQu","import",[593,602,604],{"class":603},"sMK4o"," {",[593,606,608],{"class":607},"sTEyZ"," initLogger",[593,610,611],{"class":603}," }",[593,613,614],{"class":599}," from",[593,616,617],{"class":603}," '",[593,619,621],{"class":620},"sfazB","evlog",[593,623,624],{"class":603},"'\n",[593,626,628,630,632,635,637,639,641,644],{"class":595,"line":627},2,[593,629,600],{"class":599},[593,631,604],{"class":603},[593,633,634],{"class":607}," createAxiomDrain",[593,636,611],{"class":603},[593,638,614],{"class":599},[593,640,617],{"class":603},[593,642,643],{"class":620},"evlog\u002Faxiom",[593,645,624],{"class":603},[593,647,649],{"class":595,"line":648},3,[593,650,652],{"emptyLinePlaceholder":651},true,"\n",[593,654,656,659,662],{"class":595,"line":655},4,[593,657,573],{"class":658},"s2Zo4",[593,660,661],{"class":607},"(",[593,663,664],{"class":603},"{\n",[593,666,668,672,675,679],{"class":595,"line":667},5,[593,669,671],{"class":670},"swJcz","  enabled",[593,673,674],{"class":603},":",[593,676,678],{"class":677},"sfNiH"," true",[593,680,681],{"class":603},",\n",[593,683,685,688,690,692,695,697,699,702,705,708,711,713,715,718,720],{"class":595,"line":684},6,[593,686,687],{"class":670},"  env",[593,689,674],{"class":603},[593,691,604],{"class":603},[593,693,694],{"class":670}," service",[593,696,674],{"class":603},[593,698,617],{"class":603},[593,700,701],{"class":620},"my-api",[593,703,704],{"class":603},"'",[593,706,707],{"class":603},",",[593,709,710],{"class":670}," environment",[593,712,674],{"class":603},[593,714,617],{"class":603},[593,716,717],{"class":620},"production",[593,719,704],{"class":603},[593,721,722],{"class":603}," },\n",[593,724,726,729,731,734],{"class":595,"line":725},7,[593,727,728],{"class":670},"  pretty",[593,730,674],{"class":603},[593,732,733],{"class":677}," false",[593,735,681],{"class":603},[593,737,739,742,744,746],{"class":595,"line":738},8,[593,740,741],{"class":670},"  silent",[593,743,674],{"class":603},[593,745,733],{"class":677},[593,747,681],{"class":603},[593,749,751,754,756,758],{"class":595,"line":750},9,[593,752,753],{"class":670},"  stringify",[593,755,674],{"class":603},[593,757,678],{"class":677},[593,759,681],{"class":603},[593,761,763,766,768,770,773,775],{"class":595,"line":762},10,[593,764,765],{"class":670},"  minLevel",[593,767,674],{"class":603},[593,769,617],{"class":603},[593,771,772],{"class":620},"info",[593,774,704],{"class":603},[593,776,681],{"class":603},[593,778,780,783,785,787,790,792,794,797,799,803,806,809,811,814,817,820,822,825,827,830],{"class":595,"line":779},11,[593,781,782],{"class":670},"  sampling",[593,784,674],{"class":603},[593,786,604],{"class":603},[593,788,789],{"class":670}," rates",[593,791,674],{"class":603},[593,793,604],{"class":603},[593,795,796],{"class":670}," info",[593,798,674],{"class":603},[593,800,802],{"class":801},"sbssI"," 10",[593,804,805],{"class":603}," },",[593,807,808],{"class":670}," keep",[593,810,674],{"class":603},[593,812,813],{"class":607}," [",[593,815,816],{"class":603},"{",[593,818,819],{"class":670}," status",[593,821,674],{"class":603},[593,823,824],{"class":801}," 400",[593,826,611],{"class":603},[593,828,829],{"class":607},"] ",[593,831,832],{"class":603},"},\n",[593,834,836,839,841,843,846],{"class":595,"line":835},12,[593,837,838],{"class":670},"  drain",[593,840,674],{"class":603},[593,842,634],{"class":658},[593,844,845],{"class":607},"()",[593,847,681],{"class":603},[593,849,851,854],{"class":595,"line":850},13,[593,852,853],{"class":603},"}",[593,855,856],{"class":607},")\n",[858,859,860,879],"table",{},[861,862,863],"thead",{},[864,865,866,870,873,876],"tr",{},[867,868,869],"th",{},"Option",[867,871,872],{},"Type",[867,874,875],{},"Default",[867,877,878],{},"Description",[880,881,882,907,925,947,965,989,1017,1040,1065],"tbody",{},[864,883,884,890,895,900],{},[885,886,887],"td",{},[571,888,889],{},"enabled",[885,891,892],{},[571,893,894],{},"boolean",[885,896,897],{},[571,898,899],{},"true",[885,901,902,903,906],{},"Enable\u002Fdisable all logging globally. When ",[571,904,905],{},"false",", all operations become no-ops",[864,908,909,914,919,922],{},[885,910,911],{},[571,912,913],{},"env",[885,915,916],{},[571,917,918],{},"Partial\u003CEnvironmentContext>",[885,920,921],{},"Auto-detected",[885,923,924],{},"Environment context overrides (see below)",[864,926,927,932,936,941],{},[885,928,929],{},[571,930,931],{},"pretty",[885,933,934],{},[571,935,894],{},[885,937,938,940],{},[571,939,899],{}," in dev",[885,942,943,944],{},"Pretty print with tree formatting. Auto-detected based on ",[571,945,946],{},"NODE_ENV",[864,948,949,954,958,962],{},[885,950,951],{},[571,952,953],{},"silent",[885,955,956],{},[571,957,894],{},[885,959,960],{},[571,961,905],{},[885,963,964],{},"Suppress console output. Events are still built, sampled, and passed to drains",[864,966,967,972,976,980],{},[885,968,969],{},[571,970,971],{},"stringify",[885,973,974],{},[571,975,894],{},[885,977,978],{},[571,979,899],{},[885,981,982,983,985,986,988],{},"Emit JSON strings when ",[571,984,931],{}," is disabled. Set to ",[571,987,905],{}," for Cloudflare Workers",[864,990,991,996,1001,1006],{},[885,992,993],{},[571,994,995],{},"minLevel",[885,997,998],{},[571,999,1000],{},"'debug' | 'info' | 'warn' | 'error'",[885,1002,1003],{},[571,1004,1005],{},"'debug'",[885,1007,1008,1009,1012,1013,1016],{},"Minimum severity for the global ",[571,1010,1011],{},"log"," API only (not ",[571,1014,1015],{},"createLogger"," \u002F request wide events). Order: debug \u003C info \u003C warn \u003C error",[864,1018,1019,1024,1029,1034],{},[885,1020,1021],{},[571,1022,1023],{},"sampling",[885,1025,1026],{},[571,1027,1028],{},"SamplingConfig",[885,1030,1031],{},[571,1032,1033],{},"undefined",[885,1035,1036,1037],{},"Head and tail sampling configuration. See ",[1038,1039,175],"a",{"href":176},[864,1041,1042,1047,1052,1057],{},[885,1043,1044],{},[571,1045,1046],{},"redact",[885,1048,1049],{},[571,1050,1051],{},"boolean | RedactConfig",[885,1053,1054,1056],{},[571,1055,899],{}," in production",[885,1058,1059,1060,1062,1063],{},"Enabled by default in production. ",[571,1061,905],{}," to disable. Object for fine-grained control. See ",[1038,1064,197],{"href":198},[864,1066,1067,1072,1077,1081],{},[885,1068,1069],{},[571,1070,1071],{},"drain",[885,1073,1074],{},[571,1075,1076],{},"(ctx: DrainContext) => void",[885,1078,1079],{},[571,1080,1033],{},[885,1082,1083],{},"Drain callback for sending events to external services",[1085,1086,1088,1090],"h3",{"id":1087},"minlevel-vs-sampling",[571,1089,995],{}," vs sampling",[1092,1093,1094,1132],"ul",{},[1095,1096,1097,1101,1102,1105,1106,1109,1110,1113,1114,1117,1118,1121,1122,1127,1128,1131],"li",{},[557,1098,1099],{},[571,1100,995],{}," is a ",[557,1103,1104],{},"hard threshold"," on the simple ",[571,1107,1108],{},"log.*"," API: levels below the threshold are never emitted. It does ",[557,1111,1112],{},"not"," apply to wide events from ",[571,1115,1116],{},"useLogger"," \u002F ",[571,1119,1120],{},"createLogger().emit()"," — use ",[557,1123,1124],{},[571,1125,1126],{},"sampling.rates"," (and tail ",[571,1129,1130],{},"keep",") for request volume.",[1095,1133,1134,1137,1138,1140,1141,1144,1145,1147],{},[557,1135,1136],{},"Head sampling"," (",[571,1139,1126],{},") is ",[557,1142,1143],{},"probabilistic"," on what is already allowed by ",[571,1146,995],{}," for simple logs.",[553,1149,1150,1151,1117,1154,1157,1158,1160,1161,1163],{},"Evaluation order for ",[571,1152,1153],{},"log.info",[571,1155,1156],{},"log.debug"," \u002F etc.: ",[571,1159,889],{}," → ",[571,1162,995],{}," → head sampling → output.",[1085,1165,1167],{"id":1166},"environment-context","Environment Context",[553,1169,1170,1171,1173,1174,1177],{},"The ",[571,1172,913],{}," option controls the fields included in every log event. Most values are auto-detected from environment variables and ",[571,1175,1176],{},"package.json",".",[858,1179,1180,1194],{},[861,1181,1182],{},[864,1183,1184,1187,1189,1191],{},[867,1185,1186],{},"Field",[867,1188,872],{},[867,1190,875],{},[867,1192,1193],{},"Auto-detected from",[880,1195,1196,1222,1242,1265,1291],{},[864,1197,1198,1203,1208,1213],{},[885,1199,1200],{},[571,1201,1202],{},"service",[885,1204,1205],{},[571,1206,1207],{},"string",[885,1209,1210],{},[571,1211,1212],{},"'app'",[885,1214,1215,1218,1219,1221],{},[571,1216,1217],{},"SERVICE_NAME",", ",[571,1220,1176],{}," name",[864,1223,1224,1229,1233,1238],{},[885,1225,1226],{},[571,1227,1228],{},"environment",[885,1230,1231],{},[571,1232,1207],{},[885,1234,1235],{},[571,1236,1237],{},"'development'",[885,1239,1240],{},[571,1241,946],{},[864,1243,1244,1249,1253,1257],{},[885,1245,1246],{},[571,1247,1248],{},"version",[885,1250,1251],{},[571,1252,1207],{},[885,1254,1255],{},[571,1256,1033],{},[885,1258,1259,1218,1262,1264],{},[571,1260,1261],{},"APP_VERSION",[571,1263,1176],{}," version",[864,1266,1267,1272,1276,1280],{},[885,1268,1269],{},[571,1270,1271],{},"commitHash",[885,1273,1274],{},[571,1275,1207],{},[885,1277,1278],{},[571,1279,1033],{},[885,1281,1282,1218,1285,1218,1288],{},[571,1283,1284],{},"COMMIT_SHA",[571,1286,1287],{},"GIT_COMMIT",[571,1289,1290],{},"VERCEL_GIT_COMMIT_SHA",[864,1292,1293,1298,1302,1306],{},[885,1294,1295],{},[571,1296,1297],{},"region",[885,1299,1300],{},[571,1301,1207],{},[885,1303,1304],{},[571,1305,1033],{},[885,1307,1308,1218,1311,1218,1314],{},[571,1309,1310],{},"FLY_REGION",[571,1312,1313],{},"AWS_REGION",[571,1315,1316],{},"VERCEL_REGION",[1085,1318,1320],{"id":1319},"silent-mode","Silent Mode",[553,1322,1323,1324,1326],{},"Use ",[571,1325,953],{}," when your deployment platform captures stdout as its primary log ingestion (GCP Cloud Run, AWS Lambda, Fly.io, Railway, etc.) and you want a drain adapter to control the output format.",[583,1328,1330],{"className":585,"code":1329,"filename":587,"language":588,"meta":589,"style":589},"import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  silent: process.env.NODE_ENV === 'production',\n  drain: createAxiomDrain(),\n})\n",[571,1331,1332,1350,1368,1372,1380,1409,1421],{"__ignoreMap":589},[593,1333,1334,1336,1338,1340,1342,1344,1346,1348],{"class":595,"line":596},[593,1335,600],{"class":599},[593,1337,604],{"class":603},[593,1339,608],{"class":607},[593,1341,611],{"class":603},[593,1343,614],{"class":599},[593,1345,617],{"class":603},[593,1347,621],{"class":620},[593,1349,624],{"class":603},[593,1351,1352,1354,1356,1358,1360,1362,1364,1366],{"class":595,"line":627},[593,1353,600],{"class":599},[593,1355,604],{"class":603},[593,1357,634],{"class":607},[593,1359,611],{"class":603},[593,1361,614],{"class":599},[593,1363,617],{"class":603},[593,1365,643],{"class":620},[593,1367,624],{"class":603},[593,1369,1370],{"class":595,"line":648},[593,1371,652],{"emptyLinePlaceholder":651},[593,1373,1374,1376,1378],{"class":595,"line":655},[593,1375,573],{"class":658},[593,1377,661],{"class":607},[593,1379,664],{"class":603},[593,1381,1382,1384,1386,1389,1391,1393,1395,1398,1401,1403,1405,1407],{"class":595,"line":667},[593,1383,741],{"class":670},[593,1385,674],{"class":603},[593,1387,1388],{"class":607}," process",[593,1390,1177],{"class":603},[593,1392,913],{"class":607},[593,1394,1177],{"class":603},[593,1396,1397],{"class":607},"NODE_ENV ",[593,1399,1400],{"class":603},"===",[593,1402,617],{"class":603},[593,1404,717],{"class":620},[593,1406,704],{"class":603},[593,1408,681],{"class":603},[593,1410,1411,1413,1415,1417,1419],{"class":595,"line":684},[593,1412,838],{"class":670},[593,1414,674],{"class":603},[593,1416,634],{"class":658},[593,1418,845],{"class":607},[593,1420,681],{"class":603},[593,1422,1423,1425],{"class":595,"line":725},[593,1424,853],{"class":603},[593,1426,856],{"class":607},[1428,1429,1432,1433,1435],"callout",{"color":1430,"icon":1431},"warning","i-lucide-alert-triangle","If ",[571,1434,953],{}," is enabled without a drain, events are built and sampled but never output anywhere. evlog will warn you about this at startup.",[566,1437,1439],{"id":1438},"middleware-options","Middleware Options",[553,1441,1442],{},"These options are passed to the framework middleware\u002Fplugin. They control per-request behavior: which routes to log, how to drain and enrich events, and custom tail sampling logic.",[1444,1445,1446,1746,1940,2037],"code-group",{},[583,1447,1449],{"className":585,"code":1448,"filename":216,"language":588,"meta":589,"style":589},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002Fapi\u002Fhealth'],\n  routes: { '\u002Fapi\u002Fauth\u002F**': { service: 'auth' } },\n  drain: createAxiomDrain(),\n  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },\n  keep: (ctx) => { if (ctx.duration > 2000) ctx.shouldKeep = true },\n})\n",[571,1450,1451,1457,1477,1495,1499,1539,1555,1576,1596,1631,1643,1689,1740],{"__ignoreMap":589},[593,1452,1453],{"class":595,"line":596},[593,1454,1456],{"class":1455},"sHwdD","\u002F\u002F lib\u002Fevlog.ts\n",[593,1458,1459,1461,1463,1466,1468,1470,1472,1475],{"class":595,"line":627},[593,1460,600],{"class":599},[593,1462,604],{"class":603},[593,1464,1465],{"class":607}," createEvlog",[593,1467,611],{"class":603},[593,1469,614],{"class":599},[593,1471,617],{"class":603},[593,1473,1474],{"class":620},"evlog\u002Fnext",[593,1476,624],{"class":603},[593,1478,1479,1481,1483,1485,1487,1489,1491,1493],{"class":595,"line":648},[593,1480,600],{"class":599},[593,1482,604],{"class":603},[593,1484,634],{"class":607},[593,1486,611],{"class":603},[593,1488,614],{"class":599},[593,1490,617],{"class":603},[593,1492,643],{"class":620},[593,1494,624],{"class":603},[593,1496,1497],{"class":595,"line":655},[593,1498,652],{"emptyLinePlaceholder":651},[593,1500,1501,1504,1508,1510,1513,1515,1518,1520,1523,1525,1528,1530,1533,1535,1537],{"class":595,"line":667},[593,1502,1503],{"class":599},"export",[593,1505,1507],{"class":1506},"spNyl"," const",[593,1509,604],{"class":603},[593,1511,1512],{"class":607}," withEvlog",[593,1514,707],{"class":603},[593,1516,1517],{"class":607}," useLogger",[593,1519,707],{"class":603},[593,1521,1522],{"class":607}," log",[593,1524,707],{"class":603},[593,1526,1527],{"class":607}," createError ",[593,1529,853],{"class":603},[593,1531,1532],{"class":603}," =",[593,1534,1465],{"class":658},[593,1536,661],{"class":607},[593,1538,664],{"class":603},[593,1540,1541,1544,1546,1548,1551,1553],{"class":595,"line":684},[593,1542,1543],{"class":670},"  service",[593,1545,674],{"class":603},[593,1547,617],{"class":603},[593,1549,1550],{"class":620},"my-app",[593,1552,704],{"class":603},[593,1554,681],{"class":603},[593,1556,1557,1560,1562,1564,1566,1569,1571,1574],{"class":595,"line":725},[593,1558,1559],{"class":670},"  include",[593,1561,674],{"class":603},[593,1563,813],{"class":607},[593,1565,704],{"class":603},[593,1567,1568],{"class":620},"\u002Fapi\u002F**",[593,1570,704],{"class":603},[593,1572,1573],{"class":607},"]",[593,1575,681],{"class":603},[593,1577,1578,1581,1583,1585,1587,1590,1592,1594],{"class":595,"line":738},[593,1579,1580],{"class":670},"  exclude",[593,1582,674],{"class":603},[593,1584,813],{"class":607},[593,1586,704],{"class":603},[593,1588,1589],{"class":620},"\u002Fapi\u002Fhealth",[593,1591,704],{"class":603},[593,1593,1573],{"class":607},[593,1595,681],{"class":603},[593,1597,1598,1601,1603,1605,1607,1610,1612,1614,1616,1618,1620,1622,1625,1627,1629],{"class":595,"line":750},[593,1599,1600],{"class":670},"  routes",[593,1602,674],{"class":603},[593,1604,604],{"class":603},[593,1606,617],{"class":603},[593,1608,1609],{"class":670},"\u002Fapi\u002Fauth\u002F**",[593,1611,704],{"class":603},[593,1613,674],{"class":603},[593,1615,604],{"class":603},[593,1617,694],{"class":670},[593,1619,674],{"class":603},[593,1621,617],{"class":603},[593,1623,1624],{"class":620},"auth",[593,1626,704],{"class":603},[593,1628,611],{"class":603},[593,1630,722],{"class":603},[593,1632,1633,1635,1637,1639,1641],{"class":595,"line":762},[593,1634,838],{"class":670},[593,1636,674],{"class":603},[593,1638,634],{"class":658},[593,1640,845],{"class":607},[593,1642,681],{"class":603},[593,1644,1645,1648,1650,1652,1656,1658,1661,1663,1666,1668,1671,1673,1675,1677,1679,1681,1683,1685,1687],{"class":595,"line":779},[593,1646,1647],{"class":658},"  enrich",[593,1649,674],{"class":603},[593,1651,1137],{"class":603},[593,1653,1655],{"class":1654},"sHdIc","ctx",[593,1657,574],{"class":603},[593,1659,1660],{"class":1506}," =>",[593,1662,604],{"class":603},[593,1664,1665],{"class":607}," ctx",[593,1667,1177],{"class":603},[593,1669,1670],{"class":607},"event",[593,1672,1177],{"class":603},[593,1674,1297],{"class":607},[593,1676,1532],{"class":603},[593,1678,1388],{"class":607},[593,1680,1177],{"class":603},[593,1682,913],{"class":607},[593,1684,1177],{"class":603},[593,1686,1310],{"class":607},[593,1688,722],{"class":603},[593,1690,1691,1694,1696,1698,1700,1702,1704,1706,1709,1711,1713,1715,1718,1721,1724,1727,1729,1731,1734,1736,1738],{"class":595,"line":835},[593,1692,1693],{"class":658},"  keep",[593,1695,674],{"class":603},[593,1697,1137],{"class":603},[593,1699,1655],{"class":1654},[593,1701,574],{"class":603},[593,1703,1660],{"class":1506},[593,1705,604],{"class":603},[593,1707,1708],{"class":599}," if",[593,1710,1137],{"class":670},[593,1712,1655],{"class":607},[593,1714,1177],{"class":603},[593,1716,1717],{"class":607},"duration",[593,1719,1720],{"class":603}," >",[593,1722,1723],{"class":801}," 2000",[593,1725,1726],{"class":670},") ",[593,1728,1655],{"class":607},[593,1730,1177],{"class":603},[593,1732,1733],{"class":607},"shouldKeep",[593,1735,1532],{"class":603},[593,1737,678],{"class":677},[593,1739,722],{"class":603},[593,1741,1742,1744],{"class":595,"line":850},[593,1743,853],{"class":603},[593,1745,856],{"class":607},[583,1747,1749],{"className":585,"code":1748,"filename":246,"language":588,"meta":589,"style":589},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002Fapi\u002Fhealth'],\n  routes: { '\u002Fapi\u002Fauth\u002F**': { service: 'auth' } },\n  drain: createAxiomDrain(),\n  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },\n  keep: (ctx) => { if (ctx.duration > 2000) ctx.shouldKeep = true },\n}))\n",[571,1750,1751,1769,1787,1805,1837,1849,1889,1933],{"__ignoreMap":589},[593,1752,1753,1756,1758,1761,1763,1765,1767],{"class":595,"line":596},[593,1754,1755],{"class":607},"app",[593,1757,1177],{"class":603},[593,1759,1760],{"class":658},"use",[593,1762,661],{"class":607},[593,1764,621],{"class":658},[593,1766,661],{"class":607},[593,1768,664],{"class":603},[593,1770,1771,1773,1775,1777,1779,1781,1783,1785],{"class":595,"line":627},[593,1772,1559],{"class":670},[593,1774,674],{"class":603},[593,1776,813],{"class":607},[593,1778,704],{"class":603},[593,1780,1568],{"class":620},[593,1782,704],{"class":603},[593,1784,1573],{"class":607},[593,1786,681],{"class":603},[593,1788,1789,1791,1793,1795,1797,1799,1801,1803],{"class":595,"line":648},[593,1790,1580],{"class":670},[593,1792,674],{"class":603},[593,1794,813],{"class":607},[593,1796,704],{"class":603},[593,1798,1589],{"class":620},[593,1800,704],{"class":603},[593,1802,1573],{"class":607},[593,1804,681],{"class":603},[593,1806,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835],{"class":595,"line":655},[593,1808,1600],{"class":670},[593,1810,674],{"class":603},[593,1812,604],{"class":603},[593,1814,617],{"class":603},[593,1816,1609],{"class":670},[593,1818,704],{"class":603},[593,1820,674],{"class":603},[593,1822,604],{"class":603},[593,1824,694],{"class":670},[593,1826,674],{"class":603},[593,1828,617],{"class":603},[593,1830,1624],{"class":620},[593,1832,704],{"class":603},[593,1834,611],{"class":603},[593,1836,722],{"class":603},[593,1838,1839,1841,1843,1845,1847],{"class":595,"line":667},[593,1840,838],{"class":670},[593,1842,674],{"class":603},[593,1844,634],{"class":658},[593,1846,845],{"class":607},[593,1848,681],{"class":603},[593,1850,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887],{"class":595,"line":684},[593,1852,1647],{"class":658},[593,1854,674],{"class":603},[593,1856,1137],{"class":603},[593,1858,1655],{"class":1654},[593,1860,574],{"class":603},[593,1862,1660],{"class":1506},[593,1864,604],{"class":603},[593,1866,1665],{"class":607},[593,1868,1177],{"class":603},[593,1870,1670],{"class":607},[593,1872,1177],{"class":603},[593,1874,1297],{"class":607},[593,1876,1532],{"class":603},[593,1878,1388],{"class":607},[593,1880,1177],{"class":603},[593,1882,913],{"class":607},[593,1884,1177],{"class":603},[593,1886,1310],{"class":607},[593,1888,722],{"class":603},[593,1890,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931],{"class":595,"line":725},[593,1892,1693],{"class":658},[593,1894,674],{"class":603},[593,1896,1137],{"class":603},[593,1898,1655],{"class":1654},[593,1900,574],{"class":603},[593,1902,1660],{"class":1506},[593,1904,604],{"class":603},[593,1906,1708],{"class":599},[593,1908,1137],{"class":670},[593,1910,1655],{"class":607},[593,1912,1177],{"class":603},[593,1914,1717],{"class":607},[593,1916,1720],{"class":603},[593,1918,1723],{"class":801},[593,1920,1726],{"class":670},[593,1922,1655],{"class":607},[593,1924,1177],{"class":603},[593,1926,1733],{"class":607},[593,1928,1532],{"class":603},[593,1930,678],{"class":677},[593,1932,722],{"class":603},[593,1934,1935,1937],{"class":595,"line":738},[593,1936,853],{"class":603},[593,1938,1939],{"class":607},"))\n",[583,1941,1943],{"className":585,"code":1942,"filename":241,"language":588,"meta":589,"style":589},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  drain: createAxiomDrain(),\n  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },\n}))\n",[571,1944,1945,1961,1979,1991,2031],{"__ignoreMap":589},[593,1946,1947,1949,1951,1953,1955,1957,1959],{"class":595,"line":596},[593,1948,1755],{"class":607},[593,1950,1177],{"class":603},[593,1952,1760],{"class":658},[593,1954,661],{"class":607},[593,1956,621],{"class":658},[593,1958,661],{"class":607},[593,1960,664],{"class":603},[593,1962,1963,1965,1967,1969,1971,1973,1975,1977],{"class":595,"line":627},[593,1964,1559],{"class":670},[593,1966,674],{"class":603},[593,1968,813],{"class":607},[593,1970,704],{"class":603},[593,1972,1568],{"class":620},[593,1974,704],{"class":603},[593,1976,1573],{"class":607},[593,1978,681],{"class":603},[593,1980,1981,1983,1985,1987,1989],{"class":595,"line":648},[593,1982,838],{"class":670},[593,1984,674],{"class":603},[593,1986,634],{"class":658},[593,1988,845],{"class":607},[593,1990,681],{"class":603},[593,1992,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029],{"class":595,"line":655},[593,1994,1647],{"class":658},[593,1996,674],{"class":603},[593,1998,1137],{"class":603},[593,2000,1655],{"class":1654},[593,2002,574],{"class":603},[593,2004,1660],{"class":1506},[593,2006,604],{"class":603},[593,2008,1665],{"class":607},[593,2010,1177],{"class":603},[593,2012,1670],{"class":607},[593,2014,1177],{"class":603},[593,2016,1297],{"class":607},[593,2018,1532],{"class":603},[593,2020,1388],{"class":607},[593,2022,1177],{"class":603},[593,2024,913],{"class":607},[593,2026,1177],{"class":603},[593,2028,1310],{"class":607},[593,2030,722],{"class":603},[593,2032,2033,2035],{"class":595,"line":667},[593,2034,853],{"class":603},[593,2036,1939],{"class":607},[583,2038,2040],{"className":585,"code":2039,"filename":251,"language":588,"meta":589,"style":589},"await app.register(evlog, {\n  include: ['\u002Fapi\u002F**'],\n  drain: createAxiomDrain(),\n})\n",[571,2041,2042,2063,2081,2093],{"__ignoreMap":589},[593,2043,2044,2047,2050,2052,2055,2058,2060],{"class":595,"line":596},[593,2045,2046],{"class":599},"await",[593,2048,2049],{"class":607}," app",[593,2051,1177],{"class":603},[593,2053,2054],{"class":658},"register",[593,2056,2057],{"class":607},"(evlog",[593,2059,707],{"class":603},[593,2061,2062],{"class":603}," {\n",[593,2064,2065,2067,2069,2071,2073,2075,2077,2079],{"class":595,"line":627},[593,2066,1559],{"class":670},[593,2068,674],{"class":603},[593,2070,813],{"class":607},[593,2072,704],{"class":603},[593,2074,1568],{"class":620},[593,2076,704],{"class":603},[593,2078,1573],{"class":607},[593,2080,681],{"class":603},[593,2082,2083,2085,2087,2089,2091],{"class":595,"line":648},[593,2084,838],{"class":670},[593,2086,674],{"class":603},[593,2088,634],{"class":658},[593,2090,845],{"class":607},[593,2092,681],{"class":603},[593,2094,2095,2097],{"class":595,"line":655},[593,2096,853],{"class":603},[593,2098,856],{"class":607},[858,2100,2101,2113],{},[861,2102,2103],{},[864,2104,2105,2107,2109,2111],{},[867,2106,869],{},[867,2108,872],{},[867,2110,875],{},[867,2112,878],{},[880,2114,2115,2134,2152,2171,2188,2207],{},[864,2116,2117,2122,2127,2131],{},[885,2118,2119],{},[571,2120,2121],{},"include",[885,2123,2124],{},[571,2125,2126],{},"string[]",[885,2128,2129],{},[571,2130,1033],{},[885,2132,2133],{},"Route glob patterns to log. If not set, all routes are logged",[864,2135,2136,2141,2145,2149],{},[885,2137,2138],{},[571,2139,2140],{},"exclude",[885,2142,2143],{},[571,2144,2126],{},[885,2146,2147],{},[571,2148,1033],{},[885,2150,2151],{},"Route patterns to exclude. Exclusions take precedence over inclusions",[864,2153,2154,2159,2164,2168],{},[885,2155,2156],{},[571,2157,2158],{},"routes",[885,2160,2161],{},[571,2162,2163],{},"Record\u003Cstring, { service: string }>",[885,2165,2166],{},[571,2167,1033],{},[885,2169,2170],{},"Route-specific service name overrides",[864,2172,2173,2177,2181,2185],{},[885,2174,2175],{},[571,2176,1071],{},[885,2178,2179],{},[571,2180,1076],{},[885,2182,2183],{},[571,2184,1033],{},[885,2186,2187],{},"Drain callback called with every emitted event",[864,2189,2190,2195,2200,2204],{},[885,2191,2192],{},[571,2193,2194],{},"enrich",[885,2196,2197],{},[571,2198,2199],{},"(ctx: EnrichContext) => void",[885,2201,2202],{},[571,2203,1033],{},[885,2205,2206],{},"Enrich callback called after emit, before drain",[864,2208,2209,2213,2218,2222],{},[885,2210,2211],{},[571,2212,1130],{},[885,2214,2215],{},[571,2216,2217],{},"(ctx: TailSamplingContext) => void",[885,2219,2220],{},[571,2221,1033],{},[885,2223,2224],{},"Custom tail sampling callback",[1428,2226,2227,2230,2231,1218,2234,1218,2237,2240,2241,2243,2244,2246],{"color":772,"icon":13},[557,2228,2229],{},"Nuxt and Nitro"," use module config and Nitro hooks (",[571,2232,2233],{},"evlog:drain",[571,2235,2236],{},"evlog:enrich",[571,2238,2239],{},"evlog:emit:keep",") instead of middleware options. See the ",[1038,2242,211],{"href":212}," and ",[1038,2245,226],{"href":227}," pages.",[1085,2248,2250],{"id":2249},"middleware-drain-vs-global-drain","Middleware drain vs global drain",[553,2252,2253,2254,2256,2257,2259],{},"When a middleware ",[571,2255,1071],{}," is set, it takes precedence over the global drain from ",[571,2258,580],{},". If no middleware drain is set, the global drain is used as fallback, with the benefit of receiving the full enriched event with request context (method, path, headers).",[583,2261,2263],{"className":585,"code":2262,"filename":587,"language":588,"meta":589,"style":589},"import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  env: { service: 'my-api' },\n  drain: createAxiomDrain(), \u002F\u002F fallback: used by singleton log API AND middleware (if no middleware drain)\n})\n\napp.use(evlog({\n  \u002F\u002F no drain here - falls back to globalDrain from initLogger, with full request context\n}))\n",[571,2264,2265,2283,2301,2305,2313,2333,2348,2354,2358,2374,2379],{"__ignoreMap":589},[593,2266,2267,2269,2271,2273,2275,2277,2279,2281],{"class":595,"line":596},[593,2268,600],{"class":599},[593,2270,604],{"class":603},[593,2272,608],{"class":607},[593,2274,611],{"class":603},[593,2276,614],{"class":599},[593,2278,617],{"class":603},[593,2280,621],{"class":620},[593,2282,624],{"class":603},[593,2284,2285,2287,2289,2291,2293,2295,2297,2299],{"class":595,"line":627},[593,2286,600],{"class":599},[593,2288,604],{"class":603},[593,2290,634],{"class":607},[593,2292,611],{"class":603},[593,2294,614],{"class":599},[593,2296,617],{"class":603},[593,2298,643],{"class":620},[593,2300,624],{"class":603},[593,2302,2303],{"class":595,"line":648},[593,2304,652],{"emptyLinePlaceholder":651},[593,2306,2307,2309,2311],{"class":595,"line":655},[593,2308,573],{"class":658},[593,2310,661],{"class":607},[593,2312,664],{"class":603},[593,2314,2315,2317,2319,2321,2323,2325,2327,2329,2331],{"class":595,"line":667},[593,2316,687],{"class":670},[593,2318,674],{"class":603},[593,2320,604],{"class":603},[593,2322,694],{"class":670},[593,2324,674],{"class":603},[593,2326,617],{"class":603},[593,2328,701],{"class":620},[593,2330,704],{"class":603},[593,2332,722],{"class":603},[593,2334,2335,2337,2339,2341,2343,2345],{"class":595,"line":684},[593,2336,838],{"class":670},[593,2338,674],{"class":603},[593,2340,634],{"class":658},[593,2342,845],{"class":607},[593,2344,707],{"class":603},[593,2346,2347],{"class":1455}," \u002F\u002F fallback: used by singleton log API AND middleware (if no middleware drain)\n",[593,2349,2350,2352],{"class":595,"line":725},[593,2351,853],{"class":603},[593,2353,856],{"class":607},[593,2355,2356],{"class":595,"line":738},[593,2357,652],{"emptyLinePlaceholder":651},[593,2359,2360,2362,2364,2366,2368,2370,2372],{"class":595,"line":750},[593,2361,1755],{"class":607},[593,2363,1177],{"class":603},[593,2365,1760],{"class":658},[593,2367,661],{"class":607},[593,2369,621],{"class":658},[593,2371,661],{"class":607},[593,2373,664],{"class":603},[593,2375,2376],{"class":595,"line":762},[593,2377,2378],{"class":1455},"  \u002F\u002F no drain here - falls back to globalDrain from initLogger, with full request context\n",[593,2380,2381,2383],{"class":595,"line":779},[593,2382,853],{"class":603},[593,2384,1939],{"class":607},[566,2386,2388],{"id":2387},"framework-specific-options","Framework-Specific Options",[553,2390,2391],{},"Some frameworks have additional options beyond the shared config:",[1085,2393,211],{"id":2394},"nuxt",[553,2396,2397,2398,2401,2402,2404],{},"The Nuxt module accepts all global options and middleware options in ",[571,2399,2400],{},"nuxt.config.ts"," under the ",[571,2403,621],{}," key, plus:",[858,2406,2407,2419],{},[861,2408,2409],{},[864,2410,2411,2413,2415,2417],{},[867,2412,869],{},[867,2414,872],{},[867,2416,875],{},[867,2418,878],{},[880,2420,2421,2439,2457,2476],{},[864,2422,2423,2428,2432,2436],{},[885,2424,2425],{},[571,2426,2427],{},"console",[885,2429,2430],{},[571,2431,894],{},[885,2433,2434],{},[571,2435,899],{},[885,2437,2438],{},"Enable\u002Fdisable browser console output (client-side only)",[864,2440,2441,2446,2450,2454],{},[885,2442,2443],{},[571,2444,2445],{},"transport.enabled",[885,2447,2448],{},[571,2449,894],{},[885,2451,2452],{},[571,2453,905],{},[885,2455,2456],{},"Send client logs to the server via API endpoint",[864,2458,2459,2464,2468,2473],{},[885,2460,2461],{},[571,2462,2463],{},"transport.endpoint",[885,2465,2466],{},[571,2467,1207],{},[885,2469,2470],{},[571,2471,2472],{},"'\u002Fapi\u002F_evlog\u002Fingest'",[885,2474,2475],{},"Custom transport endpoint",[864,2477,2478,2483,2488,2493],{},[885,2479,2480],{},[571,2481,2482],{},"transport.credentials",[885,2484,2485],{},[571,2486,2487],{},"RequestCredentials",[885,2489,2490],{},[571,2491,2492],{},"'same-origin'",[885,2494,2495,2496,2499],{},"Fetch credentials mode (",[571,2497,2498],{},"'include'"," for cross-origin endpoints)",[553,2501,2502,2503,1177],{},"See the full ",[1038,2504,2506],{"href":2505},"\u002Fframeworks\u002Fnuxt#configuration","Nuxt configuration",[1085,2508,226],{"id":2509},"nitro",[553,2511,2512,2513,1218,2515,1218,2517,1218,2519,1218,2521,1218,2523,1218,2525,2527,2528,2530,2531,2534],{},"The Nitro module accepts ",[571,2514,889],{},[571,2516,913],{},[571,2518,931],{},[571,2520,953],{},[571,2522,1023],{},[571,2524,2121],{},[571,2526,2140],{},", and ",[571,2529,2158],{}," in ",[571,2532,2533],{},"nitro.config.ts",". Drain and enrichment are done via Nitro hooks.",[553,2536,2537,2538,1177],{},"See ",[1038,2539,2541],{"href":2540},"\u002Fframeworks\u002Fnitro#drain--enrichers","Nitro drain & enrichers",[2543,2544,2545],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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}",{"title":589,"searchDepth":627,"depth":627,"links":2547},[2548,2555,2558],{"id":568,"depth":627,"text":2549,"children":2550},"Global Options (initLogger)",[2551,2553,2554],{"id":1087,"depth":648,"text":2552},"minLevel vs sampling",{"id":1166,"depth":648,"text":1167},{"id":1319,"depth":648,"text":1320},{"id":1438,"depth":627,"text":1439,"children":2556},[2557],{"id":2249,"depth":648,"text":2250},{"id":2387,"depth":627,"text":2388,"children":2559},[2560,2561],{"id":2394,"depth":648,"text":211},{"id":2509,"depth":648,"text":226},"Complete reference for all evlog configuration options including global logger settings, middleware options, environment context, and framework-specific overrides.","md",[2565,2568],{"label":175,"icon":178,"to":176,"color":2566,"variant":2567},"neutral","subtle",{"label":2569,"icon":93,"to":452,"color":2566,"variant":2567},"Drain Adapters",{},{"icon":173},{"title":170,"description":2562},"zQJYXD22Tmkw_b4qCh8Ma2ztDhtu7OXPvcD-6PqFTws",[2575,2577],{"title":165,"path":166,"stem":167,"description":2576,"icon":168,"children":-1},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.",{"title":175,"path":176,"stem":177,"description":2578,"icon":178,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",1778338247957]