[{"data":1,"prerenderedAt":1901},["ShallowReactive",2],{"navigation_docs":3,"-adapters-overview":282,"-adapters-overview-surround":1896},[4,30,65,105,188,252,268],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,169,174,178,183],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167,"icon":168},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":170,"path":171,"stem":172,"icon":173},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":175,"path":176,"stem":177,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":179,"path":180,"stem":181,"icon":182},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":184,"path":185,"stem":186,"icon":187},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Adapters","\u002Fadapters","5.adapters",[193,197,202,207,212,217,222,227,232,237,242,247],{"title":36,"path":194,"stem":195,"icon":196},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":198,"path":199,"stem":200,"icon":201},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":203,"path":204,"stem":205,"icon":206},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":208,"path":209,"stem":210,"icon":211},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F12.browser","i-lucide-globe",{"title":213,"path":214,"stem":215,"icon":216},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":218,"path":219,"stem":220,"icon":221},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":223,"path":224,"stem":225,"icon":226},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":228,"path":229,"stem":230,"icon":231},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":233,"path":234,"stem":235,"icon":236},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":238,"path":239,"stem":240,"icon":241},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":243,"path":244,"stem":245,"icon":246},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":248,"path":249,"stem":250,"icon":251},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":253,"path":254,"stem":255,"children":256,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[257,260,264],{"title":36,"path":258,"stem":259,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":261,"path":262,"stem":263,"icon":187},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":265,"path":266,"stem":267,"icon":201},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":269,"path":270,"stem":271,"children":272,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[273,277],{"title":36,"path":274,"stem":275,"icon":276},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":278,"path":279,"stem":280,"icon":281},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":283,"title":284,"body":285,"description":1880,"extension":1881,"links":1882,"meta":1892,"navigation":1893,"path":194,"seo":1894,"stem":195,"__hash__":1895},"docs\u002F5.adapters\u002F1.overview.md","Adapters Overview",{"type":286,"value":287,"toc":1872},"minimark",[288,292,297,310,313,781,794,798,835,839,849,1200,1213,1217,1220,1363,1369,1580,1584,1590,1667,1684,1688,1691,1698,1861,1868],[289,290,291],"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.",[293,294,296],"h2",{"id":295},"how-adapters-work","How Adapters Work",[289,298,299,300,304,305,309],{},"Adapters receive a ",[301,302,303],"code",{},"DrainContext"," after each request completes and send the data to an external service. The drain runs in ",[306,307,308],"strong",{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[289,311,312],{},"How you wire an adapter depends on your framework:",[314,315,316,450,513,567,626,680,733],"code-group",{},[317,318,324],"pre",{"className":319,"code":320,"filename":321,"language":322,"meta":323,"style":323},"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","",[301,325,326,335,366,373,405,441],{"__ignoreMap":323},[327,328,331],"span",{"class":329,"line":330},"line",1,[327,332,334],{"class":333},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[327,336,338,342,346,350,353,356,359,363],{"class":329,"line":337},2,[327,339,341],{"class":340},"s7zQu","import",[327,343,345],{"class":344},"sMK4o"," {",[327,347,349],{"class":348},"sTEyZ"," createAxiomDrain",[327,351,352],{"class":344}," }",[327,354,355],{"class":340}," from",[327,357,358],{"class":344}," '",[327,360,362],{"class":361},"sfazB","evlog\u002Faxiom",[327,364,365],{"class":344},"'\n",[327,367,369],{"class":329,"line":368},3,[327,370,372],{"emptyLinePlaceholder":371},true,"\n",[327,374,376,379,382,386,389,391,395,398,402],{"class":329,"line":375},4,[327,377,378],{"class":340},"export",[327,380,381],{"class":340}," default",[327,383,385],{"class":384},"s2Zo4"," defineNitroPlugin",[327,387,388],{"class":348},"(",[327,390,388],{"class":344},[327,392,394],{"class":393},"sHdIc","nitroApp",[327,396,397],{"class":344},")",[327,399,401],{"class":400},"spNyl"," =>",[327,403,404],{"class":344}," {\n",[327,406,408,411,414,417,419,422,425,428,431,433,436,438],{"class":329,"line":407},5,[327,409,410],{"class":348},"  nitroApp",[327,412,413],{"class":344},".",[327,415,416],{"class":348},"hooks",[327,418,413],{"class":344},[327,420,421],{"class":384},"hook",[327,423,388],{"class":424},"swJcz",[327,426,427],{"class":344},"'",[327,429,430],{"class":361},"evlog:drain",[327,432,427],{"class":344},[327,434,435],{"class":344},",",[327,437,349],{"class":384},[327,439,440],{"class":424},"())\n",[327,442,444,447],{"class":329,"line":443},6,[327,445,446],{"class":344},"}",[327,448,449],{"class":348},")\n",[317,451,453],{"className":319,"code":452,"filename":150,"language":322,"meta":323,"style":323},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\napp.use(evlog({ drain: createAxiomDrain() }))\n",[301,454,455,473,477],{"__ignoreMap":323},[327,456,457,459,461,463,465,467,469,471],{"class":329,"line":330},[327,458,341],{"class":340},[327,460,345],{"class":344},[327,462,349],{"class":348},[327,464,352],{"class":344},[327,466,355],{"class":340},[327,468,358],{"class":344},[327,470,362],{"class":361},[327,472,365],{"class":344},[327,474,475],{"class":329,"line":337},[327,476,372],{"emptyLinePlaceholder":371},[327,478,479,482,484,487,489,492,494,497,500,503,505,508,510],{"class":329,"line":368},[327,480,481],{"class":348},"app",[327,483,413],{"class":344},[327,485,486],{"class":384},"use",[327,488,388],{"class":348},[327,490,491],{"class":384},"evlog",[327,493,388],{"class":348},[327,495,496],{"class":344},"{",[327,498,499],{"class":424}," drain",[327,501,502],{"class":344},":",[327,504,349],{"class":384},[327,506,507],{"class":348},"() ",[327,509,446],{"class":344},[327,511,512],{"class":348},"))\n",[317,514,515],{"className":319,"code":452,"filename":145,"language":322,"meta":323,"style":323},[301,516,517,535,539],{"__ignoreMap":323},[327,518,519,521,523,525,527,529,531,533],{"class":329,"line":330},[327,520,341],{"class":340},[327,522,345],{"class":344},[327,524,349],{"class":348},[327,526,352],{"class":344},[327,528,355],{"class":340},[327,530,358],{"class":344},[327,532,362],{"class":361},[327,534,365],{"class":344},[327,536,537],{"class":329,"line":337},[327,538,372],{"emptyLinePlaceholder":371},[327,540,541,543,545,547,549,551,553,555,557,559,561,563,565],{"class":329,"line":368},[327,542,481],{"class":348},[327,544,413],{"class":344},[327,546,486],{"class":384},[327,548,388],{"class":348},[327,550,491],{"class":384},[327,552,388],{"class":348},[327,554,496],{"class":344},[327,556,499],{"class":424},[327,558,502],{"class":344},[327,560,349],{"class":384},[327,562,507],{"class":348},[327,564,446],{"class":344},[327,566,512],{"class":348},[317,568,570],{"className":319,"code":569,"filename":155,"language":322,"meta":323,"style":323},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nawait app.register(evlog, { drain: createAxiomDrain() })\n",[301,571,572,590,594],{"__ignoreMap":323},[327,573,574,576,578,580,582,584,586,588],{"class":329,"line":330},[327,575,341],{"class":340},[327,577,345],{"class":344},[327,579,349],{"class":348},[327,581,352],{"class":344},[327,583,355],{"class":340},[327,585,358],{"class":344},[327,587,362],{"class":361},[327,589,365],{"class":344},[327,591,592],{"class":329,"line":337},[327,593,372],{"emptyLinePlaceholder":371},[327,595,596,599,602,604,607,610,612,614,616,618,620,622,624],{"class":329,"line":368},[327,597,598],{"class":340},"await",[327,600,601],{"class":348}," app",[327,603,413],{"class":344},[327,605,606],{"class":384},"register",[327,608,609],{"class":348},"(evlog",[327,611,435],{"class":344},[327,613,345],{"class":344},[327,615,499],{"class":424},[327,617,502],{"class":344},[327,619,349],{"class":384},[327,621,507],{"class":348},[327,623,446],{"class":344},[327,625,449],{"class":348},[317,627,628],{"className":319,"code":452,"filename":160,"language":322,"meta":323,"style":323},[301,629,630,648,652],{"__ignoreMap":323},[327,631,632,634,636,638,640,642,644,646],{"class":329,"line":330},[327,633,341],{"class":340},[327,635,345],{"class":344},[327,637,349],{"class":348},[327,639,352],{"class":344},[327,641,355],{"class":340},[327,643,358],{"class":344},[327,645,362],{"class":361},[327,647,365],{"class":344},[327,649,650],{"class":329,"line":337},[327,651,372],{"emptyLinePlaceholder":371},[327,653,654,656,658,660,662,664,666,668,670,672,674,676,678],{"class":329,"line":368},[327,655,481],{"class":348},[327,657,413],{"class":344},[327,659,486],{"class":384},[327,661,388],{"class":348},[327,663,491],{"class":384},[327,665,388],{"class":348},[327,667,496],{"class":344},[327,669,499],{"class":424},[327,671,502],{"class":344},[327,673,349],{"class":384},[327,675,507],{"class":348},[327,677,446],{"class":344},[327,679,512],{"class":348},[317,681,683],{"className":319,"code":682,"filename":140,"language":322,"meta":323,"style":323},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nEvlogModule.forRoot({ drain: createAxiomDrain() })\n",[301,684,685,703,707],{"__ignoreMap":323},[327,686,687,689,691,693,695,697,699,701],{"class":329,"line":330},[327,688,341],{"class":340},[327,690,345],{"class":344},[327,692,349],{"class":348},[327,694,352],{"class":344},[327,696,355],{"class":340},[327,698,358],{"class":344},[327,700,362],{"class":361},[327,702,365],{"class":344},[327,704,705],{"class":329,"line":337},[327,706,372],{"emptyLinePlaceholder":371},[327,708,709,712,714,717,719,721,723,725,727,729,731],{"class":329,"line":368},[327,710,711],{"class":348},"EvlogModule",[327,713,413],{"class":344},[327,715,716],{"class":384},"forRoot",[327,718,388],{"class":348},[327,720,496],{"class":344},[327,722,499],{"class":424},[327,724,502],{"class":344},[327,726,349],{"class":384},[327,728,507],{"class":348},[327,730,446],{"class":344},[327,732,449],{"class":348},[317,734,736],{"className":319,"code":735,"filename":175,"language":322,"meta":323,"style":323},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({ drain: createAxiomDrain() })\n",[301,737,738,756,760],{"__ignoreMap":323},[327,739,740,742,744,746,748,750,752,754],{"class":329,"line":330},[327,741,341],{"class":340},[327,743,345],{"class":344},[327,745,349],{"class":348},[327,747,352],{"class":344},[327,749,355],{"class":340},[327,751,358],{"class":344},[327,753,362],{"class":361},[327,755,365],{"class":344},[327,757,758],{"class":329,"line":337},[327,759,372],{"emptyLinePlaceholder":371},[327,761,762,765,767,769,771,773,775,777,779],{"class":329,"line":368},[327,763,764],{"class":384},"initLogger",[327,766,388],{"class":348},[327,768,496],{"class":344},[327,770,499],{"class":424},[327,772,502],{"class":344},[327,774,349],{"class":384},[327,776,507],{"class":348},[327,778,446],{"class":344},[327,780,449],{"class":348},[782,783,786,789,790,793],"callout",{"color":784,"icon":785},"info","i-lucide-cloud",[306,787,788],{},"Serverless Support:"," On Cloudflare Workers and Vercel Edge, evlog automatically uses ",[301,791,792],{},"waitUntil()"," to ensure drains complete before the runtime terminates. No additional configuration needed.",[293,795,797],{"id":796},"available-adapters","Available Adapters",[799,800,801,805,808,811,814,817,820,823,826,829,832],"card-group",{},[802,803,804],"card",{"icon":216,"title":213,"to":214},"Send logs to Axiom for powerful querying and dashboards.",[802,806,807],{"icon":221,"title":218,"to":219},"OpenTelemetry Protocol for Grafana, Datadog, Honeycomb, and more.",[802,809,810],{"icon":251,"title":248,"to":249},"Send logs to HyperDX via OTLP\u002FHTTP using their documented ingest endpoint and API key.",[802,812,813],{"icon":226,"title":223,"to":224},"Send logs to PostHog Logs for structured logging and observability.",[802,815,816],{"icon":231,"title":228,"to":229},"Send structured logs to Sentry Logs for high-cardinality querying.",[802,818,819],{"icon":236,"title":233,"to":234},"Send logs to Better Stack for log management and alerting.",[802,821,822],{"icon":246,"title":243,"to":244},"Send logs to Datadog Logs via the native HTTP intake API.",[802,824,825],{"icon":241,"title":238,"to":239},"Write logs to local NDJSON files for debugging and AI agent integration.",[802,827,828],{"icon":201,"title":265,"to":199},"Build your own adapter for any destination.",[802,830,831],{"icon":211,"title":208,"to":209},"Send browser logs to your server without framework coupling.",[802,833,834],{"icon":206,"title":203,"to":204},"Batch events, retry on failure, and handle buffer overflow.",[293,836,838],{"id":837},"standalone-usage","Standalone Usage",[289,840,841,842,845,846,848],{},"In plain TypeScript or Bun scripts (no HTTP framework), use the ",[301,843,844],{},"drain"," option in ",[301,847,764],{},". Every emitted event is drained automatically.",[317,850,853],{"className":319,"code":851,"filename":852,"language":322,"meta":323,"style":323},"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",[301,854,855,877,906,924,944,948,973,993,998,1008,1033,1042,1049,1054,1088,1093,1139,1167,1181,1186],{"__ignoreMap":323},[327,856,857,859,862,864,867,869,871,873,875],{"class":329,"line":330},[327,858,341],{"class":340},[327,860,861],{"class":340}," type",[327,863,345],{"class":344},[327,865,866],{"class":348}," DrainContext",[327,868,352],{"class":344},[327,870,355],{"class":340},[327,872,358],{"class":344},[327,874,491],{"class":361},[327,876,365],{"class":344},[327,878,879,881,883,886,888,891,893,896,898,900,902,904],{"class":329,"line":337},[327,880,341],{"class":340},[327,882,345],{"class":344},[327,884,885],{"class":348}," initLogger",[327,887,435],{"class":344},[327,889,890],{"class":348}," log",[327,892,435],{"class":344},[327,894,895],{"class":348}," createRequestLogger",[327,897,352],{"class":344},[327,899,355],{"class":340},[327,901,358],{"class":344},[327,903,491],{"class":361},[327,905,365],{"class":344},[327,907,908,910,912,914,916,918,920,922],{"class":329,"line":368},[327,909,341],{"class":340},[327,911,345],{"class":344},[327,913,349],{"class":348},[327,915,352],{"class":344},[327,917,355],{"class":340},[327,919,358],{"class":344},[327,921,362],{"class":361},[327,923,365],{"class":344},[327,925,926,928,930,933,935,937,939,942],{"class":329,"line":375},[327,927,341],{"class":340},[327,929,345],{"class":344},[327,931,932],{"class":348}," createDrainPipeline",[327,934,352],{"class":344},[327,936,355],{"class":340},[327,938,358],{"class":344},[327,940,941],{"class":361},"evlog\u002Fpipeline",[327,943,365],{"class":344},[327,945,946],{"class":329,"line":407},[327,947,372],{"emptyLinePlaceholder":371},[327,949,950,953,956,959,961,964,967,970],{"class":329,"line":443},[327,951,952],{"class":400},"const",[327,954,955],{"class":348}," pipeline ",[327,957,958],{"class":344},"=",[327,960,932],{"class":384},[327,962,963],{"class":344},"\u003C",[327,965,303],{"class":966},"sBMFI",[327,968,969],{"class":344},">",[327,971,972],{"class":348},"()\n",[327,974,976,978,981,983,986,988,991],{"class":329,"line":975},7,[327,977,952],{"class":400},[327,979,980],{"class":348}," drain ",[327,982,958],{"class":344},[327,984,985],{"class":384}," pipeline",[327,987,388],{"class":348},[327,989,990],{"class":384},"createAxiomDrain",[327,992,440],{"class":348},[327,994,996],{"class":329,"line":995},8,[327,997,372],{"emptyLinePlaceholder":371},[327,999,1001,1003,1005],{"class":329,"line":1000},9,[327,1002,764],{"class":384},[327,1004,388],{"class":348},[327,1006,1007],{"class":344},"{\n",[327,1009,1011,1014,1016,1018,1021,1023,1025,1028,1030],{"class":329,"line":1010},10,[327,1012,1013],{"class":424},"  env",[327,1015,502],{"class":344},[327,1017,345],{"class":344},[327,1019,1020],{"class":424}," service",[327,1022,502],{"class":344},[327,1024,358],{"class":344},[327,1026,1027],{"class":361},"my-script",[327,1029,427],{"class":344},[327,1031,1032],{"class":344}," },\n",[327,1034,1036,1039],{"class":329,"line":1035},11,[327,1037,1038],{"class":348},"  drain",[327,1040,1041],{"class":344},",\n",[327,1043,1045,1047],{"class":329,"line":1044},12,[327,1046,446],{"class":344},[327,1048,449],{"class":348},[327,1050,1052],{"class":329,"line":1051},13,[327,1053,372],{"emptyLinePlaceholder":371},[327,1055,1057,1060,1062,1064,1066,1068,1071,1073,1075,1078,1080,1082,1085],{"class":329,"line":1056},14,[327,1058,1059],{"class":348},"log",[327,1061,413],{"class":344},[327,1063,784],{"class":384},[327,1065,388],{"class":348},[327,1067,496],{"class":344},[327,1069,1070],{"class":424}," action",[327,1072,502],{"class":344},[327,1074,358],{"class":344},[327,1076,1077],{"class":361},"job_started",[327,1079,427],{"class":344},[327,1081,352],{"class":344},[327,1083,1084],{"class":348},") ",[327,1086,1087],{"class":333},"\u002F\u002F drained automatically\n",[327,1089,1091],{"class":329,"line":1090},15,[327,1092,372],{"emptyLinePlaceholder":371},[327,1094,1096,1098,1101,1103,1105,1107,1109,1112,1114,1116,1119,1121,1123,1126,1128,1130,1133,1135,1137],{"class":329,"line":1095},16,[327,1097,952],{"class":400},[327,1099,1100],{"class":348}," reqLog ",[327,1102,958],{"class":344},[327,1104,895],{"class":384},[327,1106,388],{"class":348},[327,1108,496],{"class":344},[327,1110,1111],{"class":424}," method",[327,1113,502],{"class":344},[327,1115,358],{"class":344},[327,1117,1118],{"class":361},"POST",[327,1120,427],{"class":344},[327,1122,435],{"class":344},[327,1124,1125],{"class":424}," path",[327,1127,502],{"class":344},[327,1129,358],{"class":344},[327,1131,1132],{"class":361},"\u002Fprocess",[327,1134,427],{"class":344},[327,1136,352],{"class":344},[327,1138,449],{"class":348},[327,1140,1142,1145,1147,1150,1152,1154,1157,1159,1163,1165],{"class":329,"line":1141},17,[327,1143,1144],{"class":348},"reqLog",[327,1146,413],{"class":344},[327,1148,1149],{"class":384},"set",[327,1151,388],{"class":348},[327,1153,496],{"class":344},[327,1155,1156],{"class":424}," processed",[327,1158,502],{"class":344},[327,1160,1162],{"class":1161},"sbssI"," 42",[327,1164,352],{"class":344},[327,1166,449],{"class":348},[327,1168,1170,1172,1174,1177,1179],{"class":329,"line":1169},18,[327,1171,1144],{"class":348},[327,1173,413],{"class":344},[327,1175,1176],{"class":384},"emit",[327,1178,507],{"class":348},[327,1180,1087],{"class":333},[327,1182,1184],{"class":329,"line":1183},19,[327,1185,372],{"emptyLinePlaceholder":371},[327,1187,1189,1191,1193,1195,1198],{"class":329,"line":1188},20,[327,1190,598],{"class":340},[327,1192,499],{"class":348},[327,1194,413],{"class":344},[327,1196,1197],{"class":384},"flush",[327,1199,972],{"class":348},[782,1201,1204,1205,1212],{"color":1202,"icon":1203},"neutral","i-lucide-arrow-right","See the full ",[1206,1207,1211],"a",{"href":1208,"rel":1209},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[1210],"nofollow","bun-script example"," for a realistic batch processing script.",[293,1214,1216],{"id":1215},"multiple-destinations","Multiple Destinations",[289,1218,1219],{},"Send logs to multiple services simultaneously by composing drains:",[317,1221,1224],{"className":319,"code":1222,"filename":1223,"language":322,"meta":323,"style":323},"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",[301,1225,1226,1244,1264,1268,1281,1294,1298,1321,1358],{"__ignoreMap":323},[327,1227,1228,1230,1232,1234,1236,1238,1240,1242],{"class":329,"line":330},[327,1229,341],{"class":340},[327,1231,345],{"class":344},[327,1233,349],{"class":348},[327,1235,352],{"class":344},[327,1237,355],{"class":340},[327,1239,358],{"class":344},[327,1241,362],{"class":361},[327,1243,365],{"class":344},[327,1245,1246,1248,1250,1253,1255,1257,1259,1262],{"class":329,"line":337},[327,1247,341],{"class":340},[327,1249,345],{"class":344},[327,1251,1252],{"class":348}," createOTLPDrain",[327,1254,352],{"class":344},[327,1256,355],{"class":340},[327,1258,358],{"class":344},[327,1260,1261],{"class":361},"evlog\u002Fotlp",[327,1263,365],{"class":344},[327,1265,1266],{"class":329,"line":368},[327,1267,372],{"emptyLinePlaceholder":371},[327,1269,1270,1272,1275,1277,1279],{"class":329,"line":375},[327,1271,952],{"class":400},[327,1273,1274],{"class":348}," axiom ",[327,1276,958],{"class":344},[327,1278,349],{"class":384},[327,1280,972],{"class":348},[327,1282,1283,1285,1288,1290,1292],{"class":329,"line":407},[327,1284,952],{"class":400},[327,1286,1287],{"class":348}," otlp ",[327,1289,958],{"class":344},[327,1291,1252],{"class":384},[327,1293,972],{"class":348},[327,1295,1296],{"class":329,"line":443},[327,1297,372],{"emptyLinePlaceholder":371},[327,1299,1300,1302,1304,1306,1309,1312,1315,1317,1319],{"class":329,"line":975},[327,1301,952],{"class":400},[327,1303,980],{"class":348},[327,1305,958],{"class":344},[327,1307,1308],{"class":400}," async",[327,1310,1311],{"class":344}," (",[327,1313,1314],{"class":393},"ctx",[327,1316,397],{"class":344},[327,1318,401],{"class":400},[327,1320,404],{"class":344},[327,1322,1323,1326,1329,1331,1334,1337,1340,1342,1344,1346,1348,1351,1353,1355],{"class":329,"line":995},[327,1324,1325],{"class":340},"  await",[327,1327,1328],{"class":966}," Promise",[327,1330,413],{"class":344},[327,1332,1333],{"class":384},"allSettled",[327,1335,1336],{"class":424},"([",[327,1338,1339],{"class":384},"axiom",[327,1341,388],{"class":424},[327,1343,1314],{"class":348},[327,1345,397],{"class":424},[327,1347,435],{"class":344},[327,1349,1350],{"class":384}," otlp",[327,1352,388],{"class":424},[327,1354,1314],{"class":348},[327,1356,1357],{"class":424},")])\n",[327,1359,1360],{"class":329,"line":1000},[327,1361,1362],{"class":344},"}\n",[289,1364,1365,1366,1368],{},"Then pass ",[301,1367,844],{}," to your framework:",[314,1370,1371,1432,1459,1485,1512,1538,1561],{},[317,1372,1374],{"className":319,"code":1373,"filename":321,"language":322,"meta":323,"style":323},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n",[301,1375,1376,1380,1400,1426],{"__ignoreMap":323},[327,1377,1378],{"class":329,"line":330},[327,1379,334],{"class":333},[327,1381,1382,1384,1386,1388,1390,1392,1394,1396,1398],{"class":329,"line":337},[327,1383,378],{"class":340},[327,1385,381],{"class":340},[327,1387,385],{"class":384},[327,1389,388],{"class":348},[327,1391,388],{"class":344},[327,1393,394],{"class":393},[327,1395,397],{"class":344},[327,1397,401],{"class":400},[327,1399,404],{"class":344},[327,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424],{"class":329,"line":368},[327,1403,410],{"class":348},[327,1405,413],{"class":344},[327,1407,416],{"class":348},[327,1409,413],{"class":344},[327,1411,421],{"class":384},[327,1413,388],{"class":424},[327,1415,427],{"class":344},[327,1417,430],{"class":361},[327,1419,427],{"class":344},[327,1421,435],{"class":344},[327,1423,499],{"class":348},[327,1425,449],{"class":424},[327,1427,1428,1430],{"class":329,"line":375},[327,1429,446],{"class":344},[327,1431,449],{"class":348},[317,1433,1435],{"className":319,"code":1434,"filename":150,"language":322,"meta":323,"style":323},"app.use(evlog({ drain }))\n",[301,1436,1437],{"__ignoreMap":323},[327,1438,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457],{"class":329,"line":330},[327,1440,481],{"class":348},[327,1442,413],{"class":344},[327,1444,486],{"class":384},[327,1446,388],{"class":348},[327,1448,491],{"class":384},[327,1450,388],{"class":348},[327,1452,496],{"class":344},[327,1454,980],{"class":348},[327,1456,446],{"class":344},[327,1458,512],{"class":348},[317,1460,1461],{"className":319,"code":1434,"filename":145,"language":322,"meta":323,"style":323},[301,1462,1463],{"__ignoreMap":323},[327,1464,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483],{"class":329,"line":330},[327,1466,481],{"class":348},[327,1468,413],{"class":344},[327,1470,486],{"class":384},[327,1472,388],{"class":348},[327,1474,491],{"class":384},[327,1476,388],{"class":348},[327,1478,496],{"class":344},[327,1480,980],{"class":348},[327,1482,446],{"class":344},[327,1484,512],{"class":348},[317,1486,1488],{"className":319,"code":1487,"filename":155,"language":322,"meta":323,"style":323},"await app.register(evlog, { drain })\n",[301,1489,1490],{"__ignoreMap":323},[327,1491,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510],{"class":329,"line":330},[327,1493,598],{"class":340},[327,1495,601],{"class":348},[327,1497,413],{"class":344},[327,1499,606],{"class":384},[327,1501,609],{"class":348},[327,1503,435],{"class":344},[327,1505,345],{"class":344},[327,1507,980],{"class":348},[327,1509,446],{"class":344},[327,1511,449],{"class":348},[317,1513,1514],{"className":319,"code":1434,"filename":160,"language":322,"meta":323,"style":323},[301,1515,1516],{"__ignoreMap":323},[327,1517,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":329,"line":330},[327,1519,481],{"class":348},[327,1521,413],{"class":344},[327,1523,486],{"class":384},[327,1525,388],{"class":348},[327,1527,491],{"class":384},[327,1529,388],{"class":348},[327,1531,496],{"class":344},[327,1533,980],{"class":348},[327,1535,446],{"class":344},[327,1537,512],{"class":348},[317,1539,1541],{"className":319,"code":1540,"filename":140,"language":322,"meta":323,"style":323},"EvlogModule.forRoot({ drain })\n",[301,1542,1543],{"__ignoreMap":323},[327,1544,1545,1547,1549,1551,1553,1555,1557,1559],{"class":329,"line":330},[327,1546,711],{"class":348},[327,1548,413],{"class":344},[327,1550,716],{"class":384},[327,1552,388],{"class":348},[327,1554,496],{"class":344},[327,1556,980],{"class":348},[327,1558,446],{"class":344},[327,1560,449],{"class":348},[317,1562,1564],{"className":319,"code":1563,"filename":175,"language":322,"meta":323,"style":323},"initLogger({ drain })\n",[301,1565,1566],{"__ignoreMap":323},[327,1567,1568,1570,1572,1574,1576,1578],{"class":329,"line":330},[327,1569,764],{"class":384},[327,1571,388],{"class":348},[327,1573,496],{"class":344},[327,1575,980],{"class":348},[327,1577,446],{"class":344},[327,1579,449],{"class":348},[293,1581,1583],{"id":1582},"drain-context","Drain Context",[289,1585,1586,1587,1589],{},"Every adapter receives a ",[301,1588,303],{}," with:",[1591,1592,1593,1609],"table",{},[1594,1595,1596],"thead",{},[1597,1598,1599,1603,1606],"tr",{},[1600,1601,1602],"th",{},"Field",[1600,1604,1605],{},"Type",[1600,1607,1608],{},"Description",[1610,1611,1612,1628,1653],"tbody",{},[1597,1613,1614,1620,1625],{},[1615,1616,1617],"td",{},[301,1618,1619],{},"event",[1615,1621,1622],{},[301,1623,1624],{},"WideEvent",[1615,1626,1627],{},"The complete log event with all accumulated context",[1597,1629,1630,1635,1640],{},[1615,1631,1632],{},[301,1633,1634],{},"request",[1615,1636,1637],{},[301,1638,1639],{},"object",[1615,1641,1642,1643,1646,1647,1646,1650,397],{},"Request metadata (",[301,1644,1645],{},"method",", ",[301,1648,1649],{},"path",[301,1651,1652],{},"requestId",[1597,1654,1655,1660,1664],{},[1615,1656,1657],{},[301,1658,1659],{},"headers",[1615,1661,1662],{},[301,1663,1639],{},[1615,1665,1666],{},"Safe HTTP headers (sensitive headers are filtered)",[782,1668,1670,1673,1674,1646,1677,1646,1680,1683],{"color":1669,"icon":94},"success",[306,1671,1672],{},"Security:"," Sensitive headers (",[301,1675,1676],{},"authorization",[301,1678,1679],{},"cookie",[301,1681,1682],{},"x-api-key",", etc.) are automatically filtered and never passed to adapters.",[293,1685,1687],{"id":1686},"zero-config-setup","Zero-Config Setup",[289,1689,1690],{},"All adapters support automatic configuration via environment variables. No code changes needed when deploying to different environments.",[289,1692,1693,1694,1697],{},"Each adapter reads from ",[301,1695,1696],{},"NUXT_*"," prefixed variables (for Nuxt\u002FNitro runtimeConfig) and unprefixed fallbacks (for any framework):",[317,1699,1704],{"className":1700,"code":1701,"filename":1702,"language":1703,"meta":323,"style":323},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Axiom (NUXT_AXIOM_* or AXIOM_*)\nAXIOM_TOKEN=xaat-xxx\nAXIOM_DATASET=my-logs\n\n# OTLP (NUXT_OTLP_* or OTEL_*)\nOTLP_ENDPOINT=https:\u002F\u002Fotlp.example.com\n\n# HyperDX (NUXT_HYPERDX_* or HYPERDX_*)\nHYPERDX_API_KEY=\u003CYOUR_HYPERDX_API_KEY_HERE>\n\n# PostHog (NUXT_POSTHOG_* or POSTHOG_*)\nPOSTHOG_API_KEY=phc_xxx\n\n# Sentry (NUXT_SENTRY_* or SENTRY_*)\nSENTRY_DSN=https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n\n# Better Stack (NUXT_BETTER_STACK_* or BETTER_STACK_*)\nBETTER_STACK_SOURCE_TOKEN=your-source-token\n\n# Datadog (NUXT_DATADOG_* or DATADOG_* or DD_*)\nDD_API_KEY=your-api-key\nDD_SITE=datadoghq.eu\n",".env","bash",[301,1705,1706,1711,1721,1731,1735,1740,1750,1754,1759,1773,1777,1782,1792,1796,1801,1811,1815,1820,1830,1834,1839,1850],{"__ignoreMap":323},[327,1707,1708],{"class":329,"line":330},[327,1709,1710],{"class":333},"# Axiom (NUXT_AXIOM_* or AXIOM_*)\n",[327,1712,1713,1716,1718],{"class":329,"line":337},[327,1714,1715],{"class":348},"AXIOM_TOKEN",[327,1717,958],{"class":344},[327,1719,1720],{"class":361},"xaat-xxx\n",[327,1722,1723,1726,1728],{"class":329,"line":368},[327,1724,1725],{"class":348},"AXIOM_DATASET",[327,1727,958],{"class":344},[327,1729,1730],{"class":361},"my-logs\n",[327,1732,1733],{"class":329,"line":375},[327,1734,372],{"emptyLinePlaceholder":371},[327,1736,1737],{"class":329,"line":407},[327,1738,1739],{"class":333},"# OTLP (NUXT_OTLP_* or OTEL_*)\n",[327,1741,1742,1745,1747],{"class":329,"line":443},[327,1743,1744],{"class":348},"OTLP_ENDPOINT",[327,1746,958],{"class":344},[327,1748,1749],{"class":361},"https:\u002F\u002Fotlp.example.com\n",[327,1751,1752],{"class":329,"line":975},[327,1753,372],{"emptyLinePlaceholder":371},[327,1755,1756],{"class":329,"line":995},[327,1757,1758],{"class":333},"# HyperDX (NUXT_HYPERDX_* or HYPERDX_*)\n",[327,1760,1761,1764,1767,1770],{"class":329,"line":1000},[327,1762,1763],{"class":348},"HYPERDX_API_KEY",[327,1765,1766],{"class":344},"=\u003C",[327,1768,1769],{"class":361},"YOUR_HYPERDX_API_KEY_HERE",[327,1771,1772],{"class":344},">\n",[327,1774,1775],{"class":329,"line":1010},[327,1776,372],{"emptyLinePlaceholder":371},[327,1778,1779],{"class":329,"line":1035},[327,1780,1781],{"class":333},"# PostHog (NUXT_POSTHOG_* or POSTHOG_*)\n",[327,1783,1784,1787,1789],{"class":329,"line":1044},[327,1785,1786],{"class":348},"POSTHOG_API_KEY",[327,1788,958],{"class":344},[327,1790,1791],{"class":361},"phc_xxx\n",[327,1793,1794],{"class":329,"line":1051},[327,1795,372],{"emptyLinePlaceholder":371},[327,1797,1798],{"class":329,"line":1056},[327,1799,1800],{"class":333},"# Sentry (NUXT_SENTRY_* or SENTRY_*)\n",[327,1802,1803,1806,1808],{"class":329,"line":1090},[327,1804,1805],{"class":348},"SENTRY_DSN",[327,1807,958],{"class":344},[327,1809,1810],{"class":361},"https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n",[327,1812,1813],{"class":329,"line":1095},[327,1814,372],{"emptyLinePlaceholder":371},[327,1816,1817],{"class":329,"line":1141},[327,1818,1819],{"class":333},"# Better Stack (NUXT_BETTER_STACK_* or BETTER_STACK_*)\n",[327,1821,1822,1825,1827],{"class":329,"line":1169},[327,1823,1824],{"class":348},"BETTER_STACK_SOURCE_TOKEN",[327,1826,958],{"class":344},[327,1828,1829],{"class":361},"your-source-token\n",[327,1831,1832],{"class":329,"line":1183},[327,1833,372],{"emptyLinePlaceholder":371},[327,1835,1836],{"class":329,"line":1188},[327,1837,1838],{"class":333},"# Datadog (NUXT_DATADOG_* or DATADOG_* or DD_*)\n",[327,1840,1842,1845,1847],{"class":329,"line":1841},21,[327,1843,1844],{"class":348},"DD_API_KEY",[327,1846,958],{"class":344},[327,1848,1849],{"class":361},"your-api-key\n",[327,1851,1853,1856,1858],{"class":329,"line":1852},22,[327,1854,1855],{"class":348},"DD_SITE",[327,1857,958],{"class":344},[327,1859,1860],{"class":361},"datadoghq.eu\n",[289,1862,1863,1864,1867],{},"Adapters auto-read from these variables, so just call ",[301,1865,1866],{},"createXDrain()"," with no arguments.",[1869,1870,1871],"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":323,"searchDepth":337,"depth":337,"links":1873},[1874,1875,1876,1877,1878,1879],{"id":295,"depth":337,"text":296},{"id":796,"depth":337,"text":797},{"id":837,"depth":337,"text":838},{"id":1215,"depth":337,"text":1216},{"id":1582,"depth":337,"text":1583},{"id":1686,"depth":337,"text":1687},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.","md",[1883,1885,1886,1887,1888,1889,1890,1891],{"label":213,"icon":216,"to":214,"color":1202,"variant":1884},"subtle",{"label":218,"icon":221,"to":219,"color":1202,"variant":1884},{"label":248,"icon":251,"to":249,"color":1202,"variant":1884},{"label":223,"icon":226,"to":224,"color":1202,"variant":1884},{"label":228,"icon":231,"to":229,"color":1202,"variant":1884},{"label":233,"icon":236,"to":234,"color":1202,"variant":1884},{"label":243,"icon":246,"to":244,"color":1202,"variant":1884},{"label":238,"icon":241,"to":239,"color":1202,"variant":1884},{},{"title":36,"icon":196},{"title":284,"description":1880},"RUrfX0OfrGCnZE1jNN8GxzyGMO1SWFFUs-aC9gyLV0o",[1897,1899],{"title":184,"path":185,"stem":186,"description":1898,"icon":187,"children":-1},"Build your own evlog framework integration using the toolkit API with createMiddlewareLogger, header extraction, AsyncLocalStorage, and the full drain\u002Fenrich\u002Fkeep pipeline.",{"title":198,"path":199,"stem":200,"description":1900,"icon":201,"children":-1},"Build your own adapter to send logs to any destination. Factory patterns, batching, filtering, and error handling best practices.",1775319536326]