[{"data":1,"prerenderedAt":3222},["ShallowReactive",2],{"navigation_docs":3,"-adapters-building-blocks-custom":308,"-adapters-building-blocks-custom-surround":3217},[4,35,80,124,212,292],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,75],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":66,"path":67,"stem":68,"icon":69},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":71,"path":72,"stem":73,"icon":74},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":76,"path":77,"stem":78,"icon":79},"Audit Logs","\u002Flogging\u002Faudit","2.logging\u002F7.audit","i-lucide-shield-check",{"title":81,"path":82,"stem":83,"children":84,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[85,90,95,100,105,109,114,119],{"title":86,"path":87,"stem":88,"icon":89},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":91,"path":92,"stem":93,"icon":94},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":96,"path":97,"stem":98,"icon":99},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":101,"path":102,"stem":103,"icon":104},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":106,"path":107,"stem":108,"icon":79},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":110,"path":111,"stem":112,"icon":113},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":115,"path":116,"stem":117,"icon":118},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":120,"path":121,"stem":122,"icon":123},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":125,"path":126,"stem":127,"children":128,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[129,133,138,143,148,153,158,163,168,173,178,183,188,193,197,202,207],{"title":41,"path":130,"stem":131,"icon":132},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":134,"path":135,"stem":136,"icon":137},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":139,"path":140,"stem":141,"icon":142},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":144,"path":145,"stem":146,"icon":147},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":149,"path":150,"stem":151,"icon":152},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":154,"path":155,"stem":156,"icon":157},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":159,"path":160,"stem":161,"icon":162},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":164,"path":165,"stem":166,"icon":167},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":169,"path":170,"stem":171,"icon":172},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":174,"path":175,"stem":176,"icon":177},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":179,"path":180,"stem":181,"icon":182},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":184,"path":185,"stem":186,"icon":187},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":189,"path":190,"stem":191,"icon":192},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":194,"path":195,"stem":196,"icon":104},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":198,"path":199,"stem":200,"icon":201},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":203,"path":204,"stem":205,"icon":206},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":208,"path":209,"stem":210,"icon":211},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":213,"path":214,"stem":215,"children":216,"page":34},"Adapters","\u002Fadapters","6.adapters",[217,257,272],{"title":218,"path":219,"stem":220,"children":221,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[222,227,232,237,242,247,252],{"title":223,"path":224,"stem":225,"icon":226},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":228,"path":229,"stem":230,"icon":231},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":233,"path":234,"stem":235,"icon":236},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":238,"path":239,"stem":240,"icon":241},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":243,"path":244,"stem":245,"icon":246},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":248,"path":249,"stem":250,"icon":251},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":253,"path":254,"stem":255,"icon":256},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":258,"path":259,"stem":260,"children":261,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[262,267],{"title":263,"path":264,"stem":265,"icon":266},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":268,"path":269,"stem":270,"icon":271},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":273,"path":274,"stem":275,"children":276,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[277,282,287],{"title":278,"path":279,"stem":280,"icon":281},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":283,"path":284,"stem":285,"icon":286},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":288,"path":289,"stem":290,"icon":291},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom","i-lucide-code",{"title":293,"path":294,"stem":295,"children":296,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[297,300,304],{"title":41,"path":298,"stem":299,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":301,"path":302,"stem":303,"icon":211},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":305,"path":306,"stem":307,"icon":291},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":309,"title":288,"body":310,"description":3206,"extension":3207,"links":3208,"meta":3213,"navigation":3214,"path":289,"seo":3215,"stem":290,"__hash__":3216},"docs\u002F6.adapters\u002F04.building-blocks\u002F03.custom.md",{"type":311,"value":312,"toc":3195},"minimark",[313,322,372,377,383,593,596,934,938,1220,1224,1227,1828,1831,1878,1882,1885,2078,2082,2085,2229,2233,2236,2581,2585,2592,2812,2821,2825,2857,3162,3166,3191],[314,315,316,317,321],"p",{},"You can create custom adapters to send logs to any service or destination. An adapter is simply a function that receives a ",[318,319,320],"code",{},"DrainContext"," and sends the data somewhere.",[323,324,327,330,358],"prompt",{":actions":325,"description":326,"icon":291},"[\"copy\",\"cursor\",\"windsurf\"]","Build a custom drain adapter",[314,328,329],{},"Build a custom evlog drain adapter that sends wide events to my destination.",[331,332,333,337,343,346,349,352,355],"ul",{},[334,335,336],"li",{},"Identify the destination (HTTP API, queue, fs, third-party SDK) and the format it expects",[334,338,339,340],{},"Create a factory function: createMyDrain(options): (ctx: DrainContext) => void | Promise",[341,342],"void",{},[334,344,345],{},"Inside the drain, transform ctx.event into the destination's payload shape",[334,347,348],{},"Wrap the drain with createDrainPipeline(...) so batching and retries are handled for me",[334,350,351],{},"Add include\u002Fexclude filtering at the factory level if needed",[334,353,354],{},"NEVER throw from the drain — log internally and swallow errors so app requests don't fail",[334,356,357],{},"Wire the drain to my framework's evlog:drain hook (or middleware drain option)",[314,359,360,361,367,368],{},"Docs: ",[362,363,364],"a",{"href":364,"rel":365},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fcustom",[366],"nofollow","\nPipeline: ",[362,369,370],{"href":370,"rel":371},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline",[366],[373,374,376],"h2",{"id":375},"basic-structure","Basic Structure",[314,378,379,380,382],{},"A drain is a function that receives a ",[318,381,320],{}," and sends data somewhere:",[384,385,391],"pre",{"className":386,"code":387,"filename":388,"language":389,"meta":390,"style":390},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\n\nconst drain = async (ctx: DrainContext) => {\n  await fetch('https:\u002F\u002Fyour-service.com\u002Flogs', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify(ctx.event),\n  })\n}\n","lib\u002Fmy-drain.ts","typescript","",[318,392,393,429,436,474,501,519,548,578,587],{"__ignoreMap":390},[394,395,398,402,405,409,413,416,419,422,426],"span",{"class":396,"line":397},"line",1,[394,399,401],{"class":400},"s7zQu","import",[394,403,404],{"class":400}," type",[394,406,408],{"class":407},"sMK4o"," {",[394,410,412],{"class":411},"sTEyZ"," DrainContext",[394,414,415],{"class":407}," }",[394,417,418],{"class":400}," from",[394,420,421],{"class":407}," '",[394,423,425],{"class":424},"sfazB","evlog",[394,427,428],{"class":407},"'\n",[394,430,432],{"class":396,"line":431},2,[394,433,435],{"emptyLinePlaceholder":434},true,"\n",[394,437,439,443,446,449,452,455,459,462,465,468,471],{"class":396,"line":438},3,[394,440,442],{"class":441},"spNyl","const",[394,444,445],{"class":411}," drain ",[394,447,448],{"class":407},"=",[394,450,451],{"class":441}," async",[394,453,454],{"class":407}," (",[394,456,458],{"class":457},"sHdIc","ctx",[394,460,461],{"class":407},":",[394,463,412],{"class":464},"sBMFI",[394,466,467],{"class":407},")",[394,469,470],{"class":441}," =>",[394,472,473],{"class":407}," {\n",[394,475,477,480,484,488,491,494,496,499],{"class":396,"line":476},4,[394,478,479],{"class":400},"  await",[394,481,483],{"class":482},"s2Zo4"," fetch",[394,485,487],{"class":486},"swJcz","(",[394,489,490],{"class":407},"'",[394,492,493],{"class":424},"https:\u002F\u002Fyour-service.com\u002Flogs",[394,495,490],{"class":407},[394,497,498],{"class":407},",",[394,500,473],{"class":407},[394,502,504,507,509,511,514,516],{"class":396,"line":503},5,[394,505,506],{"class":486},"    method",[394,508,461],{"class":407},[394,510,421],{"class":407},[394,512,513],{"class":424},"POST",[394,515,490],{"class":407},[394,517,518],{"class":407},",\n",[394,520,522,525,527,529,531,534,536,538,540,543,545],{"class":396,"line":521},6,[394,523,524],{"class":486},"    headers",[394,526,461],{"class":407},[394,528,408],{"class":407},[394,530,421],{"class":407},[394,532,533],{"class":486},"Content-Type",[394,535,490],{"class":407},[394,537,461],{"class":407},[394,539,421],{"class":407},[394,541,542],{"class":424},"application\u002Fjson",[394,544,490],{"class":407},[394,546,547],{"class":407}," },\n",[394,549,551,554,556,559,562,565,567,569,571,574,576],{"class":396,"line":550},7,[394,552,553],{"class":486},"    body",[394,555,461],{"class":407},[394,557,558],{"class":411}," JSON",[394,560,561],{"class":407},".",[394,563,564],{"class":482},"stringify",[394,566,487],{"class":486},[394,568,458],{"class":411},[394,570,561],{"class":407},[394,572,573],{"class":411},"event",[394,575,467],{"class":486},[394,577,518],{"class":407},[394,579,581,584],{"class":396,"line":580},8,[394,582,583],{"class":407},"  }",[394,585,586],{"class":486},")\n",[394,588,590],{"class":396,"line":589},9,[394,591,592],{"class":407},"}\n",[314,594,595],{},"Then wire it to your framework:",[597,598,599,673,775,806,832,863,889,914],"code-group",{},[384,600,603],{"className":386,"code":601,"filename":602,"language":389,"meta":390,"style":390},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","Nuxt \u002F Nitro",[318,604,605,611,635,666],{"__ignoreMap":390},[394,606,607],{"class":396,"line":397},[394,608,610],{"class":609},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[394,612,613,616,619,622,624,626,629,631,633],{"class":396,"line":431},[394,614,615],{"class":400},"export",[394,617,618],{"class":400}," default",[394,620,621],{"class":482}," defineNitroPlugin",[394,623,487],{"class":411},[394,625,487],{"class":407},[394,627,628],{"class":457},"nitroApp",[394,630,467],{"class":407},[394,632,470],{"class":441},[394,634,473],{"class":407},[394,636,637,640,642,645,647,650,652,654,657,659,661,664],{"class":396,"line":438},[394,638,639],{"class":411},"  nitroApp",[394,641,561],{"class":407},[394,643,644],{"class":411},"hooks",[394,646,561],{"class":407},[394,648,649],{"class":482},"hook",[394,651,487],{"class":486},[394,653,490],{"class":407},[394,655,656],{"class":424},"evlog:drain",[394,658,490],{"class":407},[394,660,498],{"class":407},[394,662,663],{"class":411}," drain",[394,665,586],{"class":486},[394,667,668,671],{"class":396,"line":476},[394,669,670],{"class":407},"}",[394,672,586],{"class":411},[384,674,676],{"className":386,"code":675,"filename":139,"language":389,"meta":390,"style":390},"\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",[318,677,678,683,703,707,746,762,769],{"__ignoreMap":390},[394,679,680],{"class":396,"line":397},[394,681,682],{"class":609},"\u002F\u002F lib\u002Fevlog.ts\n",[394,684,685,687,689,692,694,696,698,701],{"class":396,"line":431},[394,686,401],{"class":400},[394,688,408],{"class":407},[394,690,691],{"class":411}," createEvlog",[394,693,415],{"class":407},[394,695,418],{"class":400},[394,697,421],{"class":407},[394,699,700],{"class":424},"evlog\u002Fnext",[394,702,428],{"class":407},[394,704,705],{"class":396,"line":438},[394,706,435],{"emptyLinePlaceholder":434},[394,708,709,711,714,716,719,721,724,726,729,731,734,736,739,741,743],{"class":396,"line":476},[394,710,615],{"class":400},[394,712,713],{"class":441}," const",[394,715,408],{"class":407},[394,717,718],{"class":411}," withEvlog",[394,720,498],{"class":407},[394,722,723],{"class":411}," useLogger",[394,725,498],{"class":407},[394,727,728],{"class":411}," log",[394,730,498],{"class":407},[394,732,733],{"class":411}," createError ",[394,735,670],{"class":407},[394,737,738],{"class":407}," =",[394,740,691],{"class":482},[394,742,487],{"class":411},[394,744,745],{"class":407},"{\n",[394,747,748,751,753,755,758,760],{"class":396,"line":503},[394,749,750],{"class":486},"  service",[394,752,461],{"class":407},[394,754,421],{"class":407},[394,756,757],{"class":424},"my-app",[394,759,490],{"class":407},[394,761,518],{"class":407},[394,763,764,767],{"class":396,"line":521},[394,765,766],{"class":411},"  drain",[394,768,518],{"class":407},[394,770,771,773],{"class":396,"line":550},[394,772,670],{"class":407},[394,774,586],{"class":411},[384,776,778],{"className":386,"code":777,"filename":169,"language":389,"meta":390,"style":390},"app.use(evlog({ drain }))\n",[318,779,780],{"__ignoreMap":390},[394,781,782,785,787,790,792,794,796,799,801,803],{"class":396,"line":397},[394,783,784],{"class":411},"app",[394,786,561],{"class":407},[394,788,789],{"class":482},"use",[394,791,487],{"class":411},[394,793,425],{"class":482},[394,795,487],{"class":411},[394,797,798],{"class":407},"{",[394,800,445],{"class":411},[394,802,670],{"class":407},[394,804,805],{"class":411},"))\n",[384,807,808],{"className":386,"code":777,"filename":164,"language":389,"meta":390,"style":390},[318,809,810],{"__ignoreMap":390},[394,811,812,814,816,818,820,822,824,826,828,830],{"class":396,"line":397},[394,813,784],{"class":411},[394,815,561],{"class":407},[394,817,789],{"class":482},[394,819,487],{"class":411},[394,821,425],{"class":482},[394,823,487],{"class":411},[394,825,798],{"class":407},[394,827,445],{"class":411},[394,829,670],{"class":407},[394,831,805],{"class":411},[384,833,835],{"className":386,"code":834,"filename":174,"language":389,"meta":390,"style":390},"await app.register(evlog, { drain })\n",[318,836,837],{"__ignoreMap":390},[394,838,839,842,845,847,850,853,855,857,859,861],{"class":396,"line":397},[394,840,841],{"class":400},"await",[394,843,844],{"class":411}," app",[394,846,561],{"class":407},[394,848,849],{"class":482},"register",[394,851,852],{"class":411},"(evlog",[394,854,498],{"class":407},[394,856,408],{"class":407},[394,858,445],{"class":411},[394,860,670],{"class":407},[394,862,586],{"class":411},[384,864,865],{"className":386,"code":777,"filename":179,"language":389,"meta":390,"style":390},[318,866,867],{"__ignoreMap":390},[394,868,869,871,873,875,877,879,881,883,885,887],{"class":396,"line":397},[394,870,784],{"class":411},[394,872,561],{"class":407},[394,874,789],{"class":482},[394,876,487],{"class":411},[394,878,425],{"class":482},[394,880,487],{"class":411},[394,882,798],{"class":407},[394,884,445],{"class":411},[394,886,670],{"class":407},[394,888,805],{"class":411},[384,890,892],{"className":386,"code":891,"filename":159,"language":389,"meta":390,"style":390},"EvlogModule.forRoot({ drain })\n",[318,893,894],{"__ignoreMap":390},[394,895,896,899,901,904,906,908,910,912],{"class":396,"line":397},[394,897,898],{"class":411},"EvlogModule",[394,900,561],{"class":407},[394,902,903],{"class":482},"forRoot",[394,905,487],{"class":411},[394,907,798],{"class":407},[394,909,445],{"class":411},[394,911,670],{"class":407},[394,913,586],{"class":411},[384,915,917],{"className":386,"code":916,"filename":194,"language":389,"meta":390,"style":390},"initLogger({ drain })\n",[318,918,919],{"__ignoreMap":390},[394,920,921,924,926,928,930,932],{"class":396,"line":397},[394,922,923],{"class":482},"initLogger",[394,925,487],{"class":411},[394,927,798],{"class":407},[394,929,445],{"class":411},[394,931,670],{"class":407},[394,933,586],{"class":411},[373,935,937],{"id":936},"draincontext-reference","DrainContext Reference",[384,939,942],{"className":386,"code":940,"filename":941,"language":389,"meta":390,"style":390},"interface DrainContext {\n  \u002F** The complete wide event with all accumulated context *\u002F\n  event: WideEvent\n\n  \u002F** Request metadata *\u002F\n  request?: {\n    method: string\n    path: string\n    requestId: string\n  }\n\n  \u002F** Safe HTTP headers (sensitive headers filtered) *\u002F\n  headers?: Record\u003Cstring, string>\n}\n\ninterface WideEvent {\n  timestamp: string\n  level: 'debug' | 'info' | 'warn' | 'error'\n  service: string\n  environment?: string\n  version?: string\n  region?: string\n  commitHash?: string\n  requestId?: string\n  \u002F\u002F ... plus all fields added via log.set()\n  [key: string]: unknown\n}\n","types.ts",[318,943,944,953,958,968,972,977,987,996,1005,1014,1020,1025,1031,1056,1061,1066,1076,1086,1129,1138,1148,1158,1168,1178,1188,1194,1215],{"__ignoreMap":390},[394,945,946,949,951],{"class":396,"line":397},[394,947,948],{"class":441},"interface",[394,950,412],{"class":464},[394,952,473],{"class":407},[394,954,955],{"class":396,"line":431},[394,956,957],{"class":609},"  \u002F** The complete wide event with all accumulated context *\u002F\n",[394,959,960,963,965],{"class":396,"line":438},[394,961,962],{"class":486},"  event",[394,964,461],{"class":407},[394,966,967],{"class":464}," WideEvent\n",[394,969,970],{"class":396,"line":476},[394,971,435],{"emptyLinePlaceholder":434},[394,973,974],{"class":396,"line":503},[394,975,976],{"class":609},"  \u002F** Request metadata *\u002F\n",[394,978,979,982,985],{"class":396,"line":521},[394,980,981],{"class":486},"  request",[394,983,984],{"class":407},"?:",[394,986,473],{"class":407},[394,988,989,991,993],{"class":396,"line":550},[394,990,506],{"class":486},[394,992,461],{"class":407},[394,994,995],{"class":464}," string\n",[394,997,998,1001,1003],{"class":396,"line":580},[394,999,1000],{"class":486},"    path",[394,1002,461],{"class":407},[394,1004,995],{"class":464},[394,1006,1007,1010,1012],{"class":396,"line":589},[394,1008,1009],{"class":486},"    requestId",[394,1011,461],{"class":407},[394,1013,995],{"class":464},[394,1015,1017],{"class":396,"line":1016},10,[394,1018,1019],{"class":407},"  }\n",[394,1021,1023],{"class":396,"line":1022},11,[394,1024,435],{"emptyLinePlaceholder":434},[394,1026,1028],{"class":396,"line":1027},12,[394,1029,1030],{"class":609},"  \u002F** Safe HTTP headers (sensitive headers filtered) *\u002F\n",[394,1032,1034,1037,1039,1042,1045,1048,1050,1053],{"class":396,"line":1033},13,[394,1035,1036],{"class":486},"  headers",[394,1038,984],{"class":407},[394,1040,1041],{"class":464}," Record",[394,1043,1044],{"class":407},"\u003C",[394,1046,1047],{"class":464},"string",[394,1049,498],{"class":407},[394,1051,1052],{"class":464}," string",[394,1054,1055],{"class":407},">\n",[394,1057,1059],{"class":396,"line":1058},14,[394,1060,592],{"class":407},[394,1062,1064],{"class":396,"line":1063},15,[394,1065,435],{"emptyLinePlaceholder":434},[394,1067,1069,1071,1074],{"class":396,"line":1068},16,[394,1070,948],{"class":441},[394,1072,1073],{"class":464}," WideEvent",[394,1075,473],{"class":407},[394,1077,1079,1082,1084],{"class":396,"line":1078},17,[394,1080,1081],{"class":486},"  timestamp",[394,1083,461],{"class":407},[394,1085,995],{"class":464},[394,1087,1089,1092,1094,1096,1099,1101,1104,1106,1109,1111,1113,1115,1118,1120,1122,1124,1127],{"class":396,"line":1088},18,[394,1090,1091],{"class":486},"  level",[394,1093,461],{"class":407},[394,1095,421],{"class":407},[394,1097,1098],{"class":424},"debug",[394,1100,490],{"class":407},[394,1102,1103],{"class":407}," |",[394,1105,421],{"class":407},[394,1107,1108],{"class":424},"info",[394,1110,490],{"class":407},[394,1112,1103],{"class":407},[394,1114,421],{"class":407},[394,1116,1117],{"class":424},"warn",[394,1119,490],{"class":407},[394,1121,1103],{"class":407},[394,1123,421],{"class":407},[394,1125,1126],{"class":424},"error",[394,1128,428],{"class":407},[394,1130,1132,1134,1136],{"class":396,"line":1131},19,[394,1133,750],{"class":486},[394,1135,461],{"class":407},[394,1137,995],{"class":464},[394,1139,1141,1144,1146],{"class":396,"line":1140},20,[394,1142,1143],{"class":486},"  environment",[394,1145,984],{"class":407},[394,1147,995],{"class":464},[394,1149,1151,1154,1156],{"class":396,"line":1150},21,[394,1152,1153],{"class":486},"  version",[394,1155,984],{"class":407},[394,1157,995],{"class":464},[394,1159,1161,1164,1166],{"class":396,"line":1160},22,[394,1162,1163],{"class":486},"  region",[394,1165,984],{"class":407},[394,1167,995],{"class":464},[394,1169,1171,1174,1176],{"class":396,"line":1170},23,[394,1172,1173],{"class":486},"  commitHash",[394,1175,984],{"class":407},[394,1177,995],{"class":464},[394,1179,1181,1184,1186],{"class":396,"line":1180},24,[394,1182,1183],{"class":486},"  requestId",[394,1185,984],{"class":407},[394,1187,995],{"class":464},[394,1189,1191],{"class":396,"line":1190},25,[394,1192,1193],{"class":609},"  \u002F\u002F ... plus all fields added via log.set()\n",[394,1195,1197,1200,1203,1205,1207,1210,1212],{"class":396,"line":1196},26,[394,1198,1199],{"class":411},"  [",[394,1201,1202],{"class":457},"key",[394,1204,461],{"class":407},[394,1206,1052],{"class":464},[394,1208,1209],{"class":411},"]",[394,1211,461],{"class":407},[394,1213,1214],{"class":464}," unknown\n",[394,1216,1218],{"class":396,"line":1217},27,[394,1219,592],{"class":407},[373,1221,1223],{"id":1222},"factory-pattern","Factory Pattern",[314,1225,1226],{},"For reusable adapters, use the factory pattern:",[384,1228,1231],{"className":386,"code":1229,"filename":1230,"language":389,"meta":390,"style":390},"import type { DrainContext } from 'evlog'\n\nexport interface MyAdapterConfig {\n  apiKey: string\n  endpoint?: string\n  timeout?: number\n}\n\nexport function createMyAdapter(config: MyAdapterConfig) {\n  const endpoint = config.endpoint ?? 'https:\u002F\u002Fapi.myservice.com\u002Fingest'\n  const timeout = config.timeout ?? 5000\n\n  return async (ctx: DrainContext) => {\n    const controller = new AbortController()\n    const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n    try {\n      const response = await fetch(endpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application\u002Fjson',\n          'X-API-Key': config.apiKey,\n        },\n        body: JSON.stringify(ctx.event),\n        signal: controller.signal,\n      })\n\n      if (!response.ok) {\n        console.error(`[my-adapter] Failed: ${response.status}`)\n      }\n    } catch (error) {\n      if (error instanceof Error && error.name === 'AbortError') {\n        console.error('[my-adapter] Request timed out')\n      } else {\n        console.error('[my-adapter] Error:', error)\n      }\n    } finally {\n      clearTimeout(timeoutId)\n    }\n  }\n}\n","lib\u002Fmy-adapter.ts",[318,1232,1233,1253,1257,1269,1278,1287,1297,1301,1305,1328,1356,1378,1382,1403,1422,1456,1460,1467,1490,1505,1514,1533,1553,1558,1583,1599,1606,1610,1634,1667,1673,1690,1730,1750,1760,1784,1789,1799,1812,1818,1823],{"__ignoreMap":390},[394,1234,1235,1237,1239,1241,1243,1245,1247,1249,1251],{"class":396,"line":397},[394,1236,401],{"class":400},[394,1238,404],{"class":400},[394,1240,408],{"class":407},[394,1242,412],{"class":411},[394,1244,415],{"class":407},[394,1246,418],{"class":400},[394,1248,421],{"class":407},[394,1250,425],{"class":424},[394,1252,428],{"class":407},[394,1254,1255],{"class":396,"line":431},[394,1256,435],{"emptyLinePlaceholder":434},[394,1258,1259,1261,1264,1267],{"class":396,"line":438},[394,1260,615],{"class":400},[394,1262,1263],{"class":441}," interface",[394,1265,1266],{"class":464}," MyAdapterConfig",[394,1268,473],{"class":407},[394,1270,1271,1274,1276],{"class":396,"line":476},[394,1272,1273],{"class":486},"  apiKey",[394,1275,461],{"class":407},[394,1277,995],{"class":464},[394,1279,1280,1283,1285],{"class":396,"line":503},[394,1281,1282],{"class":486},"  endpoint",[394,1284,984],{"class":407},[394,1286,995],{"class":464},[394,1288,1289,1292,1294],{"class":396,"line":521},[394,1290,1291],{"class":486},"  timeout",[394,1293,984],{"class":407},[394,1295,1296],{"class":464}," number\n",[394,1298,1299],{"class":396,"line":550},[394,1300,592],{"class":407},[394,1302,1303],{"class":396,"line":580},[394,1304,435],{"emptyLinePlaceholder":434},[394,1306,1307,1309,1312,1315,1317,1320,1322,1324,1326],{"class":396,"line":589},[394,1308,615],{"class":400},[394,1310,1311],{"class":441}," function",[394,1313,1314],{"class":482}," createMyAdapter",[394,1316,487],{"class":407},[394,1318,1319],{"class":457},"config",[394,1321,461],{"class":407},[394,1323,1266],{"class":464},[394,1325,467],{"class":407},[394,1327,473],{"class":407},[394,1329,1330,1333,1336,1338,1341,1343,1346,1349,1351,1354],{"class":396,"line":1016},[394,1331,1332],{"class":441},"  const",[394,1334,1335],{"class":411}," endpoint",[394,1337,738],{"class":407},[394,1339,1340],{"class":411}," config",[394,1342,561],{"class":407},[394,1344,1345],{"class":411},"endpoint",[394,1347,1348],{"class":407}," ??",[394,1350,421],{"class":407},[394,1352,1353],{"class":424},"https:\u002F\u002Fapi.myservice.com\u002Fingest",[394,1355,428],{"class":407},[394,1357,1358,1360,1363,1365,1367,1369,1372,1374],{"class":396,"line":1022},[394,1359,1332],{"class":441},[394,1361,1362],{"class":411}," timeout",[394,1364,738],{"class":407},[394,1366,1340],{"class":411},[394,1368,561],{"class":407},[394,1370,1371],{"class":411},"timeout",[394,1373,1348],{"class":407},[394,1375,1377],{"class":1376},"sbssI"," 5000\n",[394,1379,1380],{"class":396,"line":1027},[394,1381,435],{"emptyLinePlaceholder":434},[394,1383,1384,1387,1389,1391,1393,1395,1397,1399,1401],{"class":396,"line":1033},[394,1385,1386],{"class":400},"  return",[394,1388,451],{"class":441},[394,1390,454],{"class":407},[394,1392,458],{"class":457},[394,1394,461],{"class":407},[394,1396,412],{"class":464},[394,1398,467],{"class":407},[394,1400,470],{"class":441},[394,1402,473],{"class":407},[394,1404,1405,1408,1411,1413,1416,1419],{"class":396,"line":1058},[394,1406,1407],{"class":441},"    const",[394,1409,1410],{"class":411}," controller",[394,1412,738],{"class":407},[394,1414,1415],{"class":407}," new",[394,1417,1418],{"class":482}," AbortController",[394,1420,1421],{"class":486},"()\n",[394,1423,1424,1426,1429,1431,1434,1436,1439,1441,1443,1445,1448,1450,1452,1454],{"class":396,"line":1063},[394,1425,1407],{"class":441},[394,1427,1428],{"class":411}," timeoutId",[394,1430,738],{"class":407},[394,1432,1433],{"class":482}," setTimeout",[394,1435,487],{"class":486},[394,1437,1438],{"class":407},"()",[394,1440,470],{"class":441},[394,1442,1410],{"class":411},[394,1444,561],{"class":407},[394,1446,1447],{"class":482},"abort",[394,1449,1438],{"class":486},[394,1451,498],{"class":407},[394,1453,1362],{"class":411},[394,1455,586],{"class":486},[394,1457,1458],{"class":396,"line":1068},[394,1459,435],{"emptyLinePlaceholder":434},[394,1461,1462,1465],{"class":396,"line":1078},[394,1463,1464],{"class":400},"    try",[394,1466,473],{"class":407},[394,1468,1469,1472,1475,1477,1480,1482,1484,1486,1488],{"class":396,"line":1088},[394,1470,1471],{"class":441},"      const",[394,1473,1474],{"class":411}," response",[394,1476,738],{"class":407},[394,1478,1479],{"class":400}," await",[394,1481,483],{"class":482},[394,1483,487],{"class":486},[394,1485,1345],{"class":411},[394,1487,498],{"class":407},[394,1489,473],{"class":407},[394,1491,1492,1495,1497,1499,1501,1503],{"class":396,"line":1131},[394,1493,1494],{"class":486},"        method",[394,1496,461],{"class":407},[394,1498,421],{"class":407},[394,1500,513],{"class":424},[394,1502,490],{"class":407},[394,1504,518],{"class":407},[394,1506,1507,1510,1512],{"class":396,"line":1140},[394,1508,1509],{"class":486},"        headers",[394,1511,461],{"class":407},[394,1513,473],{"class":407},[394,1515,1516,1519,1521,1523,1525,1527,1529,1531],{"class":396,"line":1150},[394,1517,1518],{"class":407},"          '",[394,1520,533],{"class":486},[394,1522,490],{"class":407},[394,1524,461],{"class":407},[394,1526,421],{"class":407},[394,1528,542],{"class":424},[394,1530,490],{"class":407},[394,1532,518],{"class":407},[394,1534,1535,1537,1540,1542,1544,1546,1548,1551],{"class":396,"line":1160},[394,1536,1518],{"class":407},[394,1538,1539],{"class":486},"X-API-Key",[394,1541,490],{"class":407},[394,1543,461],{"class":407},[394,1545,1340],{"class":411},[394,1547,561],{"class":407},[394,1549,1550],{"class":411},"apiKey",[394,1552,518],{"class":407},[394,1554,1555],{"class":396,"line":1170},[394,1556,1557],{"class":407},"        },\n",[394,1559,1560,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581],{"class":396,"line":1180},[394,1561,1562],{"class":486},"        body",[394,1564,461],{"class":407},[394,1566,558],{"class":411},[394,1568,561],{"class":407},[394,1570,564],{"class":482},[394,1572,487],{"class":486},[394,1574,458],{"class":411},[394,1576,561],{"class":407},[394,1578,573],{"class":411},[394,1580,467],{"class":486},[394,1582,518],{"class":407},[394,1584,1585,1588,1590,1592,1594,1597],{"class":396,"line":1190},[394,1586,1587],{"class":486},"        signal",[394,1589,461],{"class":407},[394,1591,1410],{"class":411},[394,1593,561],{"class":407},[394,1595,1596],{"class":411},"signal",[394,1598,518],{"class":407},[394,1600,1601,1604],{"class":396,"line":1196},[394,1602,1603],{"class":407},"      }",[394,1605,586],{"class":486},[394,1607,1608],{"class":396,"line":1217},[394,1609,435],{"emptyLinePlaceholder":434},[394,1611,1613,1616,1618,1621,1624,1626,1629,1632],{"class":396,"line":1612},28,[394,1614,1615],{"class":400},"      if",[394,1617,454],{"class":486},[394,1619,1620],{"class":407},"!",[394,1622,1623],{"class":411},"response",[394,1625,561],{"class":407},[394,1627,1628],{"class":411},"ok",[394,1630,1631],{"class":486},") ",[394,1633,745],{"class":407},[394,1635,1637,1640,1642,1644,1646,1649,1652,1655,1657,1659,1662,1665],{"class":396,"line":1636},29,[394,1638,1639],{"class":411},"        console",[394,1641,561],{"class":407},[394,1643,1126],{"class":482},[394,1645,487],{"class":486},[394,1647,1648],{"class":407},"`",[394,1650,1651],{"class":424},"[my-adapter] Failed: ",[394,1653,1654],{"class":407},"${",[394,1656,1623],{"class":411},[394,1658,561],{"class":407},[394,1660,1661],{"class":411},"status",[394,1663,1664],{"class":407},"}`",[394,1666,586],{"class":486},[394,1668,1670],{"class":396,"line":1669},30,[394,1671,1672],{"class":407},"      }\n",[394,1674,1676,1679,1682,1684,1686,1688],{"class":396,"line":1675},31,[394,1677,1678],{"class":407},"    }",[394,1680,1681],{"class":400}," catch",[394,1683,454],{"class":486},[394,1685,1126],{"class":411},[394,1687,1631],{"class":486},[394,1689,745],{"class":407},[394,1691,1693,1695,1697,1699,1702,1705,1708,1711,1713,1716,1719,1721,1724,1726,1728],{"class":396,"line":1692},32,[394,1694,1615],{"class":400},[394,1696,454],{"class":486},[394,1698,1126],{"class":411},[394,1700,1701],{"class":407}," instanceof",[394,1703,1704],{"class":464}," Error",[394,1706,1707],{"class":407}," &&",[394,1709,1710],{"class":411}," error",[394,1712,561],{"class":407},[394,1714,1715],{"class":411},"name",[394,1717,1718],{"class":407}," ===",[394,1720,421],{"class":407},[394,1722,1723],{"class":424},"AbortError",[394,1725,490],{"class":407},[394,1727,1631],{"class":486},[394,1729,745],{"class":407},[394,1731,1733,1735,1737,1739,1741,1743,1746,1748],{"class":396,"line":1732},33,[394,1734,1639],{"class":411},[394,1736,561],{"class":407},[394,1738,1126],{"class":482},[394,1740,487],{"class":486},[394,1742,490],{"class":407},[394,1744,1745],{"class":424},"[my-adapter] Request timed out",[394,1747,490],{"class":407},[394,1749,586],{"class":486},[394,1751,1753,1755,1758],{"class":396,"line":1752},34,[394,1754,1603],{"class":407},[394,1756,1757],{"class":400}," else",[394,1759,473],{"class":407},[394,1761,1763,1765,1767,1769,1771,1773,1776,1778,1780,1782],{"class":396,"line":1762},35,[394,1764,1639],{"class":411},[394,1766,561],{"class":407},[394,1768,1126],{"class":482},[394,1770,487],{"class":486},[394,1772,490],{"class":407},[394,1774,1775],{"class":424},"[my-adapter] Error:",[394,1777,490],{"class":407},[394,1779,498],{"class":407},[394,1781,1710],{"class":411},[394,1783,586],{"class":486},[394,1785,1787],{"class":396,"line":1786},36,[394,1788,1672],{"class":407},[394,1790,1792,1794,1797],{"class":396,"line":1791},37,[394,1793,1678],{"class":407},[394,1795,1796],{"class":400}," finally",[394,1798,473],{"class":407},[394,1800,1802,1805,1807,1810],{"class":396,"line":1801},38,[394,1803,1804],{"class":482},"      clearTimeout",[394,1806,487],{"class":486},[394,1808,1809],{"class":411},"timeoutId",[394,1811,586],{"class":486},[394,1813,1815],{"class":396,"line":1814},39,[394,1816,1817],{"class":407},"    }\n",[394,1819,1821],{"class":396,"line":1820},40,[394,1822,1019],{"class":407},[394,1824,1826],{"class":396,"line":1825},41,[394,1827,592],{"class":407},[314,1829,1830],{},"Then pass the adapter to your framework like any other drain:",[384,1832,1834],{"className":386,"code":1833,"filename":1230,"language":389,"meta":390,"style":390},"const drain = createMyAdapter({\n  apiKey: process.env.MY_SERVICE_API_KEY!,\n})\n",[318,1835,1836,1850,1872],{"__ignoreMap":390},[394,1837,1838,1840,1842,1844,1846,1848],{"class":396,"line":397},[394,1839,442],{"class":441},[394,1841,445],{"class":411},[394,1843,448],{"class":407},[394,1845,1314],{"class":482},[394,1847,487],{"class":411},[394,1849,745],{"class":407},[394,1851,1852,1854,1856,1859,1861,1864,1866,1869],{"class":396,"line":431},[394,1853,1273],{"class":486},[394,1855,461],{"class":407},[394,1857,1858],{"class":411}," process",[394,1860,561],{"class":407},[394,1862,1863],{"class":411},"env",[394,1865,561],{"class":407},[394,1867,1868],{"class":411},"MY_SERVICE_API_KEY",[394,1870,1871],{"class":407},"!,\n",[394,1873,1874,1876],{"class":396,"line":438},[394,1875,670],{"class":407},[394,1877,586],{"class":411},[373,1879,1881],{"id":1880},"reading-configuration","Reading Configuration",[314,1883,1884],{},"The recommended pattern is: overrides > environment variables. If you also need Nuxt\u002FNitro runtimeConfig support, add it as a fallback:",[384,1886,1888],{"className":386,"code":1887,"filename":1230,"language":389,"meta":390,"style":390},"export function createMyAdapter(overrides?: Partial\u003CMyAdapterConfig>) {\n  return async (ctx: DrainContext) => {\n    const config = {\n      apiKey: overrides?.apiKey ?? process.env.MY_SERVICE_API_KEY,\n      endpoint: overrides?.endpoint ?? process.env.MY_SERVICE_ENDPOINT,\n    }\n\n    if (!config.apiKey) {\n      console.error('[my-adapter] Missing API key')\n      return\n    }\n\n    \u002F\u002F Send the event...\n  }\n}\n",[318,1889,1890,1918,1938,1948,1977,2005,2009,2013,2032,2052,2057,2061,2065,2070,2074],{"__ignoreMap":390},[394,1891,1892,1894,1896,1898,1900,1903,1905,1908,1910,1913,1916],{"class":396,"line":397},[394,1893,615],{"class":400},[394,1895,1311],{"class":441},[394,1897,1314],{"class":482},[394,1899,487],{"class":407},[394,1901,1902],{"class":457},"overrides",[394,1904,984],{"class":407},[394,1906,1907],{"class":464}," Partial",[394,1909,1044],{"class":407},[394,1911,1912],{"class":464},"MyAdapterConfig",[394,1914,1915],{"class":407},">)",[394,1917,473],{"class":407},[394,1919,1920,1922,1924,1926,1928,1930,1932,1934,1936],{"class":396,"line":431},[394,1921,1386],{"class":400},[394,1923,451],{"class":441},[394,1925,454],{"class":407},[394,1927,458],{"class":457},[394,1929,461],{"class":407},[394,1931,412],{"class":464},[394,1933,467],{"class":407},[394,1935,470],{"class":441},[394,1937,473],{"class":407},[394,1939,1940,1942,1944,1946],{"class":396,"line":438},[394,1941,1407],{"class":441},[394,1943,1340],{"class":411},[394,1945,738],{"class":407},[394,1947,473],{"class":407},[394,1949,1950,1953,1955,1958,1961,1963,1965,1967,1969,1971,1973,1975],{"class":396,"line":476},[394,1951,1952],{"class":486},"      apiKey",[394,1954,461],{"class":407},[394,1956,1957],{"class":411}," overrides",[394,1959,1960],{"class":407},"?.",[394,1962,1550],{"class":411},[394,1964,1348],{"class":407},[394,1966,1858],{"class":411},[394,1968,561],{"class":407},[394,1970,1863],{"class":411},[394,1972,561],{"class":407},[394,1974,1868],{"class":411},[394,1976,518],{"class":407},[394,1978,1979,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2003],{"class":396,"line":503},[394,1980,1981],{"class":486},"      endpoint",[394,1983,461],{"class":407},[394,1985,1957],{"class":411},[394,1987,1960],{"class":407},[394,1989,1345],{"class":411},[394,1991,1348],{"class":407},[394,1993,1858],{"class":411},[394,1995,561],{"class":407},[394,1997,1863],{"class":411},[394,1999,561],{"class":407},[394,2001,2002],{"class":411},"MY_SERVICE_ENDPOINT",[394,2004,518],{"class":407},[394,2006,2007],{"class":396,"line":521},[394,2008,1817],{"class":407},[394,2010,2011],{"class":396,"line":550},[394,2012,435],{"emptyLinePlaceholder":434},[394,2014,2015,2018,2020,2022,2024,2026,2028,2030],{"class":396,"line":580},[394,2016,2017],{"class":400},"    if",[394,2019,454],{"class":486},[394,2021,1620],{"class":407},[394,2023,1319],{"class":411},[394,2025,561],{"class":407},[394,2027,1550],{"class":411},[394,2029,1631],{"class":486},[394,2031,745],{"class":407},[394,2033,2034,2037,2039,2041,2043,2045,2048,2050],{"class":396,"line":589},[394,2035,2036],{"class":411},"      console",[394,2038,561],{"class":407},[394,2040,1126],{"class":482},[394,2042,487],{"class":486},[394,2044,490],{"class":407},[394,2046,2047],{"class":424},"[my-adapter] Missing API key",[394,2049,490],{"class":407},[394,2051,586],{"class":486},[394,2053,2054],{"class":396,"line":1016},[394,2055,2056],{"class":400},"      return\n",[394,2058,2059],{"class":396,"line":1022},[394,2060,1817],{"class":407},[394,2062,2063],{"class":396,"line":1027},[394,2064,435],{"emptyLinePlaceholder":434},[394,2066,2067],{"class":396,"line":1033},[394,2068,2069],{"class":609},"    \u002F\u002F Send the event...\n",[394,2071,2072],{"class":396,"line":1058},[394,2073,1019],{"class":407},[394,2075,2076],{"class":396,"line":1063},[394,2077,592],{"class":407},[373,2079,2081],{"id":2080},"filtering-events","Filtering Events",[314,2083,2084],{},"Filter which events to send inside the drain function:",[384,2086,2088],{"className":386,"code":2087,"filename":388,"language":389,"meta":390,"style":390},"const drain = async (ctx: DrainContext) => {\n  if (ctx.event.level !== 'error') return\n  if (ctx.request?.path === '\u002Fhealth') return\n  if (ctx.event._sampled === false) return\n\n  await sendToMyService(ctx.event)\n}\n",[318,2089,2090,2114,2146,2177,2204,2208,2225],{"__ignoreMap":390},[394,2091,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112],{"class":396,"line":397},[394,2093,442],{"class":441},[394,2095,445],{"class":411},[394,2097,448],{"class":407},[394,2099,451],{"class":441},[394,2101,454],{"class":407},[394,2103,458],{"class":457},[394,2105,461],{"class":407},[394,2107,412],{"class":464},[394,2109,467],{"class":407},[394,2111,470],{"class":441},[394,2113,473],{"class":407},[394,2115,2116,2119,2121,2123,2125,2127,2129,2132,2135,2137,2139,2141,2143],{"class":396,"line":431},[394,2117,2118],{"class":400},"  if",[394,2120,454],{"class":486},[394,2122,458],{"class":411},[394,2124,561],{"class":407},[394,2126,573],{"class":411},[394,2128,561],{"class":407},[394,2130,2131],{"class":411},"level",[394,2133,2134],{"class":407}," !==",[394,2136,421],{"class":407},[394,2138,1126],{"class":424},[394,2140,490],{"class":407},[394,2142,1631],{"class":486},[394,2144,2145],{"class":400},"return\n",[394,2147,2148,2150,2152,2154,2156,2159,2161,2164,2166,2168,2171,2173,2175],{"class":396,"line":438},[394,2149,2118],{"class":400},[394,2151,454],{"class":486},[394,2153,458],{"class":411},[394,2155,561],{"class":407},[394,2157,2158],{"class":411},"request",[394,2160,1960],{"class":407},[394,2162,2163],{"class":411},"path",[394,2165,1718],{"class":407},[394,2167,421],{"class":407},[394,2169,2170],{"class":424},"\u002Fhealth",[394,2172,490],{"class":407},[394,2174,1631],{"class":486},[394,2176,2145],{"class":400},[394,2178,2179,2181,2183,2185,2187,2189,2191,2194,2196,2200,2202],{"class":396,"line":476},[394,2180,2118],{"class":400},[394,2182,454],{"class":486},[394,2184,458],{"class":411},[394,2186,561],{"class":407},[394,2188,573],{"class":411},[394,2190,561],{"class":407},[394,2192,2193],{"class":411},"_sampled",[394,2195,1718],{"class":407},[394,2197,2199],{"class":2198},"sfNiH"," false",[394,2201,1631],{"class":486},[394,2203,2145],{"class":400},[394,2205,2206],{"class":396,"line":503},[394,2207,435],{"emptyLinePlaceholder":434},[394,2209,2210,2212,2215,2217,2219,2221,2223],{"class":396,"line":521},[394,2211,479],{"class":400},[394,2213,2214],{"class":482}," sendToMyService",[394,2216,487],{"class":486},[394,2218,458],{"class":411},[394,2220,561],{"class":407},[394,2222,573],{"class":411},[394,2224,586],{"class":486},[394,2226,2227],{"class":396,"line":550},[394,2228,592],{"class":407},[373,2230,2232],{"id":2231},"transforming-events","Transforming Events",[314,2234,2235],{},"Transform events before sending:",[384,2237,2239],{"className":386,"code":2238,"filename":388,"language":389,"meta":390,"style":390},"const drain = async (ctx: DrainContext) => {\n  const payload = {\n    ts: new Date(ctx.event.timestamp).getTime(),\n    severity: ctx.event.level.toUpperCase(),\n    message: JSON.stringify(ctx.event),\n    labels: {\n      service: ctx.event.service,\n      env: ctx.event.environment,\n    },\n    attributes: {\n      method: ctx.event.method,\n      path: ctx.event.path,\n      status: ctx.event.status,\n      duration: ctx.event.duration,\n    },\n  }\n\n  await fetch('https:\u002F\u002Flogs.example.com\u002Fv1\u002Fpush', {\n    method: 'POST',\n    body: JSON.stringify(payload),\n  })\n}\n",[318,2240,2241,2265,2276,2312,2339,2364,2373,2393,2413,2418,2427,2447,2466,2485,2505,2509,2513,2517,2536,2550,2571,2577],{"__ignoreMap":390},[394,2242,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263],{"class":396,"line":397},[394,2244,442],{"class":441},[394,2246,445],{"class":411},[394,2248,448],{"class":407},[394,2250,451],{"class":441},[394,2252,454],{"class":407},[394,2254,458],{"class":457},[394,2256,461],{"class":407},[394,2258,412],{"class":464},[394,2260,467],{"class":407},[394,2262,470],{"class":441},[394,2264,473],{"class":407},[394,2266,2267,2269,2272,2274],{"class":396,"line":431},[394,2268,1332],{"class":441},[394,2270,2271],{"class":411}," payload",[394,2273,738],{"class":407},[394,2275,473],{"class":407},[394,2277,2278,2281,2283,2285,2288,2290,2292,2294,2296,2298,2301,2303,2305,2308,2310],{"class":396,"line":438},[394,2279,2280],{"class":486},"    ts",[394,2282,461],{"class":407},[394,2284,1415],{"class":407},[394,2286,2287],{"class":482}," Date",[394,2289,487],{"class":486},[394,2291,458],{"class":411},[394,2293,561],{"class":407},[394,2295,573],{"class":411},[394,2297,561],{"class":407},[394,2299,2300],{"class":411},"timestamp",[394,2302,467],{"class":486},[394,2304,561],{"class":407},[394,2306,2307],{"class":482},"getTime",[394,2309,1438],{"class":486},[394,2311,518],{"class":407},[394,2313,2314,2317,2319,2322,2324,2326,2328,2330,2332,2335,2337],{"class":396,"line":476},[394,2315,2316],{"class":486},"    severity",[394,2318,461],{"class":407},[394,2320,2321],{"class":411}," ctx",[394,2323,561],{"class":407},[394,2325,573],{"class":411},[394,2327,561],{"class":407},[394,2329,2131],{"class":411},[394,2331,561],{"class":407},[394,2333,2334],{"class":482},"toUpperCase",[394,2336,1438],{"class":486},[394,2338,518],{"class":407},[394,2340,2341,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":396,"line":503},[394,2342,2343],{"class":486},"    message",[394,2345,461],{"class":407},[394,2347,558],{"class":411},[394,2349,561],{"class":407},[394,2351,564],{"class":482},[394,2353,487],{"class":486},[394,2355,458],{"class":411},[394,2357,561],{"class":407},[394,2359,573],{"class":411},[394,2361,467],{"class":486},[394,2363,518],{"class":407},[394,2365,2366,2369,2371],{"class":396,"line":521},[394,2367,2368],{"class":486},"    labels",[394,2370,461],{"class":407},[394,2372,473],{"class":407},[394,2374,2375,2378,2380,2382,2384,2386,2388,2391],{"class":396,"line":550},[394,2376,2377],{"class":486},"      service",[394,2379,461],{"class":407},[394,2381,2321],{"class":411},[394,2383,561],{"class":407},[394,2385,573],{"class":411},[394,2387,561],{"class":407},[394,2389,2390],{"class":411},"service",[394,2392,518],{"class":407},[394,2394,2395,2398,2400,2402,2404,2406,2408,2411],{"class":396,"line":580},[394,2396,2397],{"class":486},"      env",[394,2399,461],{"class":407},[394,2401,2321],{"class":411},[394,2403,561],{"class":407},[394,2405,573],{"class":411},[394,2407,561],{"class":407},[394,2409,2410],{"class":411},"environment",[394,2412,518],{"class":407},[394,2414,2415],{"class":396,"line":589},[394,2416,2417],{"class":407},"    },\n",[394,2419,2420,2423,2425],{"class":396,"line":1016},[394,2421,2422],{"class":486},"    attributes",[394,2424,461],{"class":407},[394,2426,473],{"class":407},[394,2428,2429,2432,2434,2436,2438,2440,2442,2445],{"class":396,"line":1022},[394,2430,2431],{"class":486},"      method",[394,2433,461],{"class":407},[394,2435,2321],{"class":411},[394,2437,561],{"class":407},[394,2439,573],{"class":411},[394,2441,561],{"class":407},[394,2443,2444],{"class":411},"method",[394,2446,518],{"class":407},[394,2448,2449,2452,2454,2456,2458,2460,2462,2464],{"class":396,"line":1027},[394,2450,2451],{"class":486},"      path",[394,2453,461],{"class":407},[394,2455,2321],{"class":411},[394,2457,561],{"class":407},[394,2459,573],{"class":411},[394,2461,561],{"class":407},[394,2463,2163],{"class":411},[394,2465,518],{"class":407},[394,2467,2468,2471,2473,2475,2477,2479,2481,2483],{"class":396,"line":1033},[394,2469,2470],{"class":486},"      status",[394,2472,461],{"class":407},[394,2474,2321],{"class":411},[394,2476,561],{"class":407},[394,2478,573],{"class":411},[394,2480,561],{"class":407},[394,2482,1661],{"class":411},[394,2484,518],{"class":407},[394,2486,2487,2490,2492,2494,2496,2498,2500,2503],{"class":396,"line":1058},[394,2488,2489],{"class":486},"      duration",[394,2491,461],{"class":407},[394,2493,2321],{"class":411},[394,2495,561],{"class":407},[394,2497,573],{"class":411},[394,2499,561],{"class":407},[394,2501,2502],{"class":411},"duration",[394,2504,518],{"class":407},[394,2506,2507],{"class":396,"line":1063},[394,2508,2417],{"class":407},[394,2510,2511],{"class":396,"line":1068},[394,2512,1019],{"class":407},[394,2514,2515],{"class":396,"line":1078},[394,2516,435],{"emptyLinePlaceholder":434},[394,2518,2519,2521,2523,2525,2527,2530,2532,2534],{"class":396,"line":1088},[394,2520,479],{"class":400},[394,2522,483],{"class":482},[394,2524,487],{"class":486},[394,2526,490],{"class":407},[394,2528,2529],{"class":424},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fpush",[394,2531,490],{"class":407},[394,2533,498],{"class":407},[394,2535,473],{"class":407},[394,2537,2538,2540,2542,2544,2546,2548],{"class":396,"line":1131},[394,2539,506],{"class":486},[394,2541,461],{"class":407},[394,2543,421],{"class":407},[394,2545,513],{"class":424},[394,2547,490],{"class":407},[394,2549,518],{"class":407},[394,2551,2552,2554,2556,2558,2560,2562,2564,2567,2569],{"class":396,"line":1140},[394,2553,553],{"class":486},[394,2555,461],{"class":407},[394,2557,558],{"class":411},[394,2559,561],{"class":407},[394,2561,564],{"class":482},[394,2563,487],{"class":486},[394,2565,2566],{"class":411},"payload",[394,2568,467],{"class":486},[394,2570,518],{"class":407},[394,2572,2573,2575],{"class":396,"line":1150},[394,2574,583],{"class":407},[394,2576,586],{"class":486},[394,2578,2579],{"class":396,"line":1160},[394,2580,592],{"class":407},[373,2582,2584],{"id":2583},"batching","Batching",[314,2586,2587,2588,2591],{},"For high-throughput scenarios, use the ",[362,2589,2590],{"href":279},"Drain Pipeline"," to batch events, retry on failure, and handle buffer overflow automatically:",[384,2593,2595],{"className":386,"code":2594,"filename":388,"language":389,"meta":390,"style":390},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 5000 },\n})\n\nconst drain = pipeline(async (batch) => {\n  await fetch('https:\u002F\u002Fapi.example.com\u002Flogs\u002Fbatch', {\n    method: 'POST',\n    body: JSON.stringify(batch.map(ctx => ctx.event)),\n  })\n})\n",[318,2596,2597,2617,2637,2641,2663,2692,2698,2702,2729,2748,2762,2800,2806],{"__ignoreMap":390},[394,2598,2599,2601,2603,2605,2607,2609,2611,2613,2615],{"class":396,"line":397},[394,2600,401],{"class":400},[394,2602,404],{"class":400},[394,2604,408],{"class":407},[394,2606,412],{"class":411},[394,2608,415],{"class":407},[394,2610,418],{"class":400},[394,2612,421],{"class":407},[394,2614,425],{"class":424},[394,2616,428],{"class":407},[394,2618,2619,2621,2623,2626,2628,2630,2632,2635],{"class":396,"line":431},[394,2620,401],{"class":400},[394,2622,408],{"class":407},[394,2624,2625],{"class":411}," createDrainPipeline",[394,2627,415],{"class":407},[394,2629,418],{"class":400},[394,2631,421],{"class":407},[394,2633,2634],{"class":424},"evlog\u002Fpipeline",[394,2636,428],{"class":407},[394,2638,2639],{"class":396,"line":438},[394,2640,435],{"emptyLinePlaceholder":434},[394,2642,2643,2645,2648,2650,2652,2654,2656,2659,2661],{"class":396,"line":476},[394,2644,442],{"class":441},[394,2646,2647],{"class":411}," pipeline ",[394,2649,448],{"class":407},[394,2651,2625],{"class":482},[394,2653,1044],{"class":407},[394,2655,320],{"class":464},[394,2657,2658],{"class":407},">",[394,2660,487],{"class":411},[394,2662,745],{"class":407},[394,2664,2665,2668,2670,2672,2675,2677,2680,2682,2685,2687,2690],{"class":396,"line":503},[394,2666,2667],{"class":486},"  batch",[394,2669,461],{"class":407},[394,2671,408],{"class":407},[394,2673,2674],{"class":486}," size",[394,2676,461],{"class":407},[394,2678,2679],{"class":1376}," 100",[394,2681,498],{"class":407},[394,2683,2684],{"class":486}," intervalMs",[394,2686,461],{"class":407},[394,2688,2689],{"class":1376}," 5000",[394,2691,547],{"class":407},[394,2693,2694,2696],{"class":396,"line":521},[394,2695,670],{"class":407},[394,2697,586],{"class":411},[394,2699,2700],{"class":396,"line":550},[394,2701,435],{"emptyLinePlaceholder":434},[394,2703,2704,2706,2708,2710,2713,2715,2718,2720,2723,2725,2727],{"class":396,"line":580},[394,2705,442],{"class":441},[394,2707,445],{"class":411},[394,2709,448],{"class":407},[394,2711,2712],{"class":482}," pipeline",[394,2714,487],{"class":411},[394,2716,2717],{"class":441},"async",[394,2719,454],{"class":407},[394,2721,2722],{"class":457},"batch",[394,2724,467],{"class":407},[394,2726,470],{"class":441},[394,2728,473],{"class":407},[394,2730,2731,2733,2735,2737,2739,2742,2744,2746],{"class":396,"line":589},[394,2732,479],{"class":400},[394,2734,483],{"class":482},[394,2736,487],{"class":486},[394,2738,490],{"class":407},[394,2740,2741],{"class":424},"https:\u002F\u002Fapi.example.com\u002Flogs\u002Fbatch",[394,2743,490],{"class":407},[394,2745,498],{"class":407},[394,2747,473],{"class":407},[394,2749,2750,2752,2754,2756,2758,2760],{"class":396,"line":1016},[394,2751,506],{"class":486},[394,2753,461],{"class":407},[394,2755,421],{"class":407},[394,2757,513],{"class":424},[394,2759,490],{"class":407},[394,2761,518],{"class":407},[394,2763,2764,2766,2768,2770,2772,2774,2776,2778,2780,2783,2785,2787,2789,2791,2793,2795,2798],{"class":396,"line":1022},[394,2765,553],{"class":486},[394,2767,461],{"class":407},[394,2769,558],{"class":411},[394,2771,561],{"class":407},[394,2773,564],{"class":482},[394,2775,487],{"class":486},[394,2777,2722],{"class":411},[394,2779,561],{"class":407},[394,2781,2782],{"class":482},"map",[394,2784,487],{"class":486},[394,2786,458],{"class":457},[394,2788,470],{"class":441},[394,2790,2321],{"class":411},[394,2792,561],{"class":407},[394,2794,573],{"class":411},[394,2796,2797],{"class":486},"))",[394,2799,518],{"class":407},[394,2801,2802,2804],{"class":396,"line":1027},[394,2803,583],{"class":407},[394,2805,586],{"class":486},[394,2807,2808,2810],{"class":396,"line":1033},[394,2809,670],{"class":407},[394,2811,586],{"class":411},[2813,2814,2816,2817,2820],"callout",{"color":1108,"icon":2815},"i-lucide-arrow-right","See the ",[362,2818,2819],{"href":279},"Pipeline documentation"," for the full options reference, retry strategies, and buffer overflow handling.",[373,2822,2824],{"id":2823},"error-handling-best-practices","Error Handling Best Practices",[2826,2827,2828,2835,2845,2851],"ol",{},[334,2829,2830,2834],{},[2831,2832,2833],"strong",{},"Never throw errors"," - The drain should not crash your app",[334,2836,2837,2840,2841,2844],{},[2831,2838,2839],{},"Log failures silently"," - Use ",[318,2842,2843],{},"console.error"," for debugging",[334,2846,2847,2850],{},[2831,2848,2849],{},"Use timeouts"," - Prevent hanging requests",[334,2852,2853,2856],{},[2831,2854,2855],{},"Graceful degradation"," - Skip sending if config is missing",[384,2858,2861],{"className":386,"code":2859,"filename":2860,"language":389,"meta":390,"style":390},"export function createRobustAdapter(config: Config) {\n  return async (ctx: DrainContext) => {\n    \u002F\u002F Validate config\n    if (!config.apiKey) {\n      console.error('[adapter] Missing API key, skipping')\n      return\n    }\n\n    const controller = new AbortController()\n    const timeoutId = setTimeout(() => controller.abort(), 5000)\n\n    try {\n      await fetch(config.endpoint, {\n        method: 'POST',\n        body: JSON.stringify(ctx.event),\n        signal: controller.signal,\n      })\n    } catch (error) {\n      \u002F\u002F Log but don't throw\n      console.error('[adapter] Failed to send:', error)\n    } finally {\n      clearTimeout(timeoutId)\n    }\n  }\n}\n","lib\u002Frobust-adapter.ts",[318,2862,2863,2885,2905,2910,2928,2947,2951,2955,2959,2973,3003,3007,3013,3032,3046,3070,3084,3090,3104,3109,3132,3140,3150,3154,3158],{"__ignoreMap":390},[394,2864,2865,2867,2869,2872,2874,2876,2878,2881,2883],{"class":396,"line":397},[394,2866,615],{"class":400},[394,2868,1311],{"class":441},[394,2870,2871],{"class":482}," createRobustAdapter",[394,2873,487],{"class":407},[394,2875,1319],{"class":457},[394,2877,461],{"class":407},[394,2879,2880],{"class":464}," Config",[394,2882,467],{"class":407},[394,2884,473],{"class":407},[394,2886,2887,2889,2891,2893,2895,2897,2899,2901,2903],{"class":396,"line":431},[394,2888,1386],{"class":400},[394,2890,451],{"class":441},[394,2892,454],{"class":407},[394,2894,458],{"class":457},[394,2896,461],{"class":407},[394,2898,412],{"class":464},[394,2900,467],{"class":407},[394,2902,470],{"class":441},[394,2904,473],{"class":407},[394,2906,2907],{"class":396,"line":438},[394,2908,2909],{"class":609},"    \u002F\u002F Validate config\n",[394,2911,2912,2914,2916,2918,2920,2922,2924,2926],{"class":396,"line":476},[394,2913,2017],{"class":400},[394,2915,454],{"class":486},[394,2917,1620],{"class":407},[394,2919,1319],{"class":411},[394,2921,561],{"class":407},[394,2923,1550],{"class":411},[394,2925,1631],{"class":486},[394,2927,745],{"class":407},[394,2929,2930,2932,2934,2936,2938,2940,2943,2945],{"class":396,"line":503},[394,2931,2036],{"class":411},[394,2933,561],{"class":407},[394,2935,1126],{"class":482},[394,2937,487],{"class":486},[394,2939,490],{"class":407},[394,2941,2942],{"class":424},"[adapter] Missing API key, skipping",[394,2944,490],{"class":407},[394,2946,586],{"class":486},[394,2948,2949],{"class":396,"line":521},[394,2950,2056],{"class":400},[394,2952,2953],{"class":396,"line":550},[394,2954,1817],{"class":407},[394,2956,2957],{"class":396,"line":580},[394,2958,435],{"emptyLinePlaceholder":434},[394,2960,2961,2963,2965,2967,2969,2971],{"class":396,"line":589},[394,2962,1407],{"class":441},[394,2964,1410],{"class":411},[394,2966,738],{"class":407},[394,2968,1415],{"class":407},[394,2970,1418],{"class":482},[394,2972,1421],{"class":486},[394,2974,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001],{"class":396,"line":1016},[394,2976,1407],{"class":441},[394,2978,1428],{"class":411},[394,2980,738],{"class":407},[394,2982,1433],{"class":482},[394,2984,487],{"class":486},[394,2986,1438],{"class":407},[394,2988,470],{"class":441},[394,2990,1410],{"class":411},[394,2992,561],{"class":407},[394,2994,1447],{"class":482},[394,2996,1438],{"class":486},[394,2998,498],{"class":407},[394,3000,2689],{"class":1376},[394,3002,586],{"class":486},[394,3004,3005],{"class":396,"line":1022},[394,3006,435],{"emptyLinePlaceholder":434},[394,3008,3009,3011],{"class":396,"line":1027},[394,3010,1464],{"class":400},[394,3012,473],{"class":407},[394,3014,3015,3018,3020,3022,3024,3026,3028,3030],{"class":396,"line":1033},[394,3016,3017],{"class":400},"      await",[394,3019,483],{"class":482},[394,3021,487],{"class":486},[394,3023,1319],{"class":411},[394,3025,561],{"class":407},[394,3027,1345],{"class":411},[394,3029,498],{"class":407},[394,3031,473],{"class":407},[394,3033,3034,3036,3038,3040,3042,3044],{"class":396,"line":1058},[394,3035,1494],{"class":486},[394,3037,461],{"class":407},[394,3039,421],{"class":407},[394,3041,513],{"class":424},[394,3043,490],{"class":407},[394,3045,518],{"class":407},[394,3047,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068],{"class":396,"line":1063},[394,3049,1562],{"class":486},[394,3051,461],{"class":407},[394,3053,558],{"class":411},[394,3055,561],{"class":407},[394,3057,564],{"class":482},[394,3059,487],{"class":486},[394,3061,458],{"class":411},[394,3063,561],{"class":407},[394,3065,573],{"class":411},[394,3067,467],{"class":486},[394,3069,518],{"class":407},[394,3071,3072,3074,3076,3078,3080,3082],{"class":396,"line":1068},[394,3073,1587],{"class":486},[394,3075,461],{"class":407},[394,3077,1410],{"class":411},[394,3079,561],{"class":407},[394,3081,1596],{"class":411},[394,3083,518],{"class":407},[394,3085,3086,3088],{"class":396,"line":1078},[394,3087,1603],{"class":407},[394,3089,586],{"class":486},[394,3091,3092,3094,3096,3098,3100,3102],{"class":396,"line":1088},[394,3093,1678],{"class":407},[394,3095,1681],{"class":400},[394,3097,454],{"class":486},[394,3099,1126],{"class":411},[394,3101,1631],{"class":486},[394,3103,745],{"class":407},[394,3105,3106],{"class":396,"line":1131},[394,3107,3108],{"class":609},"      \u002F\u002F Log but don't throw\n",[394,3110,3111,3113,3115,3117,3119,3121,3124,3126,3128,3130],{"class":396,"line":1140},[394,3112,2036],{"class":411},[394,3114,561],{"class":407},[394,3116,1126],{"class":482},[394,3118,487],{"class":486},[394,3120,490],{"class":407},[394,3122,3123],{"class":424},"[adapter] Failed to send:",[394,3125,490],{"class":407},[394,3127,498],{"class":407},[394,3129,1710],{"class":411},[394,3131,586],{"class":486},[394,3133,3134,3136,3138],{"class":396,"line":1150},[394,3135,1678],{"class":407},[394,3137,1796],{"class":400},[394,3139,473],{"class":407},[394,3141,3142,3144,3146,3148],{"class":396,"line":1160},[394,3143,1804],{"class":482},[394,3145,487],{"class":486},[394,3147,1809],{"class":411},[394,3149,586],{"class":486},[394,3151,3152],{"class":396,"line":1170},[394,3153,1817],{"class":407},[394,3155,3156],{"class":396,"line":1180},[394,3157,1019],{"class":407},[394,3159,3160],{"class":396,"line":1190},[394,3161,592],{"class":407},[373,3163,3165],{"id":3164},"next-steps","Next Steps",[331,3167,3168,3174,3180,3186],{},[334,3169,3170,3173],{},[362,3171,3172],{"href":224},"Axiom Adapter"," - See a production-ready adapter implementation",[334,3175,3176,3179],{},[362,3177,3178],{"href":229},"OTLP Adapter"," - OpenTelemetry Protocol adapter",[334,3181,3182,3185],{},[362,3183,3184],{"href":234},"PostHog Adapter"," - PostHog product analytics adapter",[334,3187,3188,3190],{},[362,3189,106],{"href":107}," - Security and production tips",[3192,3193,3194],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":390,"searchDepth":431,"depth":431,"links":3196},[3197,3198,3199,3200,3201,3202,3203,3204,3205],{"id":375,"depth":431,"text":376},{"id":936,"depth":431,"text":937},{"id":1222,"depth":431,"text":1223},{"id":1880,"depth":431,"text":1881},{"id":2080,"depth":431,"text":2081},{"id":2231,"depth":431,"text":2232},{"id":2583,"depth":431,"text":2584},{"id":2823,"depth":431,"text":2824},{"id":3164,"depth":431,"text":3165},"Build your own adapter to send logs to any destination. Factory patterns, batching, filtering, and error handling best practices.","md",[3209,3212],{"label":3172,"icon":226,"to":224,"color":3210,"variant":3211},"neutral","subtle",{"label":106,"icon":79,"to":107,"color":3210,"variant":3211},{},{"icon":291},{"title":288,"description":3206},"3WoaynmCR740vOVWcugO03SAQuNVvCV1sPDoXvHhNIU",[3218,3220],{"title":283,"path":284,"stem":285,"description":3219,"icon":286,"children":-1},"Framework-agnostic HTTP log transport for sending client-side logs to your server via fetch or sendBeacon. Works in the browser or any environment with fetch. Use the `evlog\u002Fhttp` entry point.",{"title":41,"path":298,"stem":299,"description":3221,"icon":28,"children":-1},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Built-in enrichers and custom enricher support.",1777667170504]