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