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