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