[{"data":1,"prerenderedAt":2360},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-overview":464,"-integrate-adapters-overview-surround":2355},[4,30,80,245,379,434],{"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,369,374],{"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":284,"icon":315,"path":349,"stem":350,"children":351,"page":29},"\u002Fuse-cases\u002Ftelemetry","4.use-cases\u002F4.telemetry",[352,355,360,365],{"title":36,"path":353,"stem":354,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","4.use-cases\u002F4.telemetry\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","4.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":361,"path":362,"stem":363,"icon":364},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","4.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":366,"path":367,"stem":368,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","4.use-cases\u002F4.telemetry\u002F04.reference",{"title":370,"path":371,"stem":372,"icon":373},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":375,"path":376,"stem":377,"icon":378},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":380,"path":381,"stem":382,"children":383,"page":29},"Extend","\u002Fextend","5.extend",[384,388,393,398,403,407,411,415,419,424,429],{"title":36,"path":385,"stem":386,"icon":387},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":389,"path":390,"stem":391,"icon":392},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":394,"path":395,"stem":396,"icon":397},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":399,"path":400,"stem":401,"icon":402},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":404,"stem":405,"icon":406},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":408,"path":409,"stem":410,"icon":387},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":412,"path":413,"stem":414,"icon":373},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":416,"path":417,"stem":418,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":420,"path":421,"stem":422,"icon":423},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":425,"path":426,"stem":427,"icon":428},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":430,"path":431,"stem":432,"icon":433},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":366,"path":435,"stem":436,"children":437,"page":29},"\u002Freference","6.reference",[438,443,446,451,455,460],{"title":439,"path":440,"stem":441,"icon":442},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":444,"stem":445,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":447,"path":448,"stem":449,"icon":450},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":452,"path":453,"stem":454,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":456,"path":457,"stem":458,"icon":459},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":461,"path":462,"stem":463,"icon":373},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":465,"title":466,"body":467,"description":2337,"extension":2338,"links":2339,"meta":2351,"navigation":2352,"path":95,"seo":2353,"stem":96,"__hash__":2354},"docs\u002F3.integrate\u002Fadapters\u002F01.overview.md","Adapters Overview",{"type":468,"value":469,"toc":2328},"minimark",[470,474,477,482,495,498,1096,1109,1113,1160,1164,1174,1519,1532,1536,1539,1682,1688,1988,1992,1998,2075,2092,2096,2099,2102,2265,2272,2276,2279,2321,2324],[471,472,473],"p",{},"Adapters let you send logs to external observability platforms. evlog provides built-in adapters for popular services, and you can create custom adapters for any destination.",[475,476],"drain-fan-out",{},[478,479,481],"h2",{"id":480},"how-adapters-work","How Adapters Work",[471,483,484,485,489,490,494],{},"Adapters receive a ",[486,487,488],"code",{},"DrainContext"," after each request completes and send the data to an external service. The drain runs in ",[491,492,493],"strong",{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[471,496,497],{},"How you wire an adapter depends on your framework:",[499,500,501,635,766,828,882,941,995,1048],"code-group",{},[502,503,509],"pre",{"className":504,"code":505,"filename":506,"language":507,"meta":508,"style":508},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","Nuxt \u002F Nitro","typescript","",[486,510,511,520,551,558,590,626],{"__ignoreMap":508},[512,513,516],"span",{"class":514,"line":515},"line",1,[512,517,519],{"class":518},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[512,521,523,527,531,535,538,541,544,548],{"class":514,"line":522},2,[512,524,526],{"class":525},"s7zQu","import",[512,528,530],{"class":529},"sMK4o"," {",[512,532,534],{"class":533},"sTEyZ"," createAxiomDrain",[512,536,537],{"class":529}," }",[512,539,540],{"class":525}," from",[512,542,543],{"class":529}," '",[512,545,547],{"class":546},"sfazB","evlog\u002Faxiom",[512,549,550],{"class":529},"'\n",[512,552,554],{"class":514,"line":553},3,[512,555,557],{"emptyLinePlaceholder":556},true,"\n",[512,559,561,564,567,571,574,576,580,583,587],{"class":514,"line":560},4,[512,562,563],{"class":525},"export",[512,565,566],{"class":525}," default",[512,568,570],{"class":569},"s2Zo4"," defineNitroPlugin",[512,572,573],{"class":533},"(",[512,575,573],{"class":529},[512,577,579],{"class":578},"sHdIc","nitroApp",[512,581,582],{"class":529},")",[512,584,586],{"class":585},"spNyl"," =>",[512,588,589],{"class":529}," {\n",[512,591,593,596,599,602,604,607,610,613,616,618,621,623],{"class":514,"line":592},5,[512,594,595],{"class":533},"  nitroApp",[512,597,598],{"class":529},".",[512,600,601],{"class":533},"hooks",[512,603,598],{"class":529},[512,605,606],{"class":569},"hook",[512,608,573],{"class":609},"swJcz",[512,611,612],{"class":529},"'",[512,614,615],{"class":546},"evlog:drain",[512,617,612],{"class":529},[512,619,620],{"class":529},",",[512,622,534],{"class":569},[512,624,625],{"class":609},"())\n",[512,627,629,632],{"class":514,"line":628},6,[512,630,631],{"class":529},"}",[512,633,634],{"class":533},")\n",[502,636,638],{"className":504,"code":637,"filename":172,"language":507,"meta":508,"style":508},"\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  drain: createAxiomDrain(),\n})\n",[486,639,640,645,665,683,687,726,744,759],{"__ignoreMap":508},[512,641,642],{"class":514,"line":515},[512,643,644],{"class":518},"\u002F\u002F lib\u002Fevlog.ts\n",[512,646,647,649,651,654,656,658,660,663],{"class":514,"line":522},[512,648,526],{"class":525},[512,650,530],{"class":529},[512,652,653],{"class":533}," createEvlog",[512,655,537],{"class":529},[512,657,540],{"class":525},[512,659,543],{"class":529},[512,661,662],{"class":546},"evlog\u002Fnext",[512,664,550],{"class":529},[512,666,667,669,671,673,675,677,679,681],{"class":514,"line":553},[512,668,526],{"class":525},[512,670,530],{"class":529},[512,672,534],{"class":533},[512,674,537],{"class":529},[512,676,540],{"class":525},[512,678,543],{"class":529},[512,680,547],{"class":546},[512,682,550],{"class":529},[512,684,685],{"class":514,"line":560},[512,686,557],{"emptyLinePlaceholder":556},[512,688,689,691,694,696,699,701,704,706,709,711,714,716,719,721,723],{"class":514,"line":592},[512,690,563],{"class":525},[512,692,693],{"class":585}," const",[512,695,530],{"class":529},[512,697,698],{"class":533}," withEvlog",[512,700,620],{"class":529},[512,702,703],{"class":533}," useLogger",[512,705,620],{"class":529},[512,707,708],{"class":533}," log",[512,710,620],{"class":529},[512,712,713],{"class":533}," createError ",[512,715,631],{"class":529},[512,717,718],{"class":529}," =",[512,720,653],{"class":569},[512,722,573],{"class":533},[512,724,725],{"class":529},"{\n",[512,727,728,731,734,736,739,741],{"class":514,"line":628},[512,729,730],{"class":609},"  service",[512,732,733],{"class":529},":",[512,735,543],{"class":529},[512,737,738],{"class":546},"my-app",[512,740,612],{"class":529},[512,742,743],{"class":529},",\n",[512,745,747,750,752,754,757],{"class":514,"line":746},7,[512,748,749],{"class":609},"  drain",[512,751,733],{"class":529},[512,753,534],{"class":569},[512,755,756],{"class":533},"()",[512,758,743],{"class":529},[512,760,762,764],{"class":514,"line":761},8,[512,763,631],{"class":529},[512,765,634],{"class":533},[502,767,769],{"className":504,"code":768,"filename":202,"language":507,"meta":508,"style":508},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\napp.use(evlog({ drain: createAxiomDrain() }))\n",[486,770,771,789,793],{"__ignoreMap":508},[512,772,773,775,777,779,781,783,785,787],{"class":514,"line":515},[512,774,526],{"class":525},[512,776,530],{"class":529},[512,778,534],{"class":533},[512,780,537],{"class":529},[512,782,540],{"class":525},[512,784,543],{"class":529},[512,786,547],{"class":546},[512,788,550],{"class":529},[512,790,791],{"class":514,"line":522},[512,792,557],{"emptyLinePlaceholder":556},[512,794,795,798,800,803,805,808,810,813,816,818,820,823,825],{"class":514,"line":553},[512,796,797],{"class":533},"app",[512,799,598],{"class":529},[512,801,802],{"class":569},"use",[512,804,573],{"class":533},[512,806,807],{"class":569},"evlog",[512,809,573],{"class":533},[512,811,812],{"class":529},"{",[512,814,815],{"class":609}," drain",[512,817,733],{"class":529},[512,819,534],{"class":569},[512,821,822],{"class":533},"() ",[512,824,631],{"class":529},[512,826,827],{"class":533},"))\n",[502,829,830],{"className":504,"code":768,"filename":197,"language":507,"meta":508,"style":508},[486,831,832,850,854],{"__ignoreMap":508},[512,833,834,836,838,840,842,844,846,848],{"class":514,"line":515},[512,835,526],{"class":525},[512,837,530],{"class":529},[512,839,534],{"class":533},[512,841,537],{"class":529},[512,843,540],{"class":525},[512,845,543],{"class":529},[512,847,547],{"class":546},[512,849,550],{"class":529},[512,851,852],{"class":514,"line":522},[512,853,557],{"emptyLinePlaceholder":556},[512,855,856,858,860,862,864,866,868,870,872,874,876,878,880],{"class":514,"line":553},[512,857,797],{"class":533},[512,859,598],{"class":529},[512,861,802],{"class":569},[512,863,573],{"class":533},[512,865,807],{"class":569},[512,867,573],{"class":533},[512,869,812],{"class":529},[512,871,815],{"class":609},[512,873,733],{"class":529},[512,875,534],{"class":569},[512,877,822],{"class":533},[512,879,631],{"class":529},[512,881,827],{"class":533},[502,883,885],{"className":504,"code":884,"filename":207,"language":507,"meta":508,"style":508},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nawait app.register(evlog, { drain: createAxiomDrain() })\n",[486,886,887,905,909],{"__ignoreMap":508},[512,888,889,891,893,895,897,899,901,903],{"class":514,"line":515},[512,890,526],{"class":525},[512,892,530],{"class":529},[512,894,534],{"class":533},[512,896,537],{"class":529},[512,898,540],{"class":525},[512,900,543],{"class":529},[512,902,547],{"class":546},[512,904,550],{"class":529},[512,906,907],{"class":514,"line":522},[512,908,557],{"emptyLinePlaceholder":556},[512,910,911,914,917,919,922,925,927,929,931,933,935,937,939],{"class":514,"line":553},[512,912,913],{"class":525},"await",[512,915,916],{"class":533}," app",[512,918,598],{"class":529},[512,920,921],{"class":569},"register",[512,923,924],{"class":533},"(evlog",[512,926,620],{"class":529},[512,928,530],{"class":529},[512,930,815],{"class":609},[512,932,733],{"class":529},[512,934,534],{"class":569},[512,936,822],{"class":533},[512,938,631],{"class":529},[512,940,634],{"class":533},[502,942,943],{"className":504,"code":768,"filename":212,"language":507,"meta":508,"style":508},[486,944,945,963,967],{"__ignoreMap":508},[512,946,947,949,951,953,955,957,959,961],{"class":514,"line":515},[512,948,526],{"class":525},[512,950,530],{"class":529},[512,952,534],{"class":533},[512,954,537],{"class":529},[512,956,540],{"class":525},[512,958,543],{"class":529},[512,960,547],{"class":546},[512,962,550],{"class":529},[512,964,965],{"class":514,"line":522},[512,966,557],{"emptyLinePlaceholder":556},[512,968,969,971,973,975,977,979,981,983,985,987,989,991,993],{"class":514,"line":553},[512,970,797],{"class":533},[512,972,598],{"class":529},[512,974,802],{"class":569},[512,976,573],{"class":533},[512,978,807],{"class":569},[512,980,573],{"class":533},[512,982,812],{"class":529},[512,984,815],{"class":609},[512,986,733],{"class":529},[512,988,534],{"class":569},[512,990,822],{"class":533},[512,992,631],{"class":529},[512,994,827],{"class":533},[502,996,998],{"className":504,"code":997,"filename":192,"language":507,"meta":508,"style":508},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nEvlogModule.forRoot({ drain: createAxiomDrain() })\n",[486,999,1000,1018,1022],{"__ignoreMap":508},[512,1001,1002,1004,1006,1008,1010,1012,1014,1016],{"class":514,"line":515},[512,1003,526],{"class":525},[512,1005,530],{"class":529},[512,1007,534],{"class":533},[512,1009,537],{"class":529},[512,1011,540],{"class":525},[512,1013,543],{"class":529},[512,1015,547],{"class":546},[512,1017,550],{"class":529},[512,1019,1020],{"class":514,"line":522},[512,1021,557],{"emptyLinePlaceholder":556},[512,1023,1024,1027,1029,1032,1034,1036,1038,1040,1042,1044,1046],{"class":514,"line":553},[512,1025,1026],{"class":533},"EvlogModule",[512,1028,598],{"class":529},[512,1030,1031],{"class":569},"forRoot",[512,1033,573],{"class":533},[512,1035,812],{"class":529},[512,1037,815],{"class":609},[512,1039,733],{"class":529},[512,1041,534],{"class":569},[512,1043,822],{"class":533},[512,1045,631],{"class":529},[512,1047,634],{"class":533},[502,1049,1051],{"className":504,"code":1050,"filename":227,"language":507,"meta":508,"style":508},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({ drain: createAxiomDrain() })\n",[486,1052,1053,1071,1075],{"__ignoreMap":508},[512,1054,1055,1057,1059,1061,1063,1065,1067,1069],{"class":514,"line":515},[512,1056,526],{"class":525},[512,1058,530],{"class":529},[512,1060,534],{"class":533},[512,1062,537],{"class":529},[512,1064,540],{"class":525},[512,1066,543],{"class":529},[512,1068,547],{"class":546},[512,1070,550],{"class":529},[512,1072,1073],{"class":514,"line":522},[512,1074,557],{"emptyLinePlaceholder":556},[512,1076,1077,1080,1082,1084,1086,1088,1090,1092,1094],{"class":514,"line":553},[512,1078,1079],{"class":569},"initLogger",[512,1081,573],{"class":533},[512,1083,812],{"class":529},[512,1085,815],{"class":609},[512,1087,733],{"class":529},[512,1089,534],{"class":569},[512,1091,822],{"class":533},[512,1093,631],{"class":529},[512,1095,634],{"class":533},[1097,1098,1101,1104,1105,1108],"callout",{"color":1099,"icon":1100},"info","i-lucide-cloud",[491,1102,1103],{},"Serverless Support:"," On Cloudflare Workers and Vercel Edge, evlog automatically uses ",[486,1106,1107],{},"waitUntil()"," to ensure drains complete before the runtime terminates. No additional configuration needed.",[478,1110,1112],{"id":1111},"available-adapters","Available Adapters",[1114,1115,1116,1120,1123,1126,1129,1132,1135,1138,1141,1144,1147,1151,1156],"card-group",{},[1117,1118,1119],"card",{"icon":106,"title":103,"to":104},"Send logs to Axiom for powerful querying and dashboards.",[1117,1121,1122],{"icon":111,"title":108,"to":109},"OpenTelemetry Protocol for Grafana, Datadog, Honeycomb, and more.",[1117,1124,1125],{"icon":136,"title":133,"to":134},"Send logs to HyperDX via OTLP\u002FHTTP using their documented ingest endpoint and API key.",[1117,1127,1128],{"icon":116,"title":113,"to":114},"Send logs to PostHog Logs for structured logging and observability.",[1117,1130,1131],{"icon":121,"title":118,"to":119},"Send structured logs to Sentry Logs for high-cardinality querying.",[1117,1133,1134],{"icon":126,"title":123,"to":124},"Send logs to Better Stack for log management and alerting.",[1117,1136,1137],{"icon":131,"title":128,"to":129},"Send logs to Datadog Logs via the native HTTP intake API.",[1117,1139,1140],{"icon":146,"title":143,"to":144},"Write logs to local NDJSON files for debugging and AI agent integration.",[1117,1142,1143],{"icon":151,"title":148,"to":149},"Self-hosted log storage in your NuxtHub database with automatic retention.",[1117,1145,1146],{"icon":156,"title":153,"to":154},"In-memory ring buffer that works in any runtime, including Cloudflare Workers.",[1117,1148,1150],{"icon":272,"title":1149,"to":426},"Custom","Build your own adapter for any destination.",[1117,1152,1155],{"icon":1153,"title":1154,"to":431},"i-lucide-globe","HTTP","Send client logs to your server over HTTP without framework coupling.",[1117,1157,1159],{"icon":433,"title":1158,"to":431},"Pipeline","Batch events, retry on failure, and handle buffer overflow.",[478,1161,1163],{"id":1162},"standalone-usage","Standalone Usage",[471,1165,1166,1167,1170,1171,1173],{},"In plain TypeScript or Bun scripts (no HTTP framework), use the ",[486,1168,1169],{},"drain"," option in ",[486,1172,1079],{},". Every emitted event is drained automatically.",[502,1175,1178],{"className":504,"code":1176,"filename":1177,"language":507,"meta":508,"style":508},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script' },\n  drain,\n})\n\nlog.info({ action: 'job_started' }) \u002F\u002F drained automatically\n\nconst reqLog = createRequestLogger({ method: 'POST', path: '\u002Fprocess' })\nreqLog.set({ processed: 42 })\nreqLog.emit() \u002F\u002F drained automatically\n\nawait drain.flush()\n","index.ts",[486,1179,1180,1202,1230,1248,1268,1272,1297,1316,1320,1329,1354,1361,1368,1373,1407,1412,1458,1486,1500,1505],{"__ignoreMap":508},[512,1181,1182,1184,1187,1189,1192,1194,1196,1198,1200],{"class":514,"line":515},[512,1183,526],{"class":525},[512,1185,1186],{"class":525}," type",[512,1188,530],{"class":529},[512,1190,1191],{"class":533}," DrainContext",[512,1193,537],{"class":529},[512,1195,540],{"class":525},[512,1197,543],{"class":529},[512,1199,807],{"class":546},[512,1201,550],{"class":529},[512,1203,1204,1206,1208,1211,1213,1215,1217,1220,1222,1224,1226,1228],{"class":514,"line":522},[512,1205,526],{"class":525},[512,1207,530],{"class":529},[512,1209,1210],{"class":533}," initLogger",[512,1212,620],{"class":529},[512,1214,708],{"class":533},[512,1216,620],{"class":529},[512,1218,1219],{"class":533}," createRequestLogger",[512,1221,537],{"class":529},[512,1223,540],{"class":525},[512,1225,543],{"class":529},[512,1227,807],{"class":546},[512,1229,550],{"class":529},[512,1231,1232,1234,1236,1238,1240,1242,1244,1246],{"class":514,"line":553},[512,1233,526],{"class":525},[512,1235,530],{"class":529},[512,1237,534],{"class":533},[512,1239,537],{"class":529},[512,1241,540],{"class":525},[512,1243,543],{"class":529},[512,1245,547],{"class":546},[512,1247,550],{"class":529},[512,1249,1250,1252,1254,1257,1259,1261,1263,1266],{"class":514,"line":560},[512,1251,526],{"class":525},[512,1253,530],{"class":529},[512,1255,1256],{"class":533}," createDrainPipeline",[512,1258,537],{"class":529},[512,1260,540],{"class":525},[512,1262,543],{"class":529},[512,1264,1265],{"class":546},"evlog\u002Fpipeline",[512,1267,550],{"class":529},[512,1269,1270],{"class":514,"line":592},[512,1271,557],{"emptyLinePlaceholder":556},[512,1273,1274,1277,1280,1283,1285,1288,1291,1294],{"class":514,"line":628},[512,1275,1276],{"class":585},"const",[512,1278,1279],{"class":533}," pipeline ",[512,1281,1282],{"class":529},"=",[512,1284,1256],{"class":569},[512,1286,1287],{"class":529},"\u003C",[512,1289,488],{"class":1290},"sBMFI",[512,1292,1293],{"class":529},">",[512,1295,1296],{"class":533},"()\n",[512,1298,1299,1301,1304,1306,1309,1311,1314],{"class":514,"line":746},[512,1300,1276],{"class":585},[512,1302,1303],{"class":533}," drain ",[512,1305,1282],{"class":529},[512,1307,1308],{"class":569}," pipeline",[512,1310,573],{"class":533},[512,1312,1313],{"class":569},"createAxiomDrain",[512,1315,625],{"class":533},[512,1317,1318],{"class":514,"line":761},[512,1319,557],{"emptyLinePlaceholder":556},[512,1321,1323,1325,1327],{"class":514,"line":1322},9,[512,1324,1079],{"class":569},[512,1326,573],{"class":533},[512,1328,725],{"class":529},[512,1330,1332,1335,1337,1339,1342,1344,1346,1349,1351],{"class":514,"line":1331},10,[512,1333,1334],{"class":609},"  env",[512,1336,733],{"class":529},[512,1338,530],{"class":529},[512,1340,1341],{"class":609}," service",[512,1343,733],{"class":529},[512,1345,543],{"class":529},[512,1347,1348],{"class":546},"my-script",[512,1350,612],{"class":529},[512,1352,1353],{"class":529}," },\n",[512,1355,1357,1359],{"class":514,"line":1356},11,[512,1358,749],{"class":533},[512,1360,743],{"class":529},[512,1362,1364,1366],{"class":514,"line":1363},12,[512,1365,631],{"class":529},[512,1367,634],{"class":533},[512,1369,1371],{"class":514,"line":1370},13,[512,1372,557],{"emptyLinePlaceholder":556},[512,1374,1376,1379,1381,1383,1385,1387,1390,1392,1394,1397,1399,1401,1404],{"class":514,"line":1375},14,[512,1377,1378],{"class":533},"log",[512,1380,598],{"class":529},[512,1382,1099],{"class":569},[512,1384,573],{"class":533},[512,1386,812],{"class":529},[512,1388,1389],{"class":609}," action",[512,1391,733],{"class":529},[512,1393,543],{"class":529},[512,1395,1396],{"class":546},"job_started",[512,1398,612],{"class":529},[512,1400,537],{"class":529},[512,1402,1403],{"class":533},") ",[512,1405,1406],{"class":518},"\u002F\u002F drained automatically\n",[512,1408,1410],{"class":514,"line":1409},15,[512,1411,557],{"emptyLinePlaceholder":556},[512,1413,1415,1417,1420,1422,1424,1426,1428,1431,1433,1435,1438,1440,1442,1445,1447,1449,1452,1454,1456],{"class":514,"line":1414},16,[512,1416,1276],{"class":585},[512,1418,1419],{"class":533}," reqLog ",[512,1421,1282],{"class":529},[512,1423,1219],{"class":569},[512,1425,573],{"class":533},[512,1427,812],{"class":529},[512,1429,1430],{"class":609}," method",[512,1432,733],{"class":529},[512,1434,543],{"class":529},[512,1436,1437],{"class":546},"POST",[512,1439,612],{"class":529},[512,1441,620],{"class":529},[512,1443,1444],{"class":609}," path",[512,1446,733],{"class":529},[512,1448,543],{"class":529},[512,1450,1451],{"class":546},"\u002Fprocess",[512,1453,612],{"class":529},[512,1455,537],{"class":529},[512,1457,634],{"class":533},[512,1459,1461,1464,1466,1469,1471,1473,1476,1478,1482,1484],{"class":514,"line":1460},17,[512,1462,1463],{"class":533},"reqLog",[512,1465,598],{"class":529},[512,1467,1468],{"class":569},"set",[512,1470,573],{"class":533},[512,1472,812],{"class":529},[512,1474,1475],{"class":609}," processed",[512,1477,733],{"class":529},[512,1479,1481],{"class":1480},"sbssI"," 42",[512,1483,537],{"class":529},[512,1485,634],{"class":533},[512,1487,1489,1491,1493,1496,1498],{"class":514,"line":1488},18,[512,1490,1463],{"class":533},[512,1492,598],{"class":529},[512,1494,1495],{"class":569},"emit",[512,1497,822],{"class":533},[512,1499,1406],{"class":518},[512,1501,1503],{"class":514,"line":1502},19,[512,1504,557],{"emptyLinePlaceholder":556},[512,1506,1508,1510,1512,1514,1517],{"class":514,"line":1507},20,[512,1509,913],{"class":525},[512,1511,815],{"class":533},[512,1513,598],{"class":529},[512,1515,1516],{"class":569},"flush",[512,1518,1296],{"class":533},[1097,1520,1523,1524,1531],{"color":1521,"icon":1522},"neutral","i-lucide-arrow-right","See the full ",[1525,1526,1530],"a",{"href":1527,"rel":1528},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[1529],"nofollow","bun-script example"," for a realistic batch processing script.",[478,1533,1535],{"id":1534},"multiple-destinations","Multiple Destinations",[471,1537,1538],{},"Send logs to multiple services simultaneously by composing drains:",[502,1540,1543],{"className":504,"code":1541,"filename":1542,"language":507,"meta":508,"style":508},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nconst axiom = createAxiomDrain()\nconst otlp = createOTLPDrain()\n\nconst drain = async (ctx) => {\n  await Promise.allSettled([axiom(ctx), otlp(ctx)])\n}\n","src\u002Findex.ts",[486,1544,1545,1563,1583,1587,1600,1613,1617,1640,1677],{"__ignoreMap":508},[512,1546,1547,1549,1551,1553,1555,1557,1559,1561],{"class":514,"line":515},[512,1548,526],{"class":525},[512,1550,530],{"class":529},[512,1552,534],{"class":533},[512,1554,537],{"class":529},[512,1556,540],{"class":525},[512,1558,543],{"class":529},[512,1560,547],{"class":546},[512,1562,550],{"class":529},[512,1564,1565,1567,1569,1572,1574,1576,1578,1581],{"class":514,"line":522},[512,1566,526],{"class":525},[512,1568,530],{"class":529},[512,1570,1571],{"class":533}," createOTLPDrain",[512,1573,537],{"class":529},[512,1575,540],{"class":525},[512,1577,543],{"class":529},[512,1579,1580],{"class":546},"evlog\u002Fotlp",[512,1582,550],{"class":529},[512,1584,1585],{"class":514,"line":553},[512,1586,557],{"emptyLinePlaceholder":556},[512,1588,1589,1591,1594,1596,1598],{"class":514,"line":560},[512,1590,1276],{"class":585},[512,1592,1593],{"class":533}," axiom ",[512,1595,1282],{"class":529},[512,1597,534],{"class":569},[512,1599,1296],{"class":533},[512,1601,1602,1604,1607,1609,1611],{"class":514,"line":592},[512,1603,1276],{"class":585},[512,1605,1606],{"class":533}," otlp ",[512,1608,1282],{"class":529},[512,1610,1571],{"class":569},[512,1612,1296],{"class":533},[512,1614,1615],{"class":514,"line":628},[512,1616,557],{"emptyLinePlaceholder":556},[512,1618,1619,1621,1623,1625,1628,1631,1634,1636,1638],{"class":514,"line":746},[512,1620,1276],{"class":585},[512,1622,1303],{"class":533},[512,1624,1282],{"class":529},[512,1626,1627],{"class":585}," async",[512,1629,1630],{"class":529}," (",[512,1632,1633],{"class":578},"ctx",[512,1635,582],{"class":529},[512,1637,586],{"class":585},[512,1639,589],{"class":529},[512,1641,1642,1645,1648,1650,1653,1656,1659,1661,1663,1665,1667,1670,1672,1674],{"class":514,"line":761},[512,1643,1644],{"class":525},"  await",[512,1646,1647],{"class":1290}," Promise",[512,1649,598],{"class":529},[512,1651,1652],{"class":569},"allSettled",[512,1654,1655],{"class":609},"([",[512,1657,1658],{"class":569},"axiom",[512,1660,573],{"class":609},[512,1662,1633],{"class":533},[512,1664,582],{"class":609},[512,1666,620],{"class":529},[512,1668,1669],{"class":569}," otlp",[512,1671,573],{"class":609},[512,1673,1633],{"class":533},[512,1675,1676],{"class":609},")])\n",[512,1678,1679],{"class":514,"line":1322},[512,1680,1681],{"class":529},"}\n",[471,1683,1684,1685,1687],{},"Then pass ",[486,1686,1169],{}," to your framework:",[499,1689,1690,1751,1840,1867,1893,1920,1946,1969],{},[502,1691,1693],{"className":504,"code":1692,"filename":506,"language":507,"meta":508,"style":508},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n",[486,1694,1695,1699,1719,1745],{"__ignoreMap":508},[512,1696,1697],{"class":514,"line":515},[512,1698,519],{"class":518},[512,1700,1701,1703,1705,1707,1709,1711,1713,1715,1717],{"class":514,"line":522},[512,1702,563],{"class":525},[512,1704,566],{"class":525},[512,1706,570],{"class":569},[512,1708,573],{"class":533},[512,1710,573],{"class":529},[512,1712,579],{"class":578},[512,1714,582],{"class":529},[512,1716,586],{"class":585},[512,1718,589],{"class":529},[512,1720,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743],{"class":514,"line":553},[512,1722,595],{"class":533},[512,1724,598],{"class":529},[512,1726,601],{"class":533},[512,1728,598],{"class":529},[512,1730,606],{"class":569},[512,1732,573],{"class":609},[512,1734,612],{"class":529},[512,1736,615],{"class":546},[512,1738,612],{"class":529},[512,1740,620],{"class":529},[512,1742,815],{"class":533},[512,1744,634],{"class":609},[512,1746,1747,1749],{"class":514,"line":560},[512,1748,631],{"class":529},[512,1750,634],{"class":533},[502,1752,1754],{"className":504,"code":1753,"filename":172,"language":507,"meta":508,"style":508},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain,\n})\n",[486,1755,1756,1760,1778,1782,1814,1828,1834],{"__ignoreMap":508},[512,1757,1758],{"class":514,"line":515},[512,1759,644],{"class":518},[512,1761,1762,1764,1766,1768,1770,1772,1774,1776],{"class":514,"line":522},[512,1763,526],{"class":525},[512,1765,530],{"class":529},[512,1767,653],{"class":533},[512,1769,537],{"class":529},[512,1771,540],{"class":525},[512,1773,543],{"class":529},[512,1775,662],{"class":546},[512,1777,550],{"class":529},[512,1779,1780],{"class":514,"line":553},[512,1781,557],{"emptyLinePlaceholder":556},[512,1783,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812],{"class":514,"line":560},[512,1785,563],{"class":525},[512,1787,693],{"class":585},[512,1789,530],{"class":529},[512,1791,698],{"class":533},[512,1793,620],{"class":529},[512,1795,703],{"class":533},[512,1797,620],{"class":529},[512,1799,708],{"class":533},[512,1801,620],{"class":529},[512,1803,713],{"class":533},[512,1805,631],{"class":529},[512,1807,718],{"class":529},[512,1809,653],{"class":569},[512,1811,573],{"class":533},[512,1813,725],{"class":529},[512,1815,1816,1818,1820,1822,1824,1826],{"class":514,"line":592},[512,1817,730],{"class":609},[512,1819,733],{"class":529},[512,1821,543],{"class":529},[512,1823,738],{"class":546},[512,1825,612],{"class":529},[512,1827,743],{"class":529},[512,1829,1830,1832],{"class":514,"line":628},[512,1831,749],{"class":533},[512,1833,743],{"class":529},[512,1835,1836,1838],{"class":514,"line":746},[512,1837,631],{"class":529},[512,1839,634],{"class":533},[502,1841,1843],{"className":504,"code":1842,"filename":202,"language":507,"meta":508,"style":508},"app.use(evlog({ drain }))\n",[486,1844,1845],{"__ignoreMap":508},[512,1846,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865],{"class":514,"line":515},[512,1848,797],{"class":533},[512,1850,598],{"class":529},[512,1852,802],{"class":569},[512,1854,573],{"class":533},[512,1856,807],{"class":569},[512,1858,573],{"class":533},[512,1860,812],{"class":529},[512,1862,1303],{"class":533},[512,1864,631],{"class":529},[512,1866,827],{"class":533},[502,1868,1869],{"className":504,"code":1842,"filename":197,"language":507,"meta":508,"style":508},[486,1870,1871],{"__ignoreMap":508},[512,1872,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891],{"class":514,"line":515},[512,1874,797],{"class":533},[512,1876,598],{"class":529},[512,1878,802],{"class":569},[512,1880,573],{"class":533},[512,1882,807],{"class":569},[512,1884,573],{"class":533},[512,1886,812],{"class":529},[512,1888,1303],{"class":533},[512,1890,631],{"class":529},[512,1892,827],{"class":533},[502,1894,1896],{"className":504,"code":1895,"filename":207,"language":507,"meta":508,"style":508},"await app.register(evlog, { drain })\n",[486,1897,1898],{"__ignoreMap":508},[512,1899,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918],{"class":514,"line":515},[512,1901,913],{"class":525},[512,1903,916],{"class":533},[512,1905,598],{"class":529},[512,1907,921],{"class":569},[512,1909,924],{"class":533},[512,1911,620],{"class":529},[512,1913,530],{"class":529},[512,1915,1303],{"class":533},[512,1917,631],{"class":529},[512,1919,634],{"class":533},[502,1921,1922],{"className":504,"code":1842,"filename":212,"language":507,"meta":508,"style":508},[486,1923,1924],{"__ignoreMap":508},[512,1925,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944],{"class":514,"line":515},[512,1927,797],{"class":533},[512,1929,598],{"class":529},[512,1931,802],{"class":569},[512,1933,573],{"class":533},[512,1935,807],{"class":569},[512,1937,573],{"class":533},[512,1939,812],{"class":529},[512,1941,1303],{"class":533},[512,1943,631],{"class":529},[512,1945,827],{"class":533},[502,1947,1949],{"className":504,"code":1948,"filename":192,"language":507,"meta":508,"style":508},"EvlogModule.forRoot({ drain })\n",[486,1950,1951],{"__ignoreMap":508},[512,1952,1953,1955,1957,1959,1961,1963,1965,1967],{"class":514,"line":515},[512,1954,1026],{"class":533},[512,1956,598],{"class":529},[512,1958,1031],{"class":569},[512,1960,573],{"class":533},[512,1962,812],{"class":529},[512,1964,1303],{"class":533},[512,1966,631],{"class":529},[512,1968,634],{"class":533},[502,1970,1972],{"className":504,"code":1971,"filename":227,"language":507,"meta":508,"style":508},"initLogger({ drain })\n",[486,1973,1974],{"__ignoreMap":508},[512,1975,1976,1978,1980,1982,1984,1986],{"class":514,"line":515},[512,1977,1079],{"class":569},[512,1979,573],{"class":533},[512,1981,812],{"class":529},[512,1983,1303],{"class":533},[512,1985,631],{"class":529},[512,1987,634],{"class":533},[478,1989,1991],{"id":1990},"drain-context","Drain Context",[471,1993,1994,1995,1997],{},"Every adapter receives a ",[486,1996,488],{}," with:",[1999,2000,2001,2017],"table",{},[2002,2003,2004],"thead",{},[2005,2006,2007,2011,2014],"tr",{},[2008,2009,2010],"th",{},"Field",[2008,2012,2013],{},"Type",[2008,2015,2016],{},"Description",[2018,2019,2020,2036,2061],"tbody",{},[2005,2021,2022,2028,2033],{},[2023,2024,2025],"td",{},[486,2026,2027],{},"event",[2023,2029,2030],{},[486,2031,2032],{},"WideEvent",[2023,2034,2035],{},"The complete log event with all accumulated context",[2005,2037,2038,2043,2048],{},[2023,2039,2040],{},[486,2041,2042],{},"request",[2023,2044,2045],{},[486,2046,2047],{},"object",[2023,2049,2050,2051,2054,2055,2054,2058,582],{},"Request metadata (",[486,2052,2053],{},"method",", ",[486,2056,2057],{},"path",[486,2059,2060],{},"requestId",[2005,2062,2063,2068,2072],{},[2023,2064,2065],{},[486,2066,2067],{},"headers",[2023,2069,2070],{},[486,2071,2047],{},[2023,2073,2074],{},"Safe HTTP headers (sensitive headers are filtered)",[1097,2076,2078,2081,2082,2054,2085,2054,2088,2091],{"color":2077,"icon":318},"success",[491,2079,2080],{},"Security:"," Sensitive headers (",[486,2083,2084],{},"authorization",[486,2086,2087],{},"cookie",[486,2089,2090],{},"x-api-key",", etc.) are automatically filtered and never passed to adapters.",[478,2093,2095],{"id":2094},"zero-config-setup","Zero-Config Setup",[471,2097,2098],{},"All adapters support automatic configuration via environment variables. No code changes needed when deploying to different environments.",[471,2100,2101],{},"Each adapter reads from standard environment variables — the same names work in every framework:",[502,2103,2108],{"className":2104,"code":2105,"filename":2106,"language":2107,"meta":508,"style":508},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Axiom\nAXIOM_API_KEY=xaat-xxx\nAXIOM_DATASET=my-logs\n\n# OTLP\nOTLP_ENDPOINT=https:\u002F\u002Fotlp.example.com\n\n# HyperDX\nHYPERDX_API_KEY=\u003CYOUR_HYPERDX_API_KEY_HERE>\n\n# PostHog\nPOSTHOG_API_KEY=phc_xxx\n\n# Sentry\nSENTRY_DSN=https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n\n# Better Stack\nBETTER_STACK_API_KEY=your-source-token\n\n# Datadog\nDD_API_KEY=your-api-key\nDD_SITE=datadoghq.eu\n",".env","bash",[486,2109,2110,2115,2125,2135,2139,2144,2154,2158,2163,2177,2181,2186,2196,2200,2205,2215,2219,2224,2234,2238,2243,2254],{"__ignoreMap":508},[512,2111,2112],{"class":514,"line":515},[512,2113,2114],{"class":518},"# Axiom\n",[512,2116,2117,2120,2122],{"class":514,"line":522},[512,2118,2119],{"class":533},"AXIOM_API_KEY",[512,2121,1282],{"class":529},[512,2123,2124],{"class":546},"xaat-xxx\n",[512,2126,2127,2130,2132],{"class":514,"line":553},[512,2128,2129],{"class":533},"AXIOM_DATASET",[512,2131,1282],{"class":529},[512,2133,2134],{"class":546},"my-logs\n",[512,2136,2137],{"class":514,"line":560},[512,2138,557],{"emptyLinePlaceholder":556},[512,2140,2141],{"class":514,"line":592},[512,2142,2143],{"class":518},"# OTLP\n",[512,2145,2146,2149,2151],{"class":514,"line":628},[512,2147,2148],{"class":533},"OTLP_ENDPOINT",[512,2150,1282],{"class":529},[512,2152,2153],{"class":546},"https:\u002F\u002Fotlp.example.com\n",[512,2155,2156],{"class":514,"line":746},[512,2157,557],{"emptyLinePlaceholder":556},[512,2159,2160],{"class":514,"line":761},[512,2161,2162],{"class":518},"# HyperDX\n",[512,2164,2165,2168,2171,2174],{"class":514,"line":1322},[512,2166,2167],{"class":533},"HYPERDX_API_KEY",[512,2169,2170],{"class":529},"=\u003C",[512,2172,2173],{"class":546},"YOUR_HYPERDX_API_KEY_HERE",[512,2175,2176],{"class":529},">\n",[512,2178,2179],{"class":514,"line":1331},[512,2180,557],{"emptyLinePlaceholder":556},[512,2182,2183],{"class":514,"line":1356},[512,2184,2185],{"class":518},"# PostHog\n",[512,2187,2188,2191,2193],{"class":514,"line":1363},[512,2189,2190],{"class":533},"POSTHOG_API_KEY",[512,2192,1282],{"class":529},[512,2194,2195],{"class":546},"phc_xxx\n",[512,2197,2198],{"class":514,"line":1370},[512,2199,557],{"emptyLinePlaceholder":556},[512,2201,2202],{"class":514,"line":1375},[512,2203,2204],{"class":518},"# Sentry\n",[512,2206,2207,2210,2212],{"class":514,"line":1409},[512,2208,2209],{"class":533},"SENTRY_DSN",[512,2211,1282],{"class":529},[512,2213,2214],{"class":546},"https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n",[512,2216,2217],{"class":514,"line":1414},[512,2218,557],{"emptyLinePlaceholder":556},[512,2220,2221],{"class":514,"line":1460},[512,2222,2223],{"class":518},"# Better Stack\n",[512,2225,2226,2229,2231],{"class":514,"line":1488},[512,2227,2228],{"class":533},"BETTER_STACK_API_KEY",[512,2230,1282],{"class":529},[512,2232,2233],{"class":546},"your-source-token\n",[512,2235,2236],{"class":514,"line":1502},[512,2237,557],{"emptyLinePlaceholder":556},[512,2239,2240],{"class":514,"line":1507},[512,2241,2242],{"class":518},"# Datadog\n",[512,2244,2246,2249,2251],{"class":514,"line":2245},21,[512,2247,2248],{"class":533},"DD_API_KEY",[512,2250,1282],{"class":529},[512,2252,2253],{"class":546},"your-api-key\n",[512,2255,2257,2260,2262],{"class":514,"line":2256},22,[512,2258,2259],{"class":533},"DD_SITE",[512,2261,1282],{"class":529},[512,2263,2264],{"class":546},"datadoghq.eu\n",[471,2266,2267,2268,2271],{},"Adapters auto-read from these variables, so just call ",[486,2269,2270],{},"createXDrain()"," with no arguments.",[478,2273,2275],{"id":2274},"missing-credentials","Missing credentials",[471,2277,2278],{},"Behavior depends on which API you call:",[1999,2280,2281,2290],{},[2002,2282,2283],{},[2005,2284,2285,2288],{},[2008,2286,2287],{},"API",[2008,2289,2275],{},[2018,2291,2292,2306],{},[2005,2293,2294,2300],{},[2023,2295,2296,2299],{},[486,2297,2298],{},"create*Drain()"," (factory)",[2023,2301,2302,2305],{},[486,2303,2304],{},"console.error"," + drain becomes a no-op — the HTTP response is never blocked",[2005,2307,2308,2318],{},[2023,2309,2310,2313,2314,2317],{},[486,2311,2312],{},"sendTo*"," \u002F ",[486,2315,2316],{},"sendBatchTo*"," (direct)",[2023,2319,2320],{},"Throws if required credentials are absent — caller must pass a complete config",[471,2322,2323],{},"This split is intentional: drains run fire-and-forget after each request; direct send helpers are for scripts and tests where a silent failure would hide misconfiguration.",[2325,2326,2327],"style",{},"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 .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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":508,"searchDepth":522,"depth":522,"links":2329},[2330,2331,2332,2333,2334,2335,2336],{"id":480,"depth":522,"text":481},{"id":1111,"depth":522,"text":1112},{"id":1162,"depth":522,"text":1163},{"id":1534,"depth":522,"text":1535},{"id":1990,"depth":522,"text":1991},{"id":2094,"depth":522,"text":2095},{"id":2274,"depth":522,"text":2275},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.","md",[2340,2342,2343,2344,2345,2346,2347,2348,2349,2350],{"label":103,"icon":106,"to":104,"color":1521,"variant":2341},"subtle",{"label":108,"icon":111,"to":109,"color":1521,"variant":2341},{"label":133,"icon":136,"to":134,"color":1521,"variant":2341},{"label":113,"icon":116,"to":114,"color":1521,"variant":2341},{"label":118,"icon":121,"to":119,"color":1521,"variant":2341},{"label":123,"icon":126,"to":124,"color":1521,"variant":2341},{"label":128,"icon":131,"to":129,"color":1521,"variant":2341},{"label":143,"icon":146,"to":144,"color":1521,"variant":2341},{"label":148,"icon":151,"to":149,"color":1521,"variant":2341},{"label":153,"icon":156,"to":154,"color":1521,"variant":2341},{},{"title":36,"icon":39},{"title":466,"description":2337},"Gtkqfh-_0EYSLAhWsRxQSXBjul-qXppj0kOdsQ7aLtQ",[2356,2358],{"title":36,"path":86,"stem":87,"description":2357,"icon":88,"children":-1},"Wire evlog into your stack — pick a framework integration to capture requests automatically, then pick adapters to ship events to Axiom, Sentry, PostHog, OTLP, and more. Frameworks decide where the logger lives; adapters decide where events go.",{"title":103,"path":104,"stem":105,"description":2359,"icon":106,"children":-1},"Send wide events to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables and automatic batching.",1784213429214]