[{"data":1,"prerenderedAt":1304},["ShallowReactive",2],{"navigation_docs":3,"-adapters-overview":191,"-adapters-overview-surround":1299},[4,30,65,115,132,146],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"icon":54},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields","i-simple-icons-typescript",{"title":56,"path":57,"stem":58,"icon":59},"Sampling","/core-concepts/sampling","2.core-concepts/5.sampling","i-lucide-filter",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","/core-concepts/client-logging","2.core-concepts/6.client-logging","i-lucide-monitor",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Adapters","/adapters","3.adapters",[70,75,80,85,90,95,100,105,110],{"title":71,"path":72,"stem":73,"icon":74},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":76,"path":77,"stem":78,"icon":79},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":81,"path":82,"stem":83,"icon":84},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":86,"path":87,"stem":88,"icon":89},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":91,"path":92,"stem":93,"icon":94},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":96,"path":97,"stem":98,"icon":99},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":101,"path":102,"stem":103,"icon":104},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":106,"path":107,"stem":108,"icon":109},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":111,"path":112,"stem":113,"icon":114},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Enrichers","/enrichers","4.enrichers",[120,123,128],{"title":71,"path":121,"stem":122,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":124,"path":125,"stem":126,"icon":127},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":129,"path":130,"stem":131,"icon":104},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":133,"path":134,"stem":135,"children":136,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[137,141],{"title":71,"path":138,"stem":139,"icon":140},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":142,"path":143,"stem":144,"icon":145},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":147,"path":148,"stem":149,"children":150,"page":29},"Examples","/examples","6.examples",[151,156,161,166,171,176,181,186],{"title":152,"path":153,"stem":154,"icon":155},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":157,"path":158,"stem":159,"icon":160},"SvelteKit","/examples/sveltekit","6.examples/2.sveltekit","i-simple-icons-svelte",{"title":162,"path":163,"stem":164,"icon":165},"TanStack Start","/examples/tanstack-start","6.examples/3.tanstack-start","i-custom-tanstack",{"title":167,"path":168,"stem":169,"icon":170},"NestJS","/examples/nestjs","6.examples/4.nestjs","i-simple-icons-nestjs",{"title":172,"path":173,"stem":174,"icon":175},"Express","/examples/express","6.examples/5.express","i-simple-icons-express",{"title":177,"path":178,"stem":179,"icon":180},"Hono","/examples/hono","6.examples/6.hono","i-simple-icons-hono",{"title":182,"path":183,"stem":184,"icon":185},"Fastify","/examples/fastify","6.examples/7.fastify","i-simple-icons-fastify",{"title":187,"path":188,"stem":189,"icon":190},"Elysia","/examples/elysia","6.examples/8.elysia","i-custom-elysia",{"id":192,"title":193,"body":194,"description":1286,"extension":1287,"links":1288,"meta":1295,"navigation":1296,"path":72,"seo":1297,"stem":73,"__hash__":1298},"docs/3.adapters/1.overview.md","Adapters Overview",{"type":195,"value":196,"toc":1278},"minimark",[197,201,206,219,345,358,362,390,394,405,765,778,782,785,970,974,980,1057,1074,1078,1081,1190,1274],[198,199,200],"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.",[202,203,205],"h2",{"id":204},"how-adapters-work","How Adapters Work",[198,207,208,209,213,214,218],{},"Adapters hook into the ",[210,211,212],"code",{},"evlog:drain"," event, which fires after each request completes. The drain runs in ",[215,216,217],"strong",{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[220,221,227],"pre",{"className":222,"code":223,"filename":224,"language":225,"meta":226,"style":226},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createAxiomDrain } from 'evlog/axiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server/plugins/evlog-drain.ts","typescript","",[210,228,229,262,269,301,336],{"__ignoreMap":226},[230,231,234,238,242,246,249,252,255,259],"span",{"class":232,"line":233},"line",1,[230,235,237],{"class":236},"s7zQu","import",[230,239,241],{"class":240},"sMK4o"," {",[230,243,245],{"class":244},"sTEyZ"," createAxiomDrain",[230,247,248],{"class":240}," }",[230,250,251],{"class":236}," from",[230,253,254],{"class":240}," '",[230,256,258],{"class":257},"sfazB","evlog/axiom",[230,260,261],{"class":240},"'\n",[230,263,265],{"class":232,"line":264},2,[230,266,268],{"emptyLinePlaceholder":267},true,"\n",[230,270,272,275,278,282,285,287,291,294,298],{"class":232,"line":271},3,[230,273,274],{"class":236},"export",[230,276,277],{"class":236}," default",[230,279,281],{"class":280},"s2Zo4"," defineNitroPlugin",[230,283,284],{"class":244},"(",[230,286,284],{"class":240},[230,288,290],{"class":289},"sHdIc","nitroApp",[230,292,293],{"class":240},")",[230,295,297],{"class":296},"spNyl"," =>",[230,299,300],{"class":240}," {\n",[230,302,304,307,310,313,315,318,321,324,326,328,331,333],{"class":232,"line":303},4,[230,305,306],{"class":244},"  nitroApp",[230,308,309],{"class":240},".",[230,311,312],{"class":244},"hooks",[230,314,309],{"class":240},[230,316,317],{"class":280},"hook",[230,319,284],{"class":320},"swJcz",[230,322,323],{"class":240},"'",[230,325,212],{"class":257},[230,327,323],{"class":240},[230,329,330],{"class":240},",",[230,332,245],{"class":280},[230,334,335],{"class":320},"())\n",[230,337,339,342],{"class":232,"line":338},5,[230,340,341],{"class":240},"}",[230,343,344],{"class":244},")\n",[346,347,350,353,354,357],"callout",{"color":348,"icon":349},"info","i-lucide-cloud",[215,351,352],{},"Serverless Support:"," On Cloudflare Workers and Vercel Edge, evlog automatically uses ",[210,355,356],{},"waitUntil()"," to ensure drains complete before the runtime terminates. No additional configuration needed.",[202,359,361],{"id":360},"available-adapters","Available Adapters",[363,364,365,369,372,375,378,381,384,387],"card-group",{},[366,367,368],"card",{"icon":79,"title":76,"to":77},"Send logs to Axiom for powerful querying and dashboards.",[366,370,371],{"icon":84,"title":81,"to":82},"OpenTelemetry Protocol for Grafana, Datadog, Honeycomb, and more.",[366,373,374],{"icon":89,"title":86,"to":87},"Send logs to PostHog Logs for structured logging and observability.",[366,376,377],{"icon":94,"title":91,"to":92},"Send structured logs to Sentry Logs for high-cardinality querying.",[366,379,380],{"icon":99,"title":96,"to":97},"Send logs to Better Stack for log management and alerting.",[366,382,383],{"icon":104,"title":129,"to":102},"Build your own adapter for any destination.",[366,385,386],{"icon":114,"title":111,"to":112},"Send browser logs to your server without framework coupling.",[366,388,389],{"icon":109,"title":106,"to":107},"Batch events, retry on failure, and handle buffer overflow.",[202,391,393],{"id":392},"standalone-usage-without-nitro","Standalone Usage (Without Nitro)",[198,395,396,397,400,401,404],{},"In plain TypeScript or Bun scripts, use the ",[210,398,399],{},"drain"," option in ",[210,402,403],{},"initLogger"," instead of Nitro hooks. Every emitted event is drained automatically.",[220,406,409],{"className":222,"code":407,"filename":408,"language":225,"meta":226,"style":226},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script' },\n  drain,\n})\n\nlog.info({ action: 'job_started' }) // drained automatically\n\nconst reqLog = createRequestLogger({ method: 'POST', path: '/process' })\nreqLog.set({ processed: 42 })\nreqLog.emit() // drained automatically\n\nawait drain.flush()\n","index.ts",[210,410,411,434,463,481,501,505,532,552,557,567,593,602,609,614,650,655,701,729,744,749],{"__ignoreMap":226},[230,412,413,415,418,420,423,425,427,429,432],{"class":232,"line":233},[230,414,237],{"class":236},[230,416,417],{"class":236}," type",[230,419,241],{"class":240},[230,421,422],{"class":244}," DrainContext",[230,424,248],{"class":240},[230,426,251],{"class":236},[230,428,254],{"class":240},[230,430,431],{"class":257},"evlog",[230,433,261],{"class":240},[230,435,436,438,440,443,445,448,450,453,455,457,459,461],{"class":232,"line":264},[230,437,237],{"class":236},[230,439,241],{"class":240},[230,441,442],{"class":244}," initLogger",[230,444,330],{"class":240},[230,446,447],{"class":244}," log",[230,449,330],{"class":240},[230,451,452],{"class":244}," createRequestLogger",[230,454,248],{"class":240},[230,456,251],{"class":236},[230,458,254],{"class":240},[230,460,431],{"class":257},[230,462,261],{"class":240},[230,464,465,467,469,471,473,475,477,479],{"class":232,"line":271},[230,466,237],{"class":236},[230,468,241],{"class":240},[230,470,245],{"class":244},[230,472,248],{"class":240},[230,474,251],{"class":236},[230,476,254],{"class":240},[230,478,258],{"class":257},[230,480,261],{"class":240},[230,482,483,485,487,490,492,494,496,499],{"class":232,"line":303},[230,484,237],{"class":236},[230,486,241],{"class":240},[230,488,489],{"class":244}," createDrainPipeline",[230,491,248],{"class":240},[230,493,251],{"class":236},[230,495,254],{"class":240},[230,497,498],{"class":257},"evlog/pipeline",[230,500,261],{"class":240},[230,502,503],{"class":232,"line":338},[230,504,268],{"emptyLinePlaceholder":267},[230,506,508,511,514,517,519,522,526,529],{"class":232,"line":507},6,[230,509,510],{"class":296},"const",[230,512,513],{"class":244}," pipeline ",[230,515,516],{"class":240},"=",[230,518,489],{"class":280},[230,520,521],{"class":240},"\u003C",[230,523,525],{"class":524},"sBMFI","DrainContext",[230,527,528],{"class":240},">",[230,530,531],{"class":244},"()\n",[230,533,535,537,540,542,545,547,550],{"class":232,"line":534},7,[230,536,510],{"class":296},[230,538,539],{"class":244}," drain ",[230,541,516],{"class":240},[230,543,544],{"class":280}," pipeline",[230,546,284],{"class":244},[230,548,549],{"class":280},"createAxiomDrain",[230,551,335],{"class":244},[230,553,555],{"class":232,"line":554},8,[230,556,268],{"emptyLinePlaceholder":267},[230,558,560,562,564],{"class":232,"line":559},9,[230,561,403],{"class":280},[230,563,284],{"class":244},[230,565,566],{"class":240},"{\n",[230,568,570,573,576,578,581,583,585,588,590],{"class":232,"line":569},10,[230,571,572],{"class":320},"  env",[230,574,575],{"class":240},":",[230,577,241],{"class":240},[230,579,580],{"class":320}," service",[230,582,575],{"class":240},[230,584,254],{"class":240},[230,586,587],{"class":257},"my-script",[230,589,323],{"class":240},[230,591,592],{"class":240}," },\n",[230,594,596,599],{"class":232,"line":595},11,[230,597,598],{"class":244},"  drain",[230,600,601],{"class":240},",\n",[230,603,605,607],{"class":232,"line":604},12,[230,606,341],{"class":240},[230,608,344],{"class":244},[230,610,612],{"class":232,"line":611},13,[230,613,268],{"emptyLinePlaceholder":267},[230,615,617,620,622,624,626,629,632,634,636,639,641,643,646],{"class":232,"line":616},14,[230,618,619],{"class":244},"log",[230,621,309],{"class":240},[230,623,348],{"class":280},[230,625,284],{"class":244},[230,627,628],{"class":240},"{",[230,630,631],{"class":320}," action",[230,633,575],{"class":240},[230,635,254],{"class":240},[230,637,638],{"class":257},"job_started",[230,640,323],{"class":240},[230,642,248],{"class":240},[230,644,645],{"class":244},") ",[230,647,649],{"class":648},"sHwdD","// drained automatically\n",[230,651,653],{"class":232,"line":652},15,[230,654,268],{"emptyLinePlaceholder":267},[230,656,658,660,663,665,667,669,671,674,676,678,681,683,685,688,690,692,695,697,699],{"class":232,"line":657},16,[230,659,510],{"class":296},[230,661,662],{"class":244}," reqLog ",[230,664,516],{"class":240},[230,666,452],{"class":280},[230,668,284],{"class":244},[230,670,628],{"class":240},[230,672,673],{"class":320}," method",[230,675,575],{"class":240},[230,677,254],{"class":240},[230,679,680],{"class":257},"POST",[230,682,323],{"class":240},[230,684,330],{"class":240},[230,686,687],{"class":320}," path",[230,689,575],{"class":240},[230,691,254],{"class":240},[230,693,694],{"class":257},"/process",[230,696,323],{"class":240},[230,698,248],{"class":240},[230,700,344],{"class":244},[230,702,704,707,709,712,714,716,719,721,725,727],{"class":232,"line":703},17,[230,705,706],{"class":244},"reqLog",[230,708,309],{"class":240},[230,710,711],{"class":280},"set",[230,713,284],{"class":244},[230,715,628],{"class":240},[230,717,718],{"class":320}," processed",[230,720,575],{"class":240},[230,722,724],{"class":723},"sbssI"," 42",[230,726,248],{"class":240},[230,728,344],{"class":244},[230,730,732,734,736,739,742],{"class":232,"line":731},18,[230,733,706],{"class":244},[230,735,309],{"class":240},[230,737,738],{"class":280},"emit",[230,740,741],{"class":244},"() ",[230,743,649],{"class":648},[230,745,747],{"class":232,"line":746},19,[230,748,268],{"emptyLinePlaceholder":267},[230,750,752,755,758,760,763],{"class":232,"line":751},20,[230,753,754],{"class":236},"await",[230,756,757],{"class":244}," drain",[230,759,309],{"class":240},[230,761,762],{"class":280},"flush",[230,764,531],{"class":244},[346,766,769,770,777],{"color":767,"icon":768},"neutral","i-lucide-arrow-right","See the full ",[771,772,776],"a",{"href":773,"rel":774},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[775],"nofollow","bun-script example"," for a realistic batch processing script.",[202,779,781],{"id":780},"multiple-destinations","Multiple Destinations",[198,783,784],{},"Send logs to multiple services simultaneously:",[220,786,788],{"className":222,"code":787,"filename":224,"language":225,"meta":226,"style":226},"import { createAxiomDrain } from 'evlog/axiom'\nimport { createOTLPDrain } from 'evlog/otlp'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const axiom = createAxiomDrain()\n  const otlp = createOTLPDrain()\n\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    await Promise.allSettled([axiom(ctx), otlp(ctx)])\n  })\n})\n",[210,789,790,808,828,832,852,867,880,884,921,957,964],{"__ignoreMap":226},[230,791,792,794,796,798,800,802,804,806],{"class":232,"line":233},[230,793,237],{"class":236},[230,795,241],{"class":240},[230,797,245],{"class":244},[230,799,248],{"class":240},[230,801,251],{"class":236},[230,803,254],{"class":240},[230,805,258],{"class":257},[230,807,261],{"class":240},[230,809,810,812,814,817,819,821,823,826],{"class":232,"line":264},[230,811,237],{"class":236},[230,813,241],{"class":240},[230,815,816],{"class":244}," createOTLPDrain",[230,818,248],{"class":240},[230,820,251],{"class":236},[230,822,254],{"class":240},[230,824,825],{"class":257},"evlog/otlp",[230,827,261],{"class":240},[230,829,830],{"class":232,"line":271},[230,831,268],{"emptyLinePlaceholder":267},[230,833,834,836,838,840,842,844,846,848,850],{"class":232,"line":303},[230,835,274],{"class":236},[230,837,277],{"class":236},[230,839,281],{"class":280},[230,841,284],{"class":244},[230,843,284],{"class":240},[230,845,290],{"class":289},[230,847,293],{"class":240},[230,849,297],{"class":296},[230,851,300],{"class":240},[230,853,854,857,860,863,865],{"class":232,"line":338},[230,855,856],{"class":296},"  const",[230,858,859],{"class":244}," axiom",[230,861,862],{"class":240}," =",[230,864,245],{"class":280},[230,866,531],{"class":320},[230,868,869,871,874,876,878],{"class":232,"line":507},[230,870,856],{"class":296},[230,872,873],{"class":244}," otlp",[230,875,862],{"class":240},[230,877,816],{"class":280},[230,879,531],{"class":320},[230,881,882],{"class":232,"line":534},[230,883,268],{"emptyLinePlaceholder":267},[230,885,886,888,890,892,894,896,898,900,902,904,906,909,912,915,917,919],{"class":232,"line":554},[230,887,306],{"class":244},[230,889,309],{"class":240},[230,891,312],{"class":244},[230,893,309],{"class":240},[230,895,317],{"class":280},[230,897,284],{"class":320},[230,899,323],{"class":240},[230,901,212],{"class":257},[230,903,323],{"class":240},[230,905,330],{"class":240},[230,907,908],{"class":296}," async",[230,910,911],{"class":240}," (",[230,913,914],{"class":289},"ctx",[230,916,293],{"class":240},[230,918,297],{"class":296},[230,920,300],{"class":240},[230,922,923,926,929,931,934,937,940,942,944,946,948,950,952,954],{"class":232,"line":559},[230,924,925],{"class":236},"    await",[230,927,928],{"class":524}," Promise",[230,930,309],{"class":240},[230,932,933],{"class":280},"allSettled",[230,935,936],{"class":320},"([",[230,938,939],{"class":280},"axiom",[230,941,284],{"class":320},[230,943,914],{"class":244},[230,945,293],{"class":320},[230,947,330],{"class":240},[230,949,873],{"class":280},[230,951,284],{"class":320},[230,953,914],{"class":244},[230,955,956],{"class":320},")])\n",[230,958,959,962],{"class":232,"line":569},[230,960,961],{"class":240},"  }",[230,963,344],{"class":320},[230,965,966,968],{"class":232,"line":595},[230,967,341],{"class":240},[230,969,344],{"class":244},[202,971,973],{"id":972},"drain-context","Drain Context",[198,975,976,977,979],{},"Every adapter receives a ",[210,978,525],{}," with:",[981,982,983,999],"table",{},[984,985,986],"thead",{},[987,988,989,993,996],"tr",{},[990,991,992],"th",{},"Field",[990,994,995],{},"Type",[990,997,998],{},"Description",[1000,1001,1002,1018,1043],"tbody",{},[987,1003,1004,1010,1015],{},[1005,1006,1007],"td",{},[210,1008,1009],{},"event",[1005,1011,1012],{},[210,1013,1014],{},"WideEvent",[1005,1016,1017],{},"The complete log event with all accumulated context",[987,1019,1020,1025,1030],{},[1005,1021,1022],{},[210,1023,1024],{},"request",[1005,1026,1027],{},[210,1028,1029],{},"object",[1005,1031,1032,1033,1036,1037,1036,1040,293],{},"Request metadata (",[210,1034,1035],{},"method",", ",[210,1038,1039],{},"path",[210,1041,1042],{},"requestId",[987,1044,1045,1050,1054],{},[1005,1046,1047],{},[210,1048,1049],{},"headers",[1005,1051,1052],{},[210,1053,1029],{},[1005,1055,1056],{},"Safe HTTP headers (sensitive headers are filtered)",[346,1058,1060,1063,1064,1036,1067,1036,1070,1073],{"color":1059,"icon":49},"success",[215,1061,1062],{},"Security:"," Sensitive headers (",[210,1065,1066],{},"authorization",[210,1068,1069],{},"cookie",[210,1071,1072],{},"x-api-key",", etc.) are automatically filtered and never passed to adapters.",[202,1075,1077],{"id":1076},"zero-config-setup","Zero-Config Setup",[198,1079,1080],{},"All adapters support automatic configuration via environment variables. No code changes needed when deploying to different environments:",[220,1082,1087],{"className":1083,"code":1084,"filename":1085,"language":1086,"meta":226,"style":226},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Axiom\nNUXT_AXIOM_TOKEN=xaat-xxx\nNUXT_AXIOM_DATASET=my-logs\n\n# OTLP\nNUXT_OTLP_ENDPOINT=https://otlp.example.com\n\n# PostHog\nNUXT_POSTHOG_API_KEY=phc_xxx\n\n# Sentry\nNUXT_SENTRY_DSN=https://key@o0.ingest.sentry.io/123\n\n# Better Stack\nNUXT_BETTER_STACK_SOURCE_TOKEN=your-source-token\n",".env","bash",[210,1088,1089,1094,1104,1114,1118,1123,1133,1137,1142,1152,1156,1161,1171,1175,1180],{"__ignoreMap":226},[230,1090,1091],{"class":232,"line":233},[230,1092,1093],{"class":648},"# Axiom\n",[230,1095,1096,1099,1101],{"class":232,"line":264},[230,1097,1098],{"class":244},"NUXT_AXIOM_TOKEN",[230,1100,516],{"class":240},[230,1102,1103],{"class":257},"xaat-xxx\n",[230,1105,1106,1109,1111],{"class":232,"line":271},[230,1107,1108],{"class":244},"NUXT_AXIOM_DATASET",[230,1110,516],{"class":240},[230,1112,1113],{"class":257},"my-logs\n",[230,1115,1116],{"class":232,"line":303},[230,1117,268],{"emptyLinePlaceholder":267},[230,1119,1120],{"class":232,"line":338},[230,1121,1122],{"class":648},"# OTLP\n",[230,1124,1125,1128,1130],{"class":232,"line":507},[230,1126,1127],{"class":244},"NUXT_OTLP_ENDPOINT",[230,1129,516],{"class":240},[230,1131,1132],{"class":257},"https://otlp.example.com\n",[230,1134,1135],{"class":232,"line":534},[230,1136,268],{"emptyLinePlaceholder":267},[230,1138,1139],{"class":232,"line":554},[230,1140,1141],{"class":648},"# PostHog\n",[230,1143,1144,1147,1149],{"class":232,"line":559},[230,1145,1146],{"class":244},"NUXT_POSTHOG_API_KEY",[230,1148,516],{"class":240},[230,1150,1151],{"class":257},"phc_xxx\n",[230,1153,1154],{"class":232,"line":569},[230,1155,268],{"emptyLinePlaceholder":267},[230,1157,1158],{"class":232,"line":595},[230,1159,1160],{"class":648},"# Sentry\n",[230,1162,1163,1166,1168],{"class":232,"line":604},[230,1164,1165],{"class":244},"NUXT_SENTRY_DSN",[230,1167,516],{"class":240},[230,1169,1170],{"class":257},"https://key@o0.ingest.sentry.io/123\n",[230,1172,1173],{"class":232,"line":611},[230,1174,268],{"emptyLinePlaceholder":267},[230,1176,1177],{"class":232,"line":616},[230,1178,1179],{"class":648},"# Better Stack\n",[230,1181,1182,1185,1187],{"class":232,"line":652},[230,1183,1184],{"class":244},"NUXT_BETTER_STACK_SOURCE_TOKEN",[230,1186,516],{"class":240},[230,1188,1189],{"class":257},"your-source-token\n",[220,1191,1193],{"className":222,"code":1192,"filename":224,"language":225,"meta":226,"style":226},"import { createAxiomDrain } from 'evlog/axiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  // Automatically reads from env vars\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n",[210,1194,1195,1213,1217,1237,1242,1268],{"__ignoreMap":226},[230,1196,1197,1199,1201,1203,1205,1207,1209,1211],{"class":232,"line":233},[230,1198,237],{"class":236},[230,1200,241],{"class":240},[230,1202,245],{"class":244},[230,1204,248],{"class":240},[230,1206,251],{"class":236},[230,1208,254],{"class":240},[230,1210,258],{"class":257},[230,1212,261],{"class":240},[230,1214,1215],{"class":232,"line":264},[230,1216,268],{"emptyLinePlaceholder":267},[230,1218,1219,1221,1223,1225,1227,1229,1231,1233,1235],{"class":232,"line":271},[230,1220,274],{"class":236},[230,1222,277],{"class":236},[230,1224,281],{"class":280},[230,1226,284],{"class":244},[230,1228,284],{"class":240},[230,1230,290],{"class":289},[230,1232,293],{"class":240},[230,1234,297],{"class":296},[230,1236,300],{"class":240},[230,1238,1239],{"class":232,"line":303},[230,1240,1241],{"class":648},"  // Automatically reads from env vars\n",[230,1243,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266],{"class":232,"line":338},[230,1245,306],{"class":244},[230,1247,309],{"class":240},[230,1249,312],{"class":244},[230,1251,309],{"class":240},[230,1253,317],{"class":280},[230,1255,284],{"class":320},[230,1257,323],{"class":240},[230,1259,212],{"class":257},[230,1261,323],{"class":240},[230,1263,330],{"class":240},[230,1265,245],{"class":280},[230,1267,335],{"class":320},[230,1269,1270,1272],{"class":232,"line":507},[230,1271,341],{"class":240},[230,1273,344],{"class":244},[1275,1276,1277],"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 .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 .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}",{"title":226,"searchDepth":264,"depth":264,"links":1279},[1280,1281,1282,1283,1284,1285],{"id":204,"depth":264,"text":205},{"id":360,"depth":264,"text":361},{"id":392,"depth":264,"text":393},{"id":780,"depth":264,"text":781},{"id":972,"depth":264,"text":973},{"id":1076,"depth":264,"text":1077},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.","md",[1289,1291,1292,1293,1294],{"label":76,"icon":79,"to":77,"color":767,"variant":1290},"subtle",{"label":81,"icon":84,"to":82,"color":767,"variant":1290},{"label":86,"icon":89,"to":87,"color":767,"variant":1290},{"label":91,"icon":94,"to":92,"color":767,"variant":1290},{"label":96,"icon":99,"to":97,"color":767,"variant":1290},{},{"title":71,"icon":74},{"title":193,"description":1286},"kAeXwZDQSlQfPmHSx_a0ez4mEvcnA_bhqqMNYewBGMk",[1300,1302],{"title":61,"path":62,"stem":63,"description":1301,"icon":64,"children":-1},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.",{"title":76,"path":77,"stem":78,"description":1303,"icon":79,"children":-1},"Send wide events to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables and automatic batching.",1772901884345]