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