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