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