[{"data":1,"prerenderedAt":11787},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":171,"-getting-started-installation-surround":11782},[4,30,55,105,122,136],{"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],{"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,"children":59,"page":29},"Adapters","/adapters","3.adapters",[60,65,70,75,80,85,90,95,100],{"title":61,"path":62,"stem":63,"icon":64},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":66,"path":67,"stem":68,"icon":69},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":71,"path":72,"stem":73,"icon":74},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":76,"path":77,"stem":78,"icon":79},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":81,"path":82,"stem":83,"icon":84},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":86,"path":87,"stem":88,"icon":89},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":91,"path":92,"stem":93,"icon":94},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":96,"path":97,"stem":98,"icon":99},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":101,"path":102,"stem":103,"icon":104},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Enrichers","/enrichers","4.enrichers",[110,113,118],{"title":61,"path":111,"stem":112,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":114,"path":115,"stem":116,"icon":117},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":119,"path":120,"stem":121,"icon":94},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":123,"path":124,"stem":125,"children":126,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[127,131],{"title":61,"path":128,"stem":129,"icon":130},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":132,"path":133,"stem":134,"icon":135},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":137,"path":138,"stem":139,"children":140,"page":29},"Examples","/examples","6.examples",[141,146,151,156,161,166],{"title":142,"path":143,"stem":144,"icon":145},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":147,"path":148,"stem":149,"icon":150},"TanStack Start","/examples/tanstack-start","6.examples/2.tanstack-start","i-custom-tanstack",{"title":152,"path":153,"stem":154,"icon":155},"Hono","/examples/hono","6.examples/3.hono","i-simple-icons-hono",{"title":157,"path":158,"stem":159,"icon":160},"Express","/examples/express","6.examples/4.express","i-simple-icons-express",{"title":162,"path":163,"stem":164,"icon":165},"Elysia","/examples/elysia","6.examples/5.elysia","i-custom-elysia",{"title":167,"path":168,"stem":169,"icon":170},"Fastify","/examples/fastify","6.examples/6.fastify","i-simple-icons-fastify",{"id":172,"title":173,"body":174,"description":11773,"extension":11774,"links":11775,"meta":11778,"navigation":11779,"path":16,"seo":11780,"stem":17,"__hash__":11781},"docs/1.getting-started/2.installation.md","Install evlog",{"type":175,"value":176,"toc":11743},"minimark",[177,181,186,258,263,266,285,292,296,300,303,419,434,437,443,541,547,733,738,743,935,958,962,979,1065,1075,1088,1092,1098,1295,1302,1423,1427,1432,1707,1711,1874,1883,1887,1894,2013,2018,2153,2157,2163,2273,2277,2407,2430,2433,2446,2458,2589,2600,2879,2891,2908,3039,3045,3049,3052,3374,3377,3395,3398,3424,3434,3437,3444,3461,3801,3808,4116,4125,4132,4135,4149,4165,4417,4420,4696,4699,4959,4964,4967,4979,4995,5217,5220,5496,5503,5730,5735,5738,5749,5765,6027,6029,6307,6312,6403,6414,6419,6423,6426,6617,6630,6643,6730,6737,6741,6757,7126,7134,7138,7145,7370,7384,7388,7395,7778,7789,7793,7796,8303,8314,8317,8320,8324,8331,8738,8752,8756,8763,8871,8878,8882,8891,9261,9279,9283,9290,9677,9683,9711,9736,9740,9745,10015,10019,10022,10419,10495,10498,10593,10599,10602,10612,10870,10874,10903,10916,10922,11056,11060,11067,11293,11303,11306,11365,11369,11372,11509,11711,11715,11718,11722,11726,11739],[178,179,180],"p",{},"evlog supports multiple environments: Nuxt, Next.js, Nitro, Cloudflare Workers, and standalone TypeScript.",[182,183,185],"h2",{"id":184},"install","Install",[187,188,189,215,230,244],"code-group",{},[190,191,197],"pre",{"className":192,"code":193,"filename":194,"language":195,"meta":196,"style":196},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[198,199,200],"code",{"__ignoreMap":196},[201,202,205,208,212],"span",{"class":203,"line":204},"line",1,[201,206,194],{"class":207},"sBMFI",[201,209,211],{"class":210},"sfazB"," add",[201,213,214],{"class":210}," evlog\n",[190,216,219],{"className":192,"code":217,"filename":218,"language":195,"meta":196,"style":196},"npm install evlog\n","npm",[198,220,221],{"__ignoreMap":196},[201,222,223,225,228],{"class":203,"line":204},[201,224,218],{"class":207},[201,226,227],{"class":210}," install",[201,229,214],{"class":210},[190,231,234],{"className":192,"code":232,"filename":233,"language":195,"meta":196,"style":196},"yarn add evlog\n","yarn",[198,235,236],{"__ignoreMap":196},[201,237,238,240,242],{"class":203,"line":204},[201,239,233],{"class":207},[201,241,211],{"class":210},[201,243,214],{"class":210},[190,245,248],{"className":192,"code":246,"filename":247,"language":195,"meta":196,"style":196},"bun add evlog\n","bun",[198,249,250],{"__ignoreMap":196},[201,251,252,254,256],{"class":203,"line":204},[201,253,247],{"class":207},[201,255,211],{"class":210},[201,257,214],{"class":210},[259,260,262],"h3",{"id":261},"using-agent-skills","Using Agent Skills",[178,264,265],{},"If you use an AI assistant (Claude Code, Cursor, etc.), install the evlog skill for guided setup and code review:",[190,267,270],{"className":192,"code":268,"filename":269,"language":195,"meta":196,"style":196},"npx skills add hugorcd/evlog\n","Terminal",[198,271,272],{"__ignoreMap":196},[201,273,274,277,280,282],{"class":203,"line":204},[201,275,276],{"class":207},"npx",[201,278,279],{"class":210}," skills",[201,281,211],{"class":210},[201,283,284],{"class":210}," hugorcd/evlog\n",[178,286,287,288,291],{},"Your AI assistant can then help you set up evlog, review your logging patterns, and migrate existing code to wide events. See ",[289,290,25],"a",{"href":26}," for details.",[182,293,295],{"id":294},"setup","Setup",[259,297,299],{"id":298},"nuxt","Nuxt",[178,301,302],{},"Add evlog to your Nuxt config:",[190,304,309],{"className":305,"code":306,"filename":307,"language":308,"meta":196,"style":196},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'my-app',\n    },\n  },\n})\n","nuxt.config.ts","typescript",[198,310,311,332,359,370,380,398,404,410],{"__ignoreMap":196},[201,312,313,317,320,324,328],{"class":203,"line":204},[201,314,316],{"class":315},"s7zQu","export",[201,318,319],{"class":315}," default",[201,321,323],{"class":322},"s2Zo4"," defineNuxtConfig",[201,325,327],{"class":326},"sTEyZ","(",[201,329,331],{"class":330},"sMK4o","{\n",[201,333,335,339,342,345,348,351,353,356],{"class":203,"line":334},2,[201,336,338],{"class":337},"swJcz","  modules",[201,340,341],{"class":330},":",[201,343,344],{"class":326}," [",[201,346,347],{"class":330},"'",[201,349,350],{"class":210},"evlog/nuxt",[201,352,347],{"class":330},[201,354,355],{"class":326},"]",[201,357,358],{"class":330},",\n",[201,360,362,365,367],{"class":203,"line":361},3,[201,363,364],{"class":337},"  evlog",[201,366,341],{"class":330},[201,368,369],{"class":330}," {\n",[201,371,373,376,378],{"class":203,"line":372},4,[201,374,375],{"class":337},"    env",[201,377,341],{"class":330},[201,379,369],{"class":330},[201,381,383,386,388,391,394,396],{"class":203,"line":382},5,[201,384,385],{"class":337},"      service",[201,387,341],{"class":330},[201,389,390],{"class":330}," '",[201,392,393],{"class":210},"my-app",[201,395,347],{"class":330},[201,397,358],{"class":330},[201,399,401],{"class":203,"line":400},6,[201,402,403],{"class":330},"    },\n",[201,405,407],{"class":203,"line":406},7,[201,408,409],{"class":330},"  },\n",[201,411,413,416],{"class":203,"line":412},8,[201,414,415],{"class":330},"}",[201,417,418],{"class":326},")\n",[178,420,421,422,425,426,429,430,433],{},"That's it. ",[198,423,424],{},"useLogger",", ",[198,427,428],{},"createError",", and ",[198,431,432],{},"parseError"," are auto-imported.",[259,435,142],{"id":436},"nextjs",[178,438,439,440,341],{},"Create a shared evlog instance with ",[198,441,442],{},"createEvlog()",[190,444,447],{"className":305,"code":445,"filename":446,"language":308,"meta":196,"style":196},"import { createEvlog } from 'evlog/next'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib/evlog.ts",[198,448,449,474,480,520,535],{"__ignoreMap":196},[201,450,451,454,457,460,463,466,468,471],{"class":203,"line":204},[201,452,453],{"class":315},"import",[201,455,456],{"class":330}," {",[201,458,459],{"class":326}," createEvlog",[201,461,462],{"class":330}," }",[201,464,465],{"class":315}," from",[201,467,390],{"class":330},[201,469,470],{"class":210},"evlog/next",[201,472,473],{"class":330},"'\n",[201,475,476],{"class":203,"line":334},[201,477,479],{"emptyLinePlaceholder":478},true,"\n",[201,481,482,484,488,490,493,496,499,501,504,506,509,511,514,516,518],{"class":203,"line":361},[201,483,316],{"class":315},[201,485,487],{"class":486},"spNyl"," const",[201,489,456],{"class":330},[201,491,492],{"class":326}," withEvlog",[201,494,495],{"class":330},",",[201,497,498],{"class":326}," useLogger",[201,500,495],{"class":330},[201,502,503],{"class":326}," log",[201,505,495],{"class":330},[201,507,508],{"class":326}," createError ",[201,510,415],{"class":330},[201,512,513],{"class":330}," =",[201,515,459],{"class":322},[201,517,327],{"class":326},[201,519,331],{"class":330},[201,521,522,525,527,529,531,533],{"class":203,"line":372},[201,523,524],{"class":337},"  service",[201,526,341],{"class":330},[201,528,390],{"class":330},[201,530,393],{"class":210},[201,532,347],{"class":330},[201,534,358],{"class":330},[201,536,537,539],{"class":203,"line":382},[201,538,415],{"class":330},[201,540,418],{"class":326},[178,542,543,544,341],{},"Wrap your route handlers with ",[198,545,546],{},"withEvlog()",[190,548,551],{"className":305,"code":549,"filename":550,"language":308,"meta":196,"style":196},"import { NextRequest } from 'next/server'\nimport { withEvlog, useLogger } from '@/lib/evlog'\n\nexport const POST = withEvlog(async (request: NextRequest) => {\n  const log = useLogger()  // Zero arguments — AsyncLocalStorage\n  log.set({ user: { id: '123' } })\n  return Response.json({ success: true })\n})\n","app/api/checkout/route.ts",[198,552,553,573,596,600,638,656,697,727],{"__ignoreMap":196},[201,554,555,557,559,562,564,566,568,571],{"class":203,"line":204},[201,556,453],{"class":315},[201,558,456],{"class":330},[201,560,561],{"class":326}," NextRequest",[201,563,462],{"class":330},[201,565,465],{"class":315},[201,567,390],{"class":330},[201,569,570],{"class":210},"next/server",[201,572,473],{"class":330},[201,574,575,577,579,581,583,585,587,589,591,594],{"class":203,"line":334},[201,576,453],{"class":315},[201,578,456],{"class":330},[201,580,492],{"class":326},[201,582,495],{"class":330},[201,584,498],{"class":326},[201,586,462],{"class":330},[201,588,465],{"class":315},[201,590,390],{"class":330},[201,592,593],{"class":210},"@/lib/evlog",[201,595,473],{"class":330},[201,597,598],{"class":203,"line":361},[201,599,479],{"emptyLinePlaceholder":478},[201,601,602,604,606,609,612,614,616,619,622,626,628,630,633,636],{"class":203,"line":372},[201,603,316],{"class":315},[201,605,487],{"class":486},[201,607,608],{"class":326}," POST ",[201,610,611],{"class":330},"=",[201,613,492],{"class":322},[201,615,327],{"class":326},[201,617,618],{"class":486},"async",[201,620,621],{"class":330}," (",[201,623,625],{"class":624},"sHdIc","request",[201,627,341],{"class":330},[201,629,561],{"class":207},[201,631,632],{"class":330},")",[201,634,635],{"class":486}," =>",[201,637,369],{"class":330},[201,639,640,643,645,647,649,652],{"class":203,"line":382},[201,641,642],{"class":486},"  const",[201,644,503],{"class":326},[201,646,513],{"class":330},[201,648,498],{"class":322},[201,650,651],{"class":337},"()  ",[201,653,655],{"class":654},"sHwdD","// Zero arguments — AsyncLocalStorage\n",[201,657,658,661,664,667,669,672,675,677,679,682,684,686,689,691,693,695],{"class":203,"line":400},[201,659,660],{"class":326},"  log",[201,662,663],{"class":330},".",[201,665,666],{"class":322},"set",[201,668,327],{"class":337},[201,670,671],{"class":330},"{",[201,673,674],{"class":337}," user",[201,676,341],{"class":330},[201,678,456],{"class":330},[201,680,681],{"class":337}," id",[201,683,341],{"class":330},[201,685,390],{"class":330},[201,687,688],{"class":210},"123",[201,690,347],{"class":330},[201,692,462],{"class":330},[201,694,462],{"class":330},[201,696,418],{"class":337},[201,698,699,702,705,707,710,712,714,717,719,723,725],{"class":203,"line":406},[201,700,701],{"class":315},"  return",[201,703,704],{"class":326}," Response",[201,706,663],{"class":330},[201,708,709],{"class":322},"json",[201,711,327],{"class":337},[201,713,671],{"class":330},[201,715,716],{"class":337}," success",[201,718,341],{"class":330},[201,720,722],{"class":721},"sfNiH"," true",[201,724,462],{"class":330},[201,726,418],{"class":337},[201,728,729,731],{"class":203,"line":412},[201,730,415],{"class":330},[201,732,418],{"class":326},[734,735,737],"h4",{"id":736},"server-actions","Server Actions",[178,739,740,742],{},[198,741,546],{}," works with server actions — just wrap the function:",[190,744,747],{"className":305,"code":745,"filename":746,"language":308,"meta":196,"style":196},"'use server'\nimport { withEvlog, useLogger } from '@/lib/evlog'\n\nexport const checkout = withEvlog(async (formData: FormData) => {\n  const log = useLogger()\n  log.set({ action: 'checkout', source: 'server-action' })\n  log.set({ item: formData.get('item') })\n  return { success: true }\n})\n","app/actions.ts",[198,748,749,758,780,784,817,830,872,913,928],{"__ignoreMap":196},[201,750,751,753,756],{"class":203,"line":204},[201,752,347],{"class":330},[201,754,755],{"class":210},"use server",[201,757,473],{"class":330},[201,759,760,762,764,766,768,770,772,774,776,778],{"class":203,"line":334},[201,761,453],{"class":315},[201,763,456],{"class":330},[201,765,492],{"class":326},[201,767,495],{"class":330},[201,769,498],{"class":326},[201,771,462],{"class":330},[201,773,465],{"class":315},[201,775,390],{"class":330},[201,777,593],{"class":210},[201,779,473],{"class":330},[201,781,782],{"class":203,"line":361},[201,783,479],{"emptyLinePlaceholder":478},[201,785,786,788,790,793,795,797,799,801,803,806,808,811,813,815],{"class":203,"line":372},[201,787,316],{"class":315},[201,789,487],{"class":486},[201,791,792],{"class":326}," checkout ",[201,794,611],{"class":330},[201,796,492],{"class":322},[201,798,327],{"class":326},[201,800,618],{"class":486},[201,802,621],{"class":330},[201,804,805],{"class":624},"formData",[201,807,341],{"class":330},[201,809,810],{"class":207}," FormData",[201,812,632],{"class":330},[201,814,635],{"class":486},[201,816,369],{"class":330},[201,818,819,821,823,825,827],{"class":203,"line":382},[201,820,642],{"class":486},[201,822,503],{"class":326},[201,824,513],{"class":330},[201,826,498],{"class":322},[201,828,829],{"class":337},"()\n",[201,831,832,834,836,838,840,842,845,847,849,852,854,856,859,861,863,866,868,870],{"class":203,"line":400},[201,833,660],{"class":326},[201,835,663],{"class":330},[201,837,666],{"class":322},[201,839,327],{"class":337},[201,841,671],{"class":330},[201,843,844],{"class":337}," action",[201,846,341],{"class":330},[201,848,390],{"class":330},[201,850,851],{"class":210},"checkout",[201,853,347],{"class":330},[201,855,495],{"class":330},[201,857,858],{"class":337}," source",[201,860,341],{"class":330},[201,862,390],{"class":330},[201,864,865],{"class":210},"server-action",[201,867,347],{"class":330},[201,869,462],{"class":330},[201,871,418],{"class":337},[201,873,874,876,878,880,882,884,887,889,892,894,897,899,901,904,906,909,911],{"class":203,"line":406},[201,875,660],{"class":326},[201,877,663],{"class":330},[201,879,666],{"class":322},[201,881,327],{"class":337},[201,883,671],{"class":330},[201,885,886],{"class":337}," item",[201,888,341],{"class":330},[201,890,891],{"class":326}," formData",[201,893,663],{"class":330},[201,895,896],{"class":322},"get",[201,898,327],{"class":337},[201,900,347],{"class":330},[201,902,903],{"class":210},"item",[201,905,347],{"class":330},[201,907,908],{"class":337},") ",[201,910,415],{"class":330},[201,912,418],{"class":337},[201,914,915,917,919,921,923,925],{"class":203,"line":412},[201,916,701],{"class":315},[201,918,456],{"class":330},[201,920,716],{"class":337},[201,922,341],{"class":330},[201,924,722],{"class":721},[201,926,927],{"class":330}," }\n",[201,929,931,933],{"class":203,"line":930},9,[201,932,415],{"class":330},[201,934,418],{"class":326},[936,937,939,940,425,943,945,946,949,950,953,954,957],"callout",{"color":938,"icon":13},"info","When the first argument is not a ",[198,941,942],{},"Request",[198,944,546],{}," still creates a logger but with ",[198,947,948],{},"method: 'UNKNOWN'"," and ",[198,951,952],{},"path: '/'",". Use ",[198,955,956],{},"log.set()"," to add context.",[734,959,961],{"id":960},"middleware","Middleware",[178,963,964,965,968,969,949,972,975,976,978],{},"The optional ",[198,966,967],{},"evlogMiddleware()"," sets ",[198,970,971],{},"x-request-id",[198,973,974],{},"x-evlog-start"," headers so ",[198,977,546],{}," can reuse them for consistent timing and request correlation across the middleware → handler chain.",[190,980,983],{"className":305,"code":981,"filename":982,"language":308,"meta":196,"style":196},"import { evlogMiddleware } from 'evlog/next'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['/api/:path*'],\n}\n","proxy.ts",[198,984,985,1004,1008,1023,1027,1040,1060],{"__ignoreMap":196},[201,986,987,989,991,994,996,998,1000,1002],{"class":203,"line":204},[201,988,453],{"class":315},[201,990,456],{"class":330},[201,992,993],{"class":326}," evlogMiddleware",[201,995,462],{"class":330},[201,997,465],{"class":315},[201,999,390],{"class":330},[201,1001,470],{"class":210},[201,1003,473],{"class":330},[201,1005,1006],{"class":203,"line":334},[201,1007,479],{"emptyLinePlaceholder":478},[201,1009,1010,1012,1014,1017,1019,1021],{"class":203,"line":361},[201,1011,316],{"class":315},[201,1013,487],{"class":486},[201,1015,1016],{"class":326}," proxy ",[201,1018,611],{"class":330},[201,1020,993],{"class":322},[201,1022,829],{"class":326},[201,1024,1025],{"class":203,"line":372},[201,1026,479],{"emptyLinePlaceholder":478},[201,1028,1029,1031,1033,1036,1038],{"class":203,"line":382},[201,1030,316],{"class":315},[201,1032,487],{"class":486},[201,1034,1035],{"class":326}," config ",[201,1037,611],{"class":330},[201,1039,369],{"class":330},[201,1041,1042,1045,1047,1049,1051,1054,1056,1058],{"class":203,"line":400},[201,1043,1044],{"class":337},"  matcher",[201,1046,341],{"class":330},[201,1048,344],{"class":326},[201,1050,347],{"class":330},[201,1052,1053],{"class":210},"/api/:path*",[201,1055,347],{"class":330},[201,1057,355],{"class":326},[201,1059,358],{"class":330},[201,1061,1062],{"class":203,"line":406},[201,1063,1064],{"class":330},"}\n",[178,1066,1067,1068,1070,1071,1074],{},"Without the middleware, ",[198,1069,546],{}," generates its own ",[198,1072,1073],{},"requestId"," and measures timing internally.",[936,1076,1077,1078,1081,1082,1084,1085,1087],{"color":938,"icon":13},"Older versions of Next.js use ",[198,1079,1080],{},"middleware.ts"," instead of ",[198,1083,982],{},". The evlog middleware works with both — import from ",[198,1086,470],{}," regardless.",[734,1089,1091],{"id":1090},"client-provider","Client Provider",[178,1093,1094,1095,341],{},"For client-side logging, wrap your root layout with ",[198,1096,1097],{},"EvlogProvider",[190,1099,1104],{"className":1100,"code":1101,"filename":1102,"language":1103,"meta":196,"style":196},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { EvlogProvider } from 'evlog/next/client'\n\nexport default function Layout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CEvlogProvider service=\"my-app\" transport={{ enabled: true }}>\n          {children}\n        \u003C/EvlogProvider>\n      \u003C/body>\n    \u003C/html>\n  )\n}\n","app/layout.tsx","tsx",[198,1105,1106,1126,1130,1170,1177,1201,1211,1245,1255,1264,1274,1284,1290],{"__ignoreMap":196},[201,1107,1108,1110,1112,1115,1117,1119,1121,1124],{"class":203,"line":204},[201,1109,453],{"class":315},[201,1111,456],{"class":330},[201,1113,1114],{"class":326}," EvlogProvider",[201,1116,462],{"class":330},[201,1118,465],{"class":315},[201,1120,390],{"class":330},[201,1122,1123],{"class":210},"evlog/next/client",[201,1125,473],{"class":330},[201,1127,1128],{"class":203,"line":334},[201,1129,479],{"emptyLinePlaceholder":478},[201,1131,1132,1134,1136,1139,1142,1145,1148,1151,1153,1155,1157,1160,1162,1165,1168],{"class":203,"line":361},[201,1133,316],{"class":315},[201,1135,319],{"class":315},[201,1137,1138],{"class":486}," function",[201,1140,1141],{"class":322}," Layout",[201,1143,1144],{"class":330},"({",[201,1146,1147],{"class":624}," children",[201,1149,1150],{"class":330}," }:",[201,1152,456],{"class":330},[201,1154,1147],{"class":337},[201,1156,341],{"class":330},[201,1158,1159],{"class":207}," React",[201,1161,663],{"class":330},[201,1163,1164],{"class":207},"ReactNode",[201,1166,1167],{"class":330}," })",[201,1169,369],{"class":330},[201,1171,1172,1174],{"class":203,"line":372},[201,1173,701],{"class":315},[201,1175,1176],{"class":337}," (\n",[201,1178,1179,1182,1185,1188,1190,1193,1196,1198],{"class":203,"line":382},[201,1180,1181],{"class":330},"    \u003C",[201,1183,1184],{"class":337},"html",[201,1186,1187],{"class":486}," lang",[201,1189,611],{"class":330},[201,1191,1192],{"class":330},"\"",[201,1194,1195],{"class":210},"en",[201,1197,1192],{"class":330},[201,1199,1200],{"class":330},">\n",[201,1202,1203,1206,1209],{"class":203,"line":400},[201,1204,1205],{"class":330},"      \u003C",[201,1207,1208],{"class":337},"body",[201,1210,1200],{"class":330},[201,1212,1213,1216,1218,1221,1223,1225,1227,1229,1232,1235,1238,1240,1242],{"class":203,"line":406},[201,1214,1215],{"class":330},"        \u003C",[201,1217,1097],{"class":207},[201,1219,1220],{"class":486}," service",[201,1222,611],{"class":330},[201,1224,1192],{"class":330},[201,1226,393],{"class":210},[201,1228,1192],{"class":330},[201,1230,1231],{"class":486}," transport",[201,1233,1234],{"class":330},"={{",[201,1236,1237],{"class":337}," enabled",[201,1239,341],{"class":330},[201,1241,722],{"class":721},[201,1243,1244],{"class":330}," }}>\n",[201,1246,1247,1250,1253],{"class":203,"line":412},[201,1248,1249],{"class":330},"          {",[201,1251,1252],{"class":326},"children",[201,1254,1064],{"class":330},[201,1256,1257,1260,1262],{"class":203,"line":930},[201,1258,1259],{"class":330},"        \u003C/",[201,1261,1097],{"class":207},[201,1263,1200],{"class":330},[201,1265,1267,1270,1272],{"class":203,"line":1266},10,[201,1268,1269],{"class":330},"      \u003C/",[201,1271,1208],{"class":337},[201,1273,1200],{"class":330},[201,1275,1277,1280,1282],{"class":203,"line":1276},11,[201,1278,1279],{"class":330},"    \u003C/",[201,1281,1184],{"class":337},[201,1283,1200],{"class":330},[201,1285,1287],{"class":203,"line":1286},12,[201,1288,1289],{"class":337},"  )\n",[201,1291,1293],{"class":203,"line":1292},13,[201,1294,1064],{"class":330},[178,1296,1297,1298,1301],{},"Then use ",[198,1299,1300],{},"log"," in any client component:",[190,1303,1306],{"className":1100,"code":1304,"filename":1305,"language":1103,"meta":196,"style":196},"'use client'\nimport { log } from 'evlog/next/client'\n\nexport function CheckoutButton() {\n  return (\n    \u003Cbutton onClick={() => log.info({ action: 'checkout_click' })}>\n      Checkout\n    \u003C/button>\n  )\n}\n","app/components/CheckoutButton.tsx",[198,1307,1308,1317,1335,1339,1353,1359,1402,1407,1415,1419],{"__ignoreMap":196},[201,1309,1310,1312,1315],{"class":203,"line":204},[201,1311,347],{"class":330},[201,1313,1314],{"class":210},"use client",[201,1316,473],{"class":330},[201,1318,1319,1321,1323,1325,1327,1329,1331,1333],{"class":203,"line":334},[201,1320,453],{"class":315},[201,1322,456],{"class":330},[201,1324,503],{"class":326},[201,1326,462],{"class":330},[201,1328,465],{"class":315},[201,1330,390],{"class":330},[201,1332,1123],{"class":210},[201,1334,473],{"class":330},[201,1336,1337],{"class":203,"line":361},[201,1338,479],{"emptyLinePlaceholder":478},[201,1340,1341,1343,1345,1348,1351],{"class":203,"line":372},[201,1342,316],{"class":315},[201,1344,1138],{"class":486},[201,1346,1347],{"class":322}," CheckoutButton",[201,1349,1350],{"class":330},"()",[201,1352,369],{"class":330},[201,1354,1355,1357],{"class":203,"line":382},[201,1356,701],{"class":315},[201,1358,1176],{"class":337},[201,1360,1361,1363,1366,1369,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1393,1395,1397,1399],{"class":203,"line":400},[201,1362,1181],{"class":330},[201,1364,1365],{"class":337},"button",[201,1367,1368],{"class":486}," onClick",[201,1370,1371],{"class":330},"={()",[201,1373,635],{"class":486},[201,1375,503],{"class":326},[201,1377,663],{"class":330},[201,1379,938],{"class":322},[201,1381,327],{"class":326},[201,1383,671],{"class":330},[201,1385,844],{"class":337},[201,1387,341],{"class":330},[201,1389,390],{"class":330},[201,1391,1392],{"class":210},"checkout_click",[201,1394,347],{"class":330},[201,1396,462],{"class":330},[201,1398,632],{"class":326},[201,1400,1401],{"class":330},"}>\n",[201,1403,1404],{"class":203,"line":406},[201,1405,1406],{"class":326},"      Checkout\n",[201,1408,1409,1411,1413],{"class":203,"line":412},[201,1410,1279],{"class":330},[201,1412,1365],{"class":337},[201,1414,1200],{"class":330},[201,1416,1417],{"class":203,"line":930},[201,1418,1289],{"class":337},[201,1420,1421],{"class":203,"line":1266},[201,1422,1064],{"class":330},[734,1424,1426],{"id":1425},"configuration-reference","Configuration Reference",[178,1428,1429,1430,341],{},"All options for ",[198,1431,442],{},[1433,1434,1435,1454],"table",{},[1436,1437,1438],"thead",{},[1439,1440,1441,1445,1448,1451],"tr",{},[1442,1443,1444],"th",{},"Option",[1442,1446,1447],{},"Type",[1442,1449,1450],{},"Default",[1442,1452,1453],{},"Description",[1455,1456,1457,1478,1498,1515,1533,1553,1572,1591,1609,1628,1647,1666,1689],"tbody",{},[1439,1458,1459,1465,1470,1475],{},[1460,1461,1462],"td",{},[198,1463,1464],{},"service",[1460,1466,1467],{},[198,1468,1469],{},"string",[1460,1471,1472],{},[198,1473,1474],{},"'app'",[1460,1476,1477],{},"Service name shown in logs",[1439,1479,1480,1485,1490,1495],{},[1460,1481,1482],{},[198,1483,1484],{},"enabled",[1460,1486,1487],{},[198,1488,1489],{},"boolean",[1460,1491,1492],{},[198,1493,1494],{},"true",[1460,1496,1497],{},"Globally enable/disable all logging",[1439,1499,1500,1505,1509,1512],{},[1460,1501,1502],{},[198,1503,1504],{},"pretty",[1460,1506,1507],{},[198,1508,1489],{},[1460,1510,1511],{},"Auto",[1460,1513,1514],{},"Pretty print (true in dev, false in prod)",[1439,1516,1517,1522,1527,1530],{},[1460,1518,1519],{},[198,1520,1521],{},"env",[1460,1523,1524],{},[198,1525,1526],{},"Partial\u003CEnvironmentContext>",[1460,1528,1529],{},"Auto-detected",[1460,1531,1532],{},"Environment, version, commitHash, region",[1439,1534,1535,1540,1545,1550],{},[1460,1536,1537],{},[198,1538,1539],{},"sampling.rates",[1460,1541,1542],{},[198,1543,1544],{},"SamplingRates",[1460,1546,1547],{},[198,1548,1549],{},"undefined",[1460,1551,1552],{},"Head sampling rates per level (0-100%)",[1439,1554,1555,1560,1565,1569],{},[1460,1556,1557],{},[198,1558,1559],{},"sampling.keep",[1460,1561,1562],{},[198,1563,1564],{},"TailSamplingCondition[]",[1460,1566,1567],{},[198,1568,1549],{},[1460,1570,1571],{},"Tail sampling conditions (OR logic)",[1439,1573,1574,1579,1584,1588],{},[1460,1575,1576],{},[198,1577,1578],{},"include",[1460,1580,1581],{},[198,1582,1583],{},"string[]",[1460,1585,1586],{},[198,1587,1549],{},[1460,1589,1590],{},"Route patterns to log (glob)",[1439,1592,1593,1598,1602,1606],{},[1460,1594,1595],{},[198,1596,1597],{},"exclude",[1460,1599,1600],{},[198,1601,1583],{},[1460,1603,1604],{},[198,1605,1549],{},[1460,1607,1608],{},"Route patterns to exclude (glob, takes precedence)",[1439,1610,1611,1616,1621,1625],{},[1460,1612,1613],{},[198,1614,1615],{},"routes",[1460,1617,1618],{},[198,1619,1620],{},"Record\u003Cstring, RouteConfig>",[1460,1622,1623],{},[198,1624,1549],{},[1460,1626,1627],{},"Route-specific service names",[1439,1629,1630,1635,1640,1644],{},[1460,1631,1632],{},[198,1633,1634],{},"drain",[1460,1636,1637],{},[198,1638,1639],{},"(ctx: DrainContext) => void",[1460,1641,1642],{},[198,1643,1549],{},[1460,1645,1646],{},"Drain callback for external services",[1439,1648,1649,1654,1659,1663],{},[1460,1650,1651],{},[198,1652,1653],{},"enrich",[1460,1655,1656],{},[198,1657,1658],{},"(ctx: EnrichContext) => void",[1460,1660,1661],{},[198,1662,1549],{},[1460,1664,1665],{},"Enrich callback for derived context",[1439,1667,1668,1673,1678,1682],{},[1460,1669,1670],{},[198,1671,1672],{},"keep",[1460,1674,1675],{},[198,1676,1677],{},"(ctx: TailSamplingContext) => void",[1460,1679,1680],{},[198,1681,1549],{},[1460,1683,1684,1685,1688],{},"Custom tail sampling callback. Set ",[198,1686,1687],{},"ctx.shouldKeep = true"," to force-keep",[1439,1690,1691,1696,1700,1704],{},[1460,1692,1693],{},[198,1694,1695],{},"stringify",[1460,1697,1698],{},[198,1699,1489],{},[1460,1701,1702],{},[198,1703,1494],{},[1460,1705,1706],{},"JSON stringify output (false for raw objects)",[734,1708,1710],{"id":1709},"comparison-with-nuxt","Comparison with Nuxt",[1433,1712,1713,1730],{},[1436,1714,1715],{},[1439,1716,1717,1720,1725],{},[1442,1718,1719],{},"Feature",[1442,1721,1722,1723,632],{},"Nuxt (",[198,1724,350],{},[1442,1726,1727,1728,632],{},"Next.js (",[198,1729,470],{},[1455,1731,1732,1746,1762,1775,1788,1804,1818,1832,1846,1859],{},[1439,1733,1734,1736,1741],{},[1460,1735,295],{},[1460,1737,1738],{},[198,1739,1740],{},"modules: ['evlog/nuxt']",[1460,1742,1743,1745],{},[198,1744,442],{}," factory",[1439,1747,1748,1751,1756],{},[1460,1749,1750],{},"Logger",[1460,1752,1753],{},[198,1754,1755],{},"useLogger(event)",[1460,1757,1758,1761],{},[198,1759,1760],{},"useLogger()"," (zero args)",[1439,1763,1764,1767,1770],{},[1460,1765,1766],{},"Auto-import",[1460,1768,1769],{},"Yes",[1460,1771,1772,1773,632],{},"No (import from ",[198,1774,593],{},[1439,1776,1777,1780,1783],{},[1460,1778,1779],{},"Request scoping",[1460,1781,1782],{},"Nitro hooks",[1460,1784,1785],{},[198,1786,1787],{},"AsyncLocalStorage",[1439,1789,1790,1793,1799],{},[1460,1791,1792],{},"Drain",[1460,1794,1795,1798],{},[198,1796,1797],{},"evlog:drain"," hook",[1460,1800,1801,1803],{},[198,1802,1634],{}," callback",[1439,1805,1806,1809,1814],{},[1460,1807,1808],{},"Enrich",[1460,1810,1811,1798],{},[198,1812,1813],{},"evlog:enrich",[1460,1815,1816,1803],{},[198,1817,1653],{},[1439,1819,1820,1823,1828],{},[1460,1821,1822],{},"Tail sampling (rules)",[1460,1824,1825,1827],{},[198,1826,1559],{}," conditions",[1460,1829,1830,1827],{},[198,1831,1559],{},[1439,1833,1834,1837,1842],{},[1460,1835,1836],{},"Tail sampling (custom)",[1460,1838,1839,1798],{},[198,1840,1841],{},"evlog:emit:keep",[1460,1843,1844,1803],{},[198,1845,1672],{},[1439,1847,1848,1851,1854],{},[1460,1849,1850],{},"Client",[1460,1852,1853],{},"Auto-configured Vue plugin",[1460,1855,1856,1858],{},[198,1857,1097],{}," React component",[1439,1860,1861,1864,1867],{},[1460,1862,1863],{},"Emit",[1460,1865,1866],{},"Automatic (afterResponse hook)",[1460,1868,1869,1870,1873],{},"Automatic (",[198,1871,1872],{},"withEvlog"," wrapper)",[936,1875,1878,1879,1882],{"color":1876,"icon":1877},"neutral","i-lucide-arrow-right","See a full working ",[289,1880,1881],{"href":143},"Next.js example"," with enrichers, pipeline, drain, tail sampling, and client provider.",[259,1884,1886],{"id":1885},"nitro-v3","Nitro v3",[178,1888,1889,1890,1893],{},"Register evlog as a Nitro module using the ",[198,1891,1892],{},"nitro"," package:",[190,1895,1898],{"className":305,"code":1896,"filename":1897,"language":308,"meta":196,"style":196},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-api' },\n    })\n  ],\n})\n","nitro.config.ts",[198,1899,1900,1919,1936,1940,1952,1961,1970,1993,2000,2007],{"__ignoreMap":196},[201,1901,1902,1904,1906,1909,1911,1913,1915,1917],{"class":203,"line":204},[201,1903,453],{"class":315},[201,1905,456],{"class":330},[201,1907,1908],{"class":326}," defineConfig",[201,1910,462],{"class":330},[201,1912,465],{"class":315},[201,1914,390],{"class":330},[201,1916,1892],{"class":210},[201,1918,473],{"class":330},[201,1920,1921,1923,1926,1929,1931,1934],{"class":203,"line":334},[201,1922,453],{"class":315},[201,1924,1925],{"class":326}," evlog ",[201,1927,1928],{"class":315},"from",[201,1930,390],{"class":330},[201,1932,1933],{"class":210},"evlog/nitro/v3",[201,1935,473],{"class":330},[201,1937,1938],{"class":203,"line":361},[201,1939,479],{"emptyLinePlaceholder":478},[201,1941,1942,1944,1946,1948,1950],{"class":203,"line":372},[201,1943,316],{"class":315},[201,1945,319],{"class":315},[201,1947,1908],{"class":322},[201,1949,327],{"class":326},[201,1951,331],{"class":330},[201,1953,1954,1956,1958],{"class":203,"line":382},[201,1955,338],{"class":337},[201,1957,341],{"class":330},[201,1959,1960],{"class":326}," [\n",[201,1962,1963,1966,1968],{"class":203,"line":400},[201,1964,1965],{"class":322},"    evlog",[201,1967,327],{"class":326},[201,1969,331],{"class":330},[201,1971,1972,1975,1977,1979,1981,1983,1985,1988,1990],{"class":203,"line":406},[201,1973,1974],{"class":337},"      env",[201,1976,341],{"class":330},[201,1978,456],{"class":330},[201,1980,1220],{"class":337},[201,1982,341],{"class":330},[201,1984,390],{"class":330},[201,1986,1987],{"class":210},"my-api",[201,1989,347],{"class":330},[201,1991,1992],{"class":330}," },\n",[201,1994,1995,1998],{"class":203,"line":412},[201,1996,1997],{"class":330},"    }",[201,1999,418],{"class":326},[201,2001,2002,2005],{"class":203,"line":930},[201,2003,2004],{"class":326},"  ]",[201,2006,358],{"class":330},[201,2008,2009,2011],{"class":203,"line":1266},[201,2010,415],{"class":330},[201,2012,418],{"class":326},[178,2014,1297,2015,2017],{},[198,2016,424],{}," in your routes:",[190,2019,2022],{"className":305,"code":2020,"filename":2021,"language":308,"meta":196,"style":196},"import { defineHandler } from 'nitro/h3'\nimport { useLogger } from 'evlog/nitro/v3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ action: 'hello' })\n  return { ok: true }\n})\n","routes/api/hello.ts",[198,2023,2024,2044,2062,2066,2089,2105,2132,2147],{"__ignoreMap":196},[201,2025,2026,2028,2030,2033,2035,2037,2039,2042],{"class":203,"line":204},[201,2027,453],{"class":315},[201,2029,456],{"class":330},[201,2031,2032],{"class":326}," defineHandler",[201,2034,462],{"class":330},[201,2036,465],{"class":315},[201,2038,390],{"class":330},[201,2040,2041],{"class":210},"nitro/h3",[201,2043,473],{"class":330},[201,2045,2046,2048,2050,2052,2054,2056,2058,2060],{"class":203,"line":334},[201,2047,453],{"class":315},[201,2049,456],{"class":330},[201,2051,498],{"class":326},[201,2053,462],{"class":330},[201,2055,465],{"class":315},[201,2057,390],{"class":330},[201,2059,1933],{"class":210},[201,2061,473],{"class":330},[201,2063,2064],{"class":203,"line":361},[201,2065,479],{"emptyLinePlaceholder":478},[201,2067,2068,2070,2072,2074,2076,2078,2080,2083,2085,2087],{"class":203,"line":372},[201,2069,316],{"class":315},[201,2071,319],{"class":315},[201,2073,2032],{"class":322},[201,2075,327],{"class":326},[201,2077,618],{"class":486},[201,2079,621],{"class":330},[201,2081,2082],{"class":624},"event",[201,2084,632],{"class":330},[201,2086,635],{"class":486},[201,2088,369],{"class":330},[201,2090,2091,2093,2095,2097,2099,2101,2103],{"class":203,"line":382},[201,2092,642],{"class":486},[201,2094,503],{"class":326},[201,2096,513],{"class":330},[201,2098,498],{"class":322},[201,2100,327],{"class":337},[201,2102,2082],{"class":326},[201,2104,418],{"class":337},[201,2106,2107,2109,2111,2113,2115,2117,2119,2121,2123,2126,2128,2130],{"class":203,"line":400},[201,2108,660],{"class":326},[201,2110,663],{"class":330},[201,2112,666],{"class":322},[201,2114,327],{"class":337},[201,2116,671],{"class":330},[201,2118,844],{"class":337},[201,2120,341],{"class":330},[201,2122,390],{"class":330},[201,2124,2125],{"class":210},"hello",[201,2127,347],{"class":330},[201,2129,462],{"class":330},[201,2131,418],{"class":337},[201,2133,2134,2136,2138,2141,2143,2145],{"class":203,"line":406},[201,2135,701],{"class":315},[201,2137,456],{"class":330},[201,2139,2140],{"class":337}," ok",[201,2142,341],{"class":330},[201,2144,722],{"class":721},[201,2146,927],{"class":330},[201,2148,2149,2151],{"class":203,"line":412},[201,2150,415],{"class":330},[201,2152,418],{"class":326},[259,2154,2156],{"id":2155},"nitro-v2","Nitro v2",[178,2158,2159,2160,341],{},"Same approach with ",[198,2161,2162],{},"nitropack",[190,2164,2166],{"className":305,"code":2165,"filename":1897,"language":308,"meta":196,"style":196},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-api' },\n    })\n  ],\n})\n",[198,2167,2168,2188,2203,2207,2219,2227,2235,2255,2261,2267],{"__ignoreMap":196},[201,2169,2170,2172,2174,2177,2179,2181,2183,2186],{"class":203,"line":204},[201,2171,453],{"class":315},[201,2173,456],{"class":330},[201,2175,2176],{"class":326}," defineNitroConfig",[201,2178,462],{"class":330},[201,2180,465],{"class":315},[201,2182,390],{"class":330},[201,2184,2185],{"class":210},"nitropack/config",[201,2187,473],{"class":330},[201,2189,2190,2192,2194,2196,2198,2201],{"class":203,"line":334},[201,2191,453],{"class":315},[201,2193,1925],{"class":326},[201,2195,1928],{"class":315},[201,2197,390],{"class":330},[201,2199,2200],{"class":210},"evlog/nitro",[201,2202,473],{"class":330},[201,2204,2205],{"class":203,"line":361},[201,2206,479],{"emptyLinePlaceholder":478},[201,2208,2209,2211,2213,2215,2217],{"class":203,"line":372},[201,2210,316],{"class":315},[201,2212,319],{"class":315},[201,2214,2176],{"class":322},[201,2216,327],{"class":326},[201,2218,331],{"class":330},[201,2220,2221,2223,2225],{"class":203,"line":382},[201,2222,338],{"class":337},[201,2224,341],{"class":330},[201,2226,1960],{"class":326},[201,2228,2229,2231,2233],{"class":203,"line":400},[201,2230,1965],{"class":322},[201,2232,327],{"class":326},[201,2234,331],{"class":330},[201,2236,2237,2239,2241,2243,2245,2247,2249,2251,2253],{"class":203,"line":406},[201,2238,1974],{"class":337},[201,2240,341],{"class":330},[201,2242,456],{"class":330},[201,2244,1220],{"class":337},[201,2246,341],{"class":330},[201,2248,390],{"class":330},[201,2250,1987],{"class":210},[201,2252,347],{"class":330},[201,2254,1992],{"class":330},[201,2256,2257,2259],{"class":203,"line":412},[201,2258,1997],{"class":330},[201,2260,418],{"class":326},[201,2262,2263,2265],{"class":203,"line":930},[201,2264,2004],{"class":326},[201,2266,358],{"class":330},[201,2268,2269,2271],{"class":203,"line":1266},[201,2270,415],{"class":330},[201,2272,418],{"class":326},[178,2274,1297,2275,2017],{},[198,2276,424],{},[190,2278,2280],{"className":305,"code":2279,"filename":2021,"language":308,"meta":196,"style":196},"import { defineEventHandler } from 'h3'\nimport { useLogger } from 'evlog/nitro'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ action: 'hello' })\n  return { ok: true }\n})\n",[198,2281,2282,2301,2319,2323,2345,2361,2387,2401],{"__ignoreMap":196},[201,2283,2284,2286,2288,2291,2293,2295,2297,2299],{"class":203,"line":204},[201,2285,453],{"class":315},[201,2287,456],{"class":330},[201,2289,2290],{"class":326}," defineEventHandler",[201,2292,462],{"class":330},[201,2294,465],{"class":315},[201,2296,390],{"class":330},[201,2298,259],{"class":210},[201,2300,473],{"class":330},[201,2302,2303,2305,2307,2309,2311,2313,2315,2317],{"class":203,"line":334},[201,2304,453],{"class":315},[201,2306,456],{"class":330},[201,2308,498],{"class":326},[201,2310,462],{"class":330},[201,2312,465],{"class":315},[201,2314,390],{"class":330},[201,2316,2200],{"class":210},[201,2318,473],{"class":330},[201,2320,2321],{"class":203,"line":361},[201,2322,479],{"emptyLinePlaceholder":478},[201,2324,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343],{"class":203,"line":372},[201,2326,316],{"class":315},[201,2328,319],{"class":315},[201,2330,2290],{"class":322},[201,2332,327],{"class":326},[201,2334,618],{"class":486},[201,2336,621],{"class":330},[201,2338,2082],{"class":624},[201,2340,632],{"class":330},[201,2342,635],{"class":486},[201,2344,369],{"class":330},[201,2346,2347,2349,2351,2353,2355,2357,2359],{"class":203,"line":382},[201,2348,642],{"class":486},[201,2350,503],{"class":326},[201,2352,513],{"class":330},[201,2354,498],{"class":322},[201,2356,327],{"class":337},[201,2358,2082],{"class":326},[201,2360,418],{"class":337},[201,2362,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385],{"class":203,"line":400},[201,2364,660],{"class":326},[201,2366,663],{"class":330},[201,2368,666],{"class":322},[201,2370,327],{"class":337},[201,2372,671],{"class":330},[201,2374,844],{"class":337},[201,2376,341],{"class":330},[201,2378,390],{"class":330},[201,2380,2125],{"class":210},[201,2382,347],{"class":330},[201,2384,462],{"class":330},[201,2386,418],{"class":337},[201,2388,2389,2391,2393,2395,2397,2399],{"class":203,"line":406},[201,2390,701],{"class":315},[201,2392,456],{"class":330},[201,2394,2140],{"class":337},[201,2396,341],{"class":330},[201,2398,722],{"class":721},[201,2400,927],{"class":330},[201,2402,2403,2405],{"class":203,"line":412},[201,2404,415],{"class":330},[201,2406,418],{"class":326},[936,2408,2409,2413,2414,2416,2417,2420,2421,2423,2424,2426,2427,2429],{"color":938,"icon":13},[2410,2411,2412],"strong",{},"Note:"," ",[198,2415,428],{}," is always imported from ",[198,2418,2419],{},"evlog"," regardless of Nitro version. Only the module and ",[198,2422,424],{}," imports differ: ",[198,2425,1933],{}," for v3, ",[198,2428,2200],{}," for v2.",[259,2431,147],{"id":2432},"tanstack-start",[178,2434,2435,2436,2439,2440,2443,2444,341],{},"TanStack Start uses Nitro v3 under the hood. A project created with ",[198,2437,2438],{},"npm create @tanstack/start@latest"," already includes the ",[198,2441,2442],{},"nitro()"," Vite plugin — just install evlog and add a ",[198,2445,1897],{},[190,2447,2448],{"className":192,"code":217,"language":195,"meta":196,"style":196},[198,2449,2450],{"__ignoreMap":196},[201,2451,2452,2454,2456],{"class":203,"line":204},[201,2453,218],{"class":207},[201,2455,227],{"class":210},[201,2457,214],{"class":210},[190,2459,2461],{"className":305,"code":2460,"filename":1897,"language":308,"meta":196,"style":196},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  experimental: {\n    asyncContext: true,\n  },\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    })\n  ],\n})\n",[198,2462,2463,2481,2495,2499,2511,2520,2531,2535,2543,2551,2571,2577,2583],{"__ignoreMap":196},[201,2464,2465,2467,2469,2471,2473,2475,2477,2479],{"class":203,"line":204},[201,2466,453],{"class":315},[201,2468,456],{"class":330},[201,2470,1908],{"class":326},[201,2472,462],{"class":330},[201,2474,465],{"class":315},[201,2476,390],{"class":330},[201,2478,1892],{"class":210},[201,2480,473],{"class":330},[201,2482,2483,2485,2487,2489,2491,2493],{"class":203,"line":334},[201,2484,453],{"class":315},[201,2486,1925],{"class":326},[201,2488,1928],{"class":315},[201,2490,390],{"class":330},[201,2492,1933],{"class":210},[201,2494,473],{"class":330},[201,2496,2497],{"class":203,"line":361},[201,2498,479],{"emptyLinePlaceholder":478},[201,2500,2501,2503,2505,2507,2509],{"class":203,"line":372},[201,2502,316],{"class":315},[201,2504,319],{"class":315},[201,2506,1908],{"class":322},[201,2508,327],{"class":326},[201,2510,331],{"class":330},[201,2512,2513,2516,2518],{"class":203,"line":382},[201,2514,2515],{"class":337},"  experimental",[201,2517,341],{"class":330},[201,2519,369],{"class":330},[201,2521,2522,2525,2527,2529],{"class":203,"line":400},[201,2523,2524],{"class":337},"    asyncContext",[201,2526,341],{"class":330},[201,2528,722],{"class":721},[201,2530,358],{"class":330},[201,2532,2533],{"class":203,"line":406},[201,2534,409],{"class":330},[201,2536,2537,2539,2541],{"class":203,"line":412},[201,2538,338],{"class":337},[201,2540,341],{"class":330},[201,2542,1960],{"class":326},[201,2544,2545,2547,2549],{"class":203,"line":930},[201,2546,1965],{"class":322},[201,2548,327],{"class":326},[201,2550,331],{"class":330},[201,2552,2553,2555,2557,2559,2561,2563,2565,2567,2569],{"class":203,"line":1266},[201,2554,1974],{"class":337},[201,2556,341],{"class":330},[201,2558,456],{"class":330},[201,2560,1220],{"class":337},[201,2562,341],{"class":330},[201,2564,390],{"class":330},[201,2566,393],{"class":210},[201,2568,347],{"class":330},[201,2570,1992],{"class":330},[201,2572,2573,2575],{"class":203,"line":1276},[201,2574,1997],{"class":330},[201,2576,418],{"class":326},[201,2578,2579,2581],{"class":203,"line":1286},[201,2580,2004],{"class":326},[201,2582,358],{"class":330},[201,2584,2585,2587],{"class":203,"line":1292},[201,2586,415],{"class":330},[201,2588,418],{"class":326},[178,2590,2591,2592,2595,2596,2599],{},"That's it — evlog automatically logs all requests (method, path, status, duration) as wide events. To add custom context to the wide event from your routes, use ",[198,2593,2594],{},"useRequest()"," from ",[198,2597,2598],{},"nitro/context"," to access the request-scoped logger:",[190,2601,2604],{"className":305,"code":2602,"filename":2603,"language":308,"meta":196,"style":196},"import { createFileRoute } from '@tanstack/react-router'\nimport { useRequest } from 'nitro/context'\nimport type { RequestLogger } from 'evlog'\n\nexport const Route = createFileRoute('/api/hello')({\n  server: {\n    handlers: {\n      GET: async () => {\n        const req = useRequest()\n        const log = req.context.log as RequestLogger\n\n        log.set({ user: { id: 'user_123', plan: 'pro' } })\n\n        return Response.json({ ok: true })\n      },\n    },\n  },\n})\n","src/routes/api/hello.ts",[198,2605,2606,2626,2645,2667,2671,2698,2707,2716,2733,2747,2772,2776,2826,2830,2856,2862,2867,2872],{"__ignoreMap":196},[201,2607,2608,2610,2612,2615,2617,2619,2621,2624],{"class":203,"line":204},[201,2609,453],{"class":315},[201,2611,456],{"class":330},[201,2613,2614],{"class":326}," createFileRoute",[201,2616,462],{"class":330},[201,2618,465],{"class":315},[201,2620,390],{"class":330},[201,2622,2623],{"class":210},"@tanstack/react-router",[201,2625,473],{"class":330},[201,2627,2628,2630,2632,2635,2637,2639,2641,2643],{"class":203,"line":334},[201,2629,453],{"class":315},[201,2631,456],{"class":330},[201,2633,2634],{"class":326}," useRequest",[201,2636,462],{"class":330},[201,2638,465],{"class":315},[201,2640,390],{"class":330},[201,2642,2598],{"class":210},[201,2644,473],{"class":330},[201,2646,2647,2649,2652,2654,2657,2659,2661,2663,2665],{"class":203,"line":361},[201,2648,453],{"class":315},[201,2650,2651],{"class":315}," type",[201,2653,456],{"class":330},[201,2655,2656],{"class":326}," RequestLogger",[201,2658,462],{"class":330},[201,2660,465],{"class":315},[201,2662,390],{"class":330},[201,2664,2419],{"class":210},[201,2666,473],{"class":330},[201,2668,2669],{"class":203,"line":372},[201,2670,479],{"emptyLinePlaceholder":478},[201,2672,2673,2675,2677,2680,2682,2684,2686,2688,2691,2693,2696],{"class":203,"line":382},[201,2674,316],{"class":315},[201,2676,487],{"class":486},[201,2678,2679],{"class":326}," Route ",[201,2681,611],{"class":330},[201,2683,2614],{"class":322},[201,2685,327],{"class":326},[201,2687,347],{"class":330},[201,2689,2690],{"class":210},"/api/hello",[201,2692,347],{"class":330},[201,2694,2695],{"class":326},")(",[201,2697,331],{"class":330},[201,2699,2700,2703,2705],{"class":203,"line":400},[201,2701,2702],{"class":337},"  server",[201,2704,341],{"class":330},[201,2706,369],{"class":330},[201,2708,2709,2712,2714],{"class":203,"line":406},[201,2710,2711],{"class":337},"    handlers",[201,2713,341],{"class":330},[201,2715,369],{"class":330},[201,2717,2718,2721,2723,2726,2729,2731],{"class":203,"line":412},[201,2719,2720],{"class":322},"      GET",[201,2722,341],{"class":330},[201,2724,2725],{"class":486}," async",[201,2727,2728],{"class":330}," ()",[201,2730,635],{"class":486},[201,2732,369],{"class":330},[201,2734,2735,2738,2741,2743,2745],{"class":203,"line":930},[201,2736,2737],{"class":486},"        const",[201,2739,2740],{"class":326}," req",[201,2742,513],{"class":330},[201,2744,2634],{"class":322},[201,2746,829],{"class":337},[201,2748,2749,2751,2753,2755,2757,2759,2762,2764,2766,2769],{"class":203,"line":1266},[201,2750,2737],{"class":486},[201,2752,503],{"class":326},[201,2754,513],{"class":330},[201,2756,2740],{"class":326},[201,2758,663],{"class":330},[201,2760,2761],{"class":326},"context",[201,2763,663],{"class":330},[201,2765,1300],{"class":326},[201,2767,2768],{"class":315}," as",[201,2770,2771],{"class":207}," RequestLogger\n",[201,2773,2774],{"class":203,"line":1276},[201,2775,479],{"emptyLinePlaceholder":478},[201,2777,2778,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2804,2806,2808,2811,2813,2815,2818,2820,2822,2824],{"class":203,"line":1286},[201,2779,2780],{"class":326},"        log",[201,2782,663],{"class":330},[201,2784,666],{"class":322},[201,2786,327],{"class":337},[201,2788,671],{"class":330},[201,2790,674],{"class":337},[201,2792,341],{"class":330},[201,2794,456],{"class":330},[201,2796,681],{"class":337},[201,2798,341],{"class":330},[201,2800,390],{"class":330},[201,2802,2803],{"class":210},"user_123",[201,2805,347],{"class":330},[201,2807,495],{"class":330},[201,2809,2810],{"class":337}," plan",[201,2812,341],{"class":330},[201,2814,390],{"class":330},[201,2816,2817],{"class":210},"pro",[201,2819,347],{"class":330},[201,2821,462],{"class":330},[201,2823,462],{"class":330},[201,2825,418],{"class":337},[201,2827,2828],{"class":203,"line":1292},[201,2829,479],{"emptyLinePlaceholder":478},[201,2831,2833,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854],{"class":203,"line":2832},14,[201,2834,2835],{"class":315},"        return",[201,2837,704],{"class":326},[201,2839,663],{"class":330},[201,2841,709],{"class":322},[201,2843,327],{"class":337},[201,2845,671],{"class":330},[201,2847,2140],{"class":337},[201,2849,341],{"class":330},[201,2851,722],{"class":721},[201,2853,462],{"class":330},[201,2855,418],{"class":337},[201,2857,2859],{"class":203,"line":2858},15,[201,2860,2861],{"class":330},"      },\n",[201,2863,2865],{"class":203,"line":2864},16,[201,2866,403],{"class":330},[201,2868,2870],{"class":203,"line":2869},17,[201,2871,409],{"class":330},[201,2873,2875,2877],{"class":203,"line":2874},18,[201,2876,415],{"class":330},[201,2878,418],{"class":326},[936,2880,2881,2883,2884,2886,2887,2890],{"color":938,"icon":13},[198,2882,2594],{}," is an experimental Nitro v3 feature that uses ",[198,2885,1787],{}," to access the current request from anywhere in the call stack. It requires ",[198,2888,2889],{},"experimental.asyncContext: true"," and works on Node.js and Bun runtimes.",[178,2892,2893,2894,2897,2898,425,2901,429,2904,2907],{},"For ",[198,2895,2896],{},"throw createError()"," to return structured JSON with ",[198,2899,2900],{},"why",[198,2902,2903],{},"fix",[198,2905,2906],{},"link",", add the error handling middleware to your root route:",[190,2909,2912],{"className":305,"code":2910,"filename":2911,"language":308,"meta":196,"style":196},"import { createRootRoute } from '@tanstack/react-router'\nimport { createMiddleware } from '@tanstack/react-start'\nimport { evlogErrorHandler } from 'evlog/nitro/v3'\n\nexport const Route = createRootRoute({\n  server: {\n    middleware: [createMiddleware().server(evlogErrorHandler)],\n  },\n  // ... head, shellComponent, etc.\n})\n","src/routes/__root.tsx",[198,2913,2914,2933,2953,2972,2976,2992,3000,3024,3028,3033],{"__ignoreMap":196},[201,2915,2916,2918,2920,2923,2925,2927,2929,2931],{"class":203,"line":204},[201,2917,453],{"class":315},[201,2919,456],{"class":330},[201,2921,2922],{"class":326}," createRootRoute",[201,2924,462],{"class":330},[201,2926,465],{"class":315},[201,2928,390],{"class":330},[201,2930,2623],{"class":210},[201,2932,473],{"class":330},[201,2934,2935,2937,2939,2942,2944,2946,2948,2951],{"class":203,"line":334},[201,2936,453],{"class":315},[201,2938,456],{"class":330},[201,2940,2941],{"class":326}," createMiddleware",[201,2943,462],{"class":330},[201,2945,465],{"class":315},[201,2947,390],{"class":330},[201,2949,2950],{"class":210},"@tanstack/react-start",[201,2952,473],{"class":330},[201,2954,2955,2957,2959,2962,2964,2966,2968,2970],{"class":203,"line":361},[201,2956,453],{"class":315},[201,2958,456],{"class":330},[201,2960,2961],{"class":326}," evlogErrorHandler",[201,2963,462],{"class":330},[201,2965,465],{"class":315},[201,2967,390],{"class":330},[201,2969,1933],{"class":210},[201,2971,473],{"class":330},[201,2973,2974],{"class":203,"line":372},[201,2975,479],{"emptyLinePlaceholder":478},[201,2977,2978,2980,2982,2984,2986,2988,2990],{"class":203,"line":382},[201,2979,316],{"class":315},[201,2981,487],{"class":486},[201,2983,2679],{"class":326},[201,2985,611],{"class":330},[201,2987,2922],{"class":322},[201,2989,327],{"class":326},[201,2991,331],{"class":330},[201,2993,2994,2996,2998],{"class":203,"line":400},[201,2995,2702],{"class":337},[201,2997,341],{"class":330},[201,2999,369],{"class":330},[201,3001,3002,3005,3007,3009,3012,3014,3016,3019,3022],{"class":203,"line":406},[201,3003,3004],{"class":337},"    middleware",[201,3006,341],{"class":330},[201,3008,344],{"class":326},[201,3010,3011],{"class":322},"createMiddleware",[201,3013,1350],{"class":326},[201,3015,663],{"class":330},[201,3017,3018],{"class":322},"server",[201,3020,3021],{"class":326},"(evlogErrorHandler)]",[201,3023,358],{"class":330},[201,3025,3026],{"class":203,"line":412},[201,3027,409],{"class":330},[201,3029,3030],{"class":203,"line":930},[201,3031,3032],{"class":654},"  // ... head, shellComponent, etc.\n",[201,3034,3035,3037],{"class":203,"line":1266},[201,3036,415],{"class":330},[201,3038,418],{"class":326},[936,3040,1878,3041,3044],{"color":1876,"icon":1877},[289,3042,3043],{"href":148},"TanStack Start example"," with API routes, structured errors, and wide event logging.",[259,3046,3048],{"id":3047},"cloudflare-workers","Cloudflare Workers",[178,3050,3051],{},"Use the Workers adapter for structured logs and correct platform severity.",[190,3053,3056],{"className":305,"code":3054,"filename":3055,"language":308,"meta":196,"style":196},"import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'\n\ninitWorkersLogger({\n  env: { service: 'edge-api' },\n})\n\nexport default {\n  async fetch(request: Request) {\n    const log = createWorkersLogger(request)\n\n    try {\n      log.set({ route: 'health' })\n      const response = new Response('ok', { status: 200 })\n      log.emit({ status: response.status })\n      return response\n    } catch (error) {\n      log.error(error as Error)\n      log.emit({ status: 500 })\n      throw error\n    }\n  },\n}\n","src/index.ts",[198,3057,3058,3083,3087,3096,3118,3124,3128,3136,3157,3174,3178,3185,3214,3255,3283,3291,3307,3326,3349,3358,3364,3369],{"__ignoreMap":196},[201,3059,3060,3062,3064,3067,3069,3072,3074,3076,3078,3081],{"class":203,"line":204},[201,3061,453],{"class":315},[201,3063,456],{"class":330},[201,3065,3066],{"class":326}," initWorkersLogger",[201,3068,495],{"class":330},[201,3070,3071],{"class":326}," createWorkersLogger",[201,3073,462],{"class":330},[201,3075,465],{"class":315},[201,3077,390],{"class":330},[201,3079,3080],{"class":210},"evlog/workers",[201,3082,473],{"class":330},[201,3084,3085],{"class":203,"line":334},[201,3086,479],{"emptyLinePlaceholder":478},[201,3088,3089,3092,3094],{"class":203,"line":361},[201,3090,3091],{"class":322},"initWorkersLogger",[201,3093,327],{"class":326},[201,3095,331],{"class":330},[201,3097,3098,3101,3103,3105,3107,3109,3111,3114,3116],{"class":203,"line":372},[201,3099,3100],{"class":337},"  env",[201,3102,341],{"class":330},[201,3104,456],{"class":330},[201,3106,1220],{"class":337},[201,3108,341],{"class":330},[201,3110,390],{"class":330},[201,3112,3113],{"class":210},"edge-api",[201,3115,347],{"class":330},[201,3117,1992],{"class":330},[201,3119,3120,3122],{"class":203,"line":382},[201,3121,415],{"class":330},[201,3123,418],{"class":326},[201,3125,3126],{"class":203,"line":400},[201,3127,479],{"emptyLinePlaceholder":478},[201,3129,3130,3132,3134],{"class":203,"line":406},[201,3131,316],{"class":315},[201,3133,319],{"class":315},[201,3135,369],{"class":330},[201,3137,3138,3141,3144,3146,3148,3150,3153,3155],{"class":203,"line":412},[201,3139,3140],{"class":486},"  async",[201,3142,3143],{"class":337}," fetch",[201,3145,327],{"class":330},[201,3147,625],{"class":624},[201,3149,341],{"class":330},[201,3151,3152],{"class":207}," Request",[201,3154,632],{"class":330},[201,3156,369],{"class":330},[201,3158,3159,3162,3164,3166,3168,3170,3172],{"class":203,"line":930},[201,3160,3161],{"class":486},"    const",[201,3163,503],{"class":326},[201,3165,513],{"class":330},[201,3167,3071],{"class":322},[201,3169,327],{"class":337},[201,3171,625],{"class":326},[201,3173,418],{"class":337},[201,3175,3176],{"class":203,"line":1266},[201,3177,479],{"emptyLinePlaceholder":478},[201,3179,3180,3183],{"class":203,"line":1276},[201,3181,3182],{"class":315},"    try",[201,3184,369],{"class":330},[201,3186,3187,3190,3192,3194,3196,3198,3201,3203,3205,3208,3210,3212],{"class":203,"line":1286},[201,3188,3189],{"class":326},"      log",[201,3191,663],{"class":330},[201,3193,666],{"class":322},[201,3195,327],{"class":337},[201,3197,671],{"class":330},[201,3199,3200],{"class":337}," route",[201,3202,341],{"class":330},[201,3204,390],{"class":330},[201,3206,3207],{"class":210},"health",[201,3209,347],{"class":330},[201,3211,462],{"class":330},[201,3213,418],{"class":337},[201,3215,3216,3219,3222,3224,3227,3229,3231,3233,3236,3238,3240,3242,3245,3247,3251,3253],{"class":203,"line":1292},[201,3217,3218],{"class":486},"      const",[201,3220,3221],{"class":326}," response",[201,3223,513],{"class":330},[201,3225,3226],{"class":330}," new",[201,3228,704],{"class":322},[201,3230,327],{"class":337},[201,3232,347],{"class":330},[201,3234,3235],{"class":210},"ok",[201,3237,347],{"class":330},[201,3239,495],{"class":330},[201,3241,456],{"class":330},[201,3243,3244],{"class":337}," status",[201,3246,341],{"class":330},[201,3248,3250],{"class":3249},"sbssI"," 200",[201,3252,462],{"class":330},[201,3254,418],{"class":337},[201,3256,3257,3259,3261,3264,3266,3268,3270,3272,3274,3276,3279,3281],{"class":203,"line":2832},[201,3258,3189],{"class":326},[201,3260,663],{"class":330},[201,3262,3263],{"class":322},"emit",[201,3265,327],{"class":337},[201,3267,671],{"class":330},[201,3269,3244],{"class":337},[201,3271,341],{"class":330},[201,3273,3221],{"class":326},[201,3275,663],{"class":330},[201,3277,3278],{"class":326},"status",[201,3280,462],{"class":330},[201,3282,418],{"class":337},[201,3284,3285,3288],{"class":203,"line":2858},[201,3286,3287],{"class":315},"      return",[201,3289,3290],{"class":326}," response\n",[201,3292,3293,3295,3298,3300,3303,3305],{"class":203,"line":2864},[201,3294,1997],{"class":330},[201,3296,3297],{"class":315}," catch",[201,3299,621],{"class":337},[201,3301,3302],{"class":326},"error",[201,3304,908],{"class":337},[201,3306,331],{"class":330},[201,3308,3309,3311,3313,3315,3317,3319,3321,3324],{"class":203,"line":2869},[201,3310,3189],{"class":326},[201,3312,663],{"class":330},[201,3314,3302],{"class":322},[201,3316,327],{"class":337},[201,3318,3302],{"class":326},[201,3320,2768],{"class":315},[201,3322,3323],{"class":207}," Error",[201,3325,418],{"class":337},[201,3327,3328,3330,3332,3334,3336,3338,3340,3342,3345,3347],{"class":203,"line":2874},[201,3329,3189],{"class":326},[201,3331,663],{"class":330},[201,3333,3263],{"class":322},[201,3335,327],{"class":337},[201,3337,671],{"class":330},[201,3339,3244],{"class":337},[201,3341,341],{"class":330},[201,3343,3344],{"class":3249}," 500",[201,3346,462],{"class":330},[201,3348,418],{"class":337},[201,3350,3352,3355],{"class":203,"line":3351},19,[201,3353,3354],{"class":315},"      throw",[201,3356,3357],{"class":326}," error\n",[201,3359,3361],{"class":203,"line":3360},20,[201,3362,3363],{"class":330},"    }\n",[201,3365,3367],{"class":203,"line":3366},21,[201,3368,409],{"class":330},[201,3370,3372],{"class":203,"line":3371},22,[201,3373,1064],{"class":330},[178,3375,3376],{},"Disable invocation logs to avoid duplicate request logs:",[190,3378,3383],{"className":3379,"code":3380,"filename":3381,"language":3382,"meta":196,"style":196},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[198,3384,3385,3390],{"__ignoreMap":196},[201,3386,3387],{"class":203,"line":204},[201,3388,3389],{},"[observability.logs]\n",[201,3391,3392],{"class":203,"line":334},[201,3393,3394],{},"invocation_logs = false\n",[178,3396,3397],{},"Notes:",[3399,3400,3401,3411,3417],"ul",{},[3402,3403,3404,3406,3407,3410],"li",{},[198,3405,1073],{}," defaults to ",[198,3408,3409],{},"cf-ray"," when available",[3402,3412,3413,3416],{},[198,3414,3415],{},"request.cf"," is included (colo, country, asn) unless disabled",[3402,3418,3419,3420,3423],{},"Use ",[198,3421,3422],{},"headerAllowlist"," to avoid logging sensitive headers",[936,3425,3426,3427,3433],{"color":1876,"icon":1877},"See the full ",[289,3428,3432],{"href":3429,"rel":3430},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[3431],"nofollow","workers example"," for a complete working project.",[259,3435,152],{"id":3436},"hono",[178,3438,3439,3440,3443],{},"evlog provides a first-class Hono middleware at ",[198,3441,3442],{},"evlog/hono",". It auto-creates a request-scoped logger and emits a wide event on response.",[190,3445,3447],{"className":192,"code":3446,"language":195,"meta":196,"style":196},"bun add evlog hono\n",[198,3448,3449],{"__ignoreMap":196},[201,3450,3451,3453,3455,3458],{"class":203,"line":204},[201,3452,247],{"class":207},[201,3454,211],{"class":210},[201,3456,3457],{"class":210}," evlog",[201,3459,3460],{"class":210}," hono\n",[190,3462,3464],{"className":305,"code":3463,"filename":3055,"language":308,"meta":196,"style":196},"import { serve } from '@hono/node-server'\nimport { Hono } from 'hono'\nimport { initLogger } from 'evlog'\nimport { evlog, type EvlogVariables } from 'evlog/hono'\n\ninitLogger({\n  env: { service: 'hono-api' },\n})\n\nconst app = new Hono\u003CEvlogVariables>()\n\napp.use(evlog())\n\napp.get('/api/users', (c) => {\n  const log = c.get('log')\n  log.set({ users: { count: 42 } })\n  return c.json({ users: [] })\n})\n\nserve({ fetch: app.fetch, port: 3000 })\n",[198,3465,3466,3486,3505,3524,3549,3553,3562,3583,3589,3593,3618,3622,3639,3643,3673,3698,3731,3756,3762,3766],{"__ignoreMap":196},[201,3467,3468,3470,3472,3475,3477,3479,3481,3484],{"class":203,"line":204},[201,3469,453],{"class":315},[201,3471,456],{"class":330},[201,3473,3474],{"class":326}," serve",[201,3476,462],{"class":330},[201,3478,465],{"class":315},[201,3480,390],{"class":330},[201,3482,3483],{"class":210},"@hono/node-server",[201,3485,473],{"class":330},[201,3487,3488,3490,3492,3495,3497,3499,3501,3503],{"class":203,"line":334},[201,3489,453],{"class":315},[201,3491,456],{"class":330},[201,3493,3494],{"class":326}," Hono",[201,3496,462],{"class":330},[201,3498,465],{"class":315},[201,3500,390],{"class":330},[201,3502,3436],{"class":210},[201,3504,473],{"class":330},[201,3506,3507,3509,3511,3514,3516,3518,3520,3522],{"class":203,"line":361},[201,3508,453],{"class":315},[201,3510,456],{"class":330},[201,3512,3513],{"class":326}," initLogger",[201,3515,462],{"class":330},[201,3517,465],{"class":315},[201,3519,390],{"class":330},[201,3521,2419],{"class":210},[201,3523,473],{"class":330},[201,3525,3526,3528,3530,3532,3534,3536,3539,3541,3543,3545,3547],{"class":203,"line":372},[201,3527,453],{"class":315},[201,3529,456],{"class":330},[201,3531,3457],{"class":326},[201,3533,495],{"class":330},[201,3535,2651],{"class":315},[201,3537,3538],{"class":326}," EvlogVariables",[201,3540,462],{"class":330},[201,3542,465],{"class":315},[201,3544,390],{"class":330},[201,3546,3442],{"class":210},[201,3548,473],{"class":330},[201,3550,3551],{"class":203,"line":382},[201,3552,479],{"emptyLinePlaceholder":478},[201,3554,3555,3558,3560],{"class":203,"line":400},[201,3556,3557],{"class":322},"initLogger",[201,3559,327],{"class":326},[201,3561,331],{"class":330},[201,3563,3564,3566,3568,3570,3572,3574,3576,3579,3581],{"class":203,"line":406},[201,3565,3100],{"class":337},[201,3567,341],{"class":330},[201,3569,456],{"class":330},[201,3571,1220],{"class":337},[201,3573,341],{"class":330},[201,3575,390],{"class":330},[201,3577,3578],{"class":210},"hono-api",[201,3580,347],{"class":330},[201,3582,1992],{"class":330},[201,3584,3585,3587],{"class":203,"line":412},[201,3586,415],{"class":330},[201,3588,418],{"class":326},[201,3590,3591],{"class":203,"line":930},[201,3592,479],{"emptyLinePlaceholder":478},[201,3594,3595,3598,3601,3603,3605,3607,3610,3613,3616],{"class":203,"line":1266},[201,3596,3597],{"class":486},"const",[201,3599,3600],{"class":326}," app ",[201,3602,611],{"class":330},[201,3604,3226],{"class":330},[201,3606,3494],{"class":322},[201,3608,3609],{"class":330},"\u003C",[201,3611,3612],{"class":207},"EvlogVariables",[201,3614,3615],{"class":330},">",[201,3617,829],{"class":326},[201,3619,3620],{"class":203,"line":1276},[201,3621,479],{"emptyLinePlaceholder":478},[201,3623,3624,3627,3629,3632,3634,3636],{"class":203,"line":1286},[201,3625,3626],{"class":326},"app",[201,3628,663],{"class":330},[201,3630,3631],{"class":322},"use",[201,3633,327],{"class":326},[201,3635,2419],{"class":322},[201,3637,3638],{"class":326},"())\n",[201,3640,3641],{"class":203,"line":1292},[201,3642,479],{"emptyLinePlaceholder":478},[201,3644,3645,3647,3649,3651,3653,3655,3658,3660,3662,3664,3667,3669,3671],{"class":203,"line":2832},[201,3646,3626],{"class":326},[201,3648,663],{"class":330},[201,3650,896],{"class":322},[201,3652,327],{"class":326},[201,3654,347],{"class":330},[201,3656,3657],{"class":210},"/api/users",[201,3659,347],{"class":330},[201,3661,495],{"class":330},[201,3663,621],{"class":330},[201,3665,3666],{"class":624},"c",[201,3668,632],{"class":330},[201,3670,635],{"class":486},[201,3672,369],{"class":330},[201,3674,3675,3677,3679,3681,3684,3686,3688,3690,3692,3694,3696],{"class":203,"line":2858},[201,3676,642],{"class":486},[201,3678,503],{"class":326},[201,3680,513],{"class":330},[201,3682,3683],{"class":326}," c",[201,3685,663],{"class":330},[201,3687,896],{"class":322},[201,3689,327],{"class":337},[201,3691,347],{"class":330},[201,3693,1300],{"class":210},[201,3695,347],{"class":330},[201,3697,418],{"class":337},[201,3699,3700,3702,3704,3706,3708,3710,3713,3715,3717,3720,3722,3725,3727,3729],{"class":203,"line":2864},[201,3701,660],{"class":326},[201,3703,663],{"class":330},[201,3705,666],{"class":322},[201,3707,327],{"class":337},[201,3709,671],{"class":330},[201,3711,3712],{"class":337}," users",[201,3714,341],{"class":330},[201,3716,456],{"class":330},[201,3718,3719],{"class":337}," count",[201,3721,341],{"class":330},[201,3723,3724],{"class":3249}," 42",[201,3726,462],{"class":330},[201,3728,462],{"class":330},[201,3730,418],{"class":337},[201,3732,3733,3735,3737,3739,3741,3743,3745,3747,3749,3752,3754],{"class":203,"line":2869},[201,3734,701],{"class":315},[201,3736,3683],{"class":326},[201,3738,663],{"class":330},[201,3740,709],{"class":322},[201,3742,327],{"class":337},[201,3744,671],{"class":330},[201,3746,3712],{"class":337},[201,3748,341],{"class":330},[201,3750,3751],{"class":337}," [] ",[201,3753,415],{"class":330},[201,3755,418],{"class":337},[201,3757,3758,3760],{"class":203,"line":2874},[201,3759,415],{"class":330},[201,3761,418],{"class":326},[201,3763,3764],{"class":203,"line":3351},[201,3765,479],{"emptyLinePlaceholder":478},[201,3767,3768,3771,3773,3775,3777,3779,3782,3784,3787,3789,3792,3794,3797,3799],{"class":203,"line":3360},[201,3769,3770],{"class":322},"serve",[201,3772,327],{"class":326},[201,3774,671],{"class":330},[201,3776,3143],{"class":337},[201,3778,341],{"class":330},[201,3780,3781],{"class":326}," app",[201,3783,663],{"class":330},[201,3785,3786],{"class":326},"fetch",[201,3788,495],{"class":330},[201,3790,3791],{"class":337}," port",[201,3793,341],{"class":330},[201,3795,3796],{"class":3249}," 3000",[201,3798,462],{"class":330},[201,3800,418],{"class":326},[178,3802,3803,3804,3807],{},"The ",[198,3805,3806],{},"evlog()"," middleware supports the same features as Nuxt/Next.js — drain adapters, enrichers, and tail sampling:",[190,3809,3811],{"className":305,"code":3810,"language":308,"meta":196,"style":196},"import { createAxiomDrain } from 'evlog/axiom'\nimport { createUserAgentEnricher } from 'evlog/enrichers'\n\nconst userAgent = createUserAgentEnricher()\n\napp.use(evlog({\n  include: ['/api/**'],\n  exclude: ['/_internal/**'],\n  routes: {\n    '/api/auth/**': { service: 'auth-service' },\n  },\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n}))\n",[198,3812,3813,3833,3853,3857,3870,3874,3890,3910,3930,3939,3966,3970,3983,4001,4012,4040,4044,4061,4105,4109],{"__ignoreMap":196},[201,3814,3815,3817,3819,3822,3824,3826,3828,3831],{"class":203,"line":204},[201,3816,453],{"class":315},[201,3818,456],{"class":330},[201,3820,3821],{"class":326}," createAxiomDrain",[201,3823,462],{"class":330},[201,3825,465],{"class":315},[201,3827,390],{"class":330},[201,3829,3830],{"class":210},"evlog/axiom",[201,3832,473],{"class":330},[201,3834,3835,3837,3839,3842,3844,3846,3848,3851],{"class":203,"line":334},[201,3836,453],{"class":315},[201,3838,456],{"class":330},[201,3840,3841],{"class":326}," createUserAgentEnricher",[201,3843,462],{"class":330},[201,3845,465],{"class":315},[201,3847,390],{"class":330},[201,3849,3850],{"class":210},"evlog/enrichers",[201,3852,473],{"class":330},[201,3854,3855],{"class":203,"line":361},[201,3856,479],{"emptyLinePlaceholder":478},[201,3858,3859,3861,3864,3866,3868],{"class":203,"line":372},[201,3860,3597],{"class":486},[201,3862,3863],{"class":326}," userAgent ",[201,3865,611],{"class":330},[201,3867,3841],{"class":322},[201,3869,829],{"class":326},[201,3871,3872],{"class":203,"line":382},[201,3873,479],{"emptyLinePlaceholder":478},[201,3875,3876,3878,3880,3882,3884,3886,3888],{"class":203,"line":400},[201,3877,3626],{"class":326},[201,3879,663],{"class":330},[201,3881,3631],{"class":322},[201,3883,327],{"class":326},[201,3885,2419],{"class":322},[201,3887,327],{"class":326},[201,3889,331],{"class":330},[201,3891,3892,3895,3897,3899,3901,3904,3906,3908],{"class":203,"line":406},[201,3893,3894],{"class":337},"  include",[201,3896,341],{"class":330},[201,3898,344],{"class":326},[201,3900,347],{"class":330},[201,3902,3903],{"class":210},"/api/**",[201,3905,347],{"class":330},[201,3907,355],{"class":326},[201,3909,358],{"class":330},[201,3911,3912,3915,3917,3919,3921,3924,3926,3928],{"class":203,"line":412},[201,3913,3914],{"class":337},"  exclude",[201,3916,341],{"class":330},[201,3918,344],{"class":326},[201,3920,347],{"class":330},[201,3922,3923],{"class":210},"/_internal/**",[201,3925,347],{"class":330},[201,3927,355],{"class":326},[201,3929,358],{"class":330},[201,3931,3932,3935,3937],{"class":203,"line":930},[201,3933,3934],{"class":337},"  routes",[201,3936,341],{"class":330},[201,3938,369],{"class":330},[201,3940,3941,3944,3947,3949,3951,3953,3955,3957,3959,3962,3964],{"class":203,"line":1266},[201,3942,3943],{"class":330},"    '",[201,3945,3946],{"class":337},"/api/auth/**",[201,3948,347],{"class":330},[201,3950,341],{"class":330},[201,3952,456],{"class":330},[201,3954,1220],{"class":337},[201,3956,341],{"class":330},[201,3958,390],{"class":330},[201,3960,3961],{"class":210},"auth-service",[201,3963,347],{"class":330},[201,3965,1992],{"class":330},[201,3967,3968],{"class":203,"line":1276},[201,3969,409],{"class":330},[201,3971,3972,3975,3977,3979,3981],{"class":203,"line":1286},[201,3973,3974],{"class":337},"  drain",[201,3976,341],{"class":330},[201,3978,3821],{"class":322},[201,3980,1350],{"class":326},[201,3982,358],{"class":330},[201,3984,3985,3988,3990,3992,3995,3997,3999],{"class":203,"line":1292},[201,3986,3987],{"class":322},"  enrich",[201,3989,341],{"class":330},[201,3991,621],{"class":330},[201,3993,3994],{"class":624},"ctx",[201,3996,632],{"class":330},[201,3998,635],{"class":486},[201,4000,369],{"class":330},[201,4002,4003,4006,4008,4010],{"class":203,"line":2832},[201,4004,4005],{"class":322},"    userAgent",[201,4007,327],{"class":337},[201,4009,3994],{"class":326},[201,4011,418],{"class":337},[201,4013,4014,4017,4019,4021,4023,4026,4028,4031,4033,4035,4037],{"class":203,"line":2858},[201,4015,4016],{"class":326},"    ctx",[201,4018,663],{"class":330},[201,4020,2082],{"class":326},[201,4022,663],{"class":330},[201,4024,4025],{"class":326},"region",[201,4027,513],{"class":330},[201,4029,4030],{"class":326}," process",[201,4032,663],{"class":330},[201,4034,1521],{"class":326},[201,4036,663],{"class":330},[201,4038,4039],{"class":326},"FLY_REGION\n",[201,4041,4042],{"class":203,"line":2864},[201,4043,409],{"class":330},[201,4045,4046,4049,4051,4053,4055,4057,4059],{"class":203,"line":2869},[201,4047,4048],{"class":322},"  keep",[201,4050,341],{"class":330},[201,4052,621],{"class":330},[201,4054,3994],{"class":624},[201,4056,632],{"class":330},[201,4058,635],{"class":486},[201,4060,369],{"class":330},[201,4062,4063,4066,4068,4070,4072,4075,4078,4081,4083,4085,4088,4091,4093,4095,4097,4100,4102],{"class":203,"line":2874},[201,4064,4065],{"class":315},"    if",[201,4067,621],{"class":337},[201,4069,3994],{"class":326},[201,4071,663],{"class":330},[201,4073,4074],{"class":326},"duration",[201,4076,4077],{"class":330}," &&",[201,4079,4080],{"class":326}," ctx",[201,4082,663],{"class":330},[201,4084,4074],{"class":326},[201,4086,4087],{"class":330}," >",[201,4089,4090],{"class":3249}," 2000",[201,4092,908],{"class":337},[201,4094,3994],{"class":326},[201,4096,663],{"class":330},[201,4098,4099],{"class":326},"shouldKeep",[201,4101,513],{"class":330},[201,4103,4104],{"class":721}," true\n",[201,4106,4107],{"class":203,"line":3351},[201,4108,409],{"class":330},[201,4110,4111,4113],{"class":203,"line":3360},[201,4112,415],{"class":330},[201,4114,4115],{"class":326},"))\n",[178,4117,4118,4119,4121,4122,663],{},"Use the ",[198,4120,3612],{}," type to get typed access to ",[198,4123,4124],{},"c.get('log')",[936,4126,4127,4128,4131],{"color":1876,"icon":1877},"See the ",[289,4129,4130],{"href":153},"Hono example"," for a complete guide with drain, enrichers, tail sampling, and error handling.",[259,4133,157],{"id":4134},"express",[178,4136,4137,4138,4141,4142,4145,4146,4148],{},"evlog provides Express middleware at ",[198,4139,4140],{},"evlog/express",". It auto-creates a request-scoped logger accessible via ",[198,4143,4144],{},"req.log"," or ",[198,4147,1760],{}," and emits a wide event when the response finishes.",[190,4150,4152],{"className":192,"code":4151,"language":195,"meta":196,"style":196},"npm install evlog express\n",[198,4153,4154],{"__ignoreMap":196},[201,4155,4156,4158,4160,4162],{"class":203,"line":204},[201,4157,218],{"class":207},[201,4159,227],{"class":210},[201,4161,3457],{"class":210},[201,4163,4164],{"class":210}," express\n",[190,4166,4168],{"className":305,"code":4167,"filename":3055,"language":308,"meta":196,"style":196},"import express from 'express'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog/express'\n\ninitLogger({\n  env: { service: 'express-api' },\n})\n\nconst app = express()\n\napp.use(evlog())\n\napp.get('/api/users', (req, res) => {\n  req.log.set({ users: { count: 42 } })\n  res.json({ users: [] })\n})\n\napp.listen(3000)\n",[198,4169,4170,4185,4203,4221,4225,4233,4254,4260,4264,4277,4281,4295,4299,4333,4368,4391,4397,4401],{"__ignoreMap":196},[201,4171,4172,4174,4177,4179,4181,4183],{"class":203,"line":204},[201,4173,453],{"class":315},[201,4175,4176],{"class":326}," express ",[201,4178,1928],{"class":315},[201,4180,390],{"class":330},[201,4182,4134],{"class":210},[201,4184,473],{"class":330},[201,4186,4187,4189,4191,4193,4195,4197,4199,4201],{"class":203,"line":334},[201,4188,453],{"class":315},[201,4190,456],{"class":330},[201,4192,3513],{"class":326},[201,4194,462],{"class":330},[201,4196,465],{"class":315},[201,4198,390],{"class":330},[201,4200,2419],{"class":210},[201,4202,473],{"class":330},[201,4204,4205,4207,4209,4211,4213,4215,4217,4219],{"class":203,"line":361},[201,4206,453],{"class":315},[201,4208,456],{"class":330},[201,4210,3457],{"class":326},[201,4212,462],{"class":330},[201,4214,465],{"class":315},[201,4216,390],{"class":330},[201,4218,4140],{"class":210},[201,4220,473],{"class":330},[201,4222,4223],{"class":203,"line":372},[201,4224,479],{"emptyLinePlaceholder":478},[201,4226,4227,4229,4231],{"class":203,"line":382},[201,4228,3557],{"class":322},[201,4230,327],{"class":326},[201,4232,331],{"class":330},[201,4234,4235,4237,4239,4241,4243,4245,4247,4250,4252],{"class":203,"line":400},[201,4236,3100],{"class":337},[201,4238,341],{"class":330},[201,4240,456],{"class":330},[201,4242,1220],{"class":337},[201,4244,341],{"class":330},[201,4246,390],{"class":330},[201,4248,4249],{"class":210},"express-api",[201,4251,347],{"class":330},[201,4253,1992],{"class":330},[201,4255,4256,4258],{"class":203,"line":406},[201,4257,415],{"class":330},[201,4259,418],{"class":326},[201,4261,4262],{"class":203,"line":412},[201,4263,479],{"emptyLinePlaceholder":478},[201,4265,4266,4268,4270,4272,4275],{"class":203,"line":930},[201,4267,3597],{"class":486},[201,4269,3600],{"class":326},[201,4271,611],{"class":330},[201,4273,4274],{"class":322}," express",[201,4276,829],{"class":326},[201,4278,4279],{"class":203,"line":1266},[201,4280,479],{"emptyLinePlaceholder":478},[201,4282,4283,4285,4287,4289,4291,4293],{"class":203,"line":1276},[201,4284,3626],{"class":326},[201,4286,663],{"class":330},[201,4288,3631],{"class":322},[201,4290,327],{"class":326},[201,4292,2419],{"class":322},[201,4294,3638],{"class":326},[201,4296,4297],{"class":203,"line":1286},[201,4298,479],{"emptyLinePlaceholder":478},[201,4300,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4322,4324,4327,4329,4331],{"class":203,"line":1292},[201,4302,3626],{"class":326},[201,4304,663],{"class":330},[201,4306,896],{"class":322},[201,4308,327],{"class":326},[201,4310,347],{"class":330},[201,4312,3657],{"class":210},[201,4314,347],{"class":330},[201,4316,495],{"class":330},[201,4318,621],{"class":330},[201,4320,4321],{"class":624},"req",[201,4323,495],{"class":330},[201,4325,4326],{"class":624}," res",[201,4328,632],{"class":330},[201,4330,635],{"class":486},[201,4332,369],{"class":330},[201,4334,4335,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366],{"class":203,"line":2832},[201,4336,4337],{"class":326},"  req",[201,4339,663],{"class":330},[201,4341,1300],{"class":326},[201,4343,663],{"class":330},[201,4345,666],{"class":322},[201,4347,327],{"class":337},[201,4349,671],{"class":330},[201,4351,3712],{"class":337},[201,4353,341],{"class":330},[201,4355,456],{"class":330},[201,4357,3719],{"class":337},[201,4359,341],{"class":330},[201,4361,3724],{"class":3249},[201,4363,462],{"class":330},[201,4365,462],{"class":330},[201,4367,418],{"class":337},[201,4369,4370,4373,4375,4377,4379,4381,4383,4385,4387,4389],{"class":203,"line":2858},[201,4371,4372],{"class":326},"  res",[201,4374,663],{"class":330},[201,4376,709],{"class":322},[201,4378,327],{"class":337},[201,4380,671],{"class":330},[201,4382,3712],{"class":337},[201,4384,341],{"class":330},[201,4386,3751],{"class":337},[201,4388,415],{"class":330},[201,4390,418],{"class":337},[201,4392,4393,4395],{"class":203,"line":2864},[201,4394,415],{"class":330},[201,4396,418],{"class":326},[201,4398,4399],{"class":203,"line":2869},[201,4400,479],{"emptyLinePlaceholder":478},[201,4402,4403,4405,4407,4410,4412,4415],{"class":203,"line":2874},[201,4404,3626],{"class":326},[201,4406,663],{"class":330},[201,4408,4409],{"class":322},"listen",[201,4411,327],{"class":326},[201,4413,4414],{"class":3249},"3000",[201,4416,418],{"class":326},[178,4418,4419],{},"The middleware supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[190,4421,4422],{"className":305,"code":3810,"language":308,"meta":196,"style":196},[198,4423,4424,4442,4460,4464,4476,4480,4496,4514,4532,4540,4564,4568,4580,4596,4606,4630,4634,4650,4686,4690],{"__ignoreMap":196},[201,4425,4426,4428,4430,4432,4434,4436,4438,4440],{"class":203,"line":204},[201,4427,453],{"class":315},[201,4429,456],{"class":330},[201,4431,3821],{"class":326},[201,4433,462],{"class":330},[201,4435,465],{"class":315},[201,4437,390],{"class":330},[201,4439,3830],{"class":210},[201,4441,473],{"class":330},[201,4443,4444,4446,4448,4450,4452,4454,4456,4458],{"class":203,"line":334},[201,4445,453],{"class":315},[201,4447,456],{"class":330},[201,4449,3841],{"class":326},[201,4451,462],{"class":330},[201,4453,465],{"class":315},[201,4455,390],{"class":330},[201,4457,3850],{"class":210},[201,4459,473],{"class":330},[201,4461,4462],{"class":203,"line":361},[201,4463,479],{"emptyLinePlaceholder":478},[201,4465,4466,4468,4470,4472,4474],{"class":203,"line":372},[201,4467,3597],{"class":486},[201,4469,3863],{"class":326},[201,4471,611],{"class":330},[201,4473,3841],{"class":322},[201,4475,829],{"class":326},[201,4477,4478],{"class":203,"line":382},[201,4479,479],{"emptyLinePlaceholder":478},[201,4481,4482,4484,4486,4488,4490,4492,4494],{"class":203,"line":400},[201,4483,3626],{"class":326},[201,4485,663],{"class":330},[201,4487,3631],{"class":322},[201,4489,327],{"class":326},[201,4491,2419],{"class":322},[201,4493,327],{"class":326},[201,4495,331],{"class":330},[201,4497,4498,4500,4502,4504,4506,4508,4510,4512],{"class":203,"line":406},[201,4499,3894],{"class":337},[201,4501,341],{"class":330},[201,4503,344],{"class":326},[201,4505,347],{"class":330},[201,4507,3903],{"class":210},[201,4509,347],{"class":330},[201,4511,355],{"class":326},[201,4513,358],{"class":330},[201,4515,4516,4518,4520,4522,4524,4526,4528,4530],{"class":203,"line":412},[201,4517,3914],{"class":337},[201,4519,341],{"class":330},[201,4521,344],{"class":326},[201,4523,347],{"class":330},[201,4525,3923],{"class":210},[201,4527,347],{"class":330},[201,4529,355],{"class":326},[201,4531,358],{"class":330},[201,4533,4534,4536,4538],{"class":203,"line":930},[201,4535,3934],{"class":337},[201,4537,341],{"class":330},[201,4539,369],{"class":330},[201,4541,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562],{"class":203,"line":1266},[201,4543,3943],{"class":330},[201,4545,3946],{"class":337},[201,4547,347],{"class":330},[201,4549,341],{"class":330},[201,4551,456],{"class":330},[201,4553,1220],{"class":337},[201,4555,341],{"class":330},[201,4557,390],{"class":330},[201,4559,3961],{"class":210},[201,4561,347],{"class":330},[201,4563,1992],{"class":330},[201,4565,4566],{"class":203,"line":1276},[201,4567,409],{"class":330},[201,4569,4570,4572,4574,4576,4578],{"class":203,"line":1286},[201,4571,3974],{"class":337},[201,4573,341],{"class":330},[201,4575,3821],{"class":322},[201,4577,1350],{"class":326},[201,4579,358],{"class":330},[201,4581,4582,4584,4586,4588,4590,4592,4594],{"class":203,"line":1292},[201,4583,3987],{"class":322},[201,4585,341],{"class":330},[201,4587,621],{"class":330},[201,4589,3994],{"class":624},[201,4591,632],{"class":330},[201,4593,635],{"class":486},[201,4595,369],{"class":330},[201,4597,4598,4600,4602,4604],{"class":203,"line":2832},[201,4599,4005],{"class":322},[201,4601,327],{"class":337},[201,4603,3994],{"class":326},[201,4605,418],{"class":337},[201,4607,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628],{"class":203,"line":2858},[201,4609,4016],{"class":326},[201,4611,663],{"class":330},[201,4613,2082],{"class":326},[201,4615,663],{"class":330},[201,4617,4025],{"class":326},[201,4619,513],{"class":330},[201,4621,4030],{"class":326},[201,4623,663],{"class":330},[201,4625,1521],{"class":326},[201,4627,663],{"class":330},[201,4629,4039],{"class":326},[201,4631,4632],{"class":203,"line":2864},[201,4633,409],{"class":330},[201,4635,4636,4638,4640,4642,4644,4646,4648],{"class":203,"line":2869},[201,4637,4048],{"class":322},[201,4639,341],{"class":330},[201,4641,621],{"class":330},[201,4643,3994],{"class":624},[201,4645,632],{"class":330},[201,4647,635],{"class":486},[201,4649,369],{"class":330},[201,4651,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684],{"class":203,"line":2874},[201,4653,4065],{"class":315},[201,4655,621],{"class":337},[201,4657,3994],{"class":326},[201,4659,663],{"class":330},[201,4661,4074],{"class":326},[201,4663,4077],{"class":330},[201,4665,4080],{"class":326},[201,4667,663],{"class":330},[201,4669,4074],{"class":326},[201,4671,4087],{"class":330},[201,4673,4090],{"class":3249},[201,4675,908],{"class":337},[201,4677,3994],{"class":326},[201,4679,663],{"class":330},[201,4681,4099],{"class":326},[201,4683,513],{"class":330},[201,4685,4104],{"class":721},[201,4687,4688],{"class":203,"line":3351},[201,4689,409],{"class":330},[201,4691,4692,4694],{"class":203,"line":3360},[201,4693,415],{"class":330},[201,4695,4115],{"class":326},[178,4697,4698],{},"Handle errors with Express's error handler middleware:",[190,4700,4702],{"className":305,"code":4701,"language":308,"meta":196,"style":196},"import { createError, parseError } from 'evlog'\n\napp.get('/checkout', () => {\n  throw createError({ message: 'Payment failed', status: 402, why: 'Card declined' })\n})\n\napp.use((err, req, res, next) => {\n  req.log.error(err)\n  const parsed = parseError(err)\n  res.status(parsed.status).json({ message: parsed.message, why: parsed.why, fix: parsed.fix })\n})\n",[198,4703,4704,4728,4732,4757,4807,4813,4817,4851,4869,4886,4953],{"__ignoreMap":196},[201,4705,4706,4708,4710,4713,4715,4718,4720,4722,4724,4726],{"class":203,"line":204},[201,4707,453],{"class":315},[201,4709,456],{"class":330},[201,4711,4712],{"class":326}," createError",[201,4714,495],{"class":330},[201,4716,4717],{"class":326}," parseError",[201,4719,462],{"class":330},[201,4721,465],{"class":315},[201,4723,390],{"class":330},[201,4725,2419],{"class":210},[201,4727,473],{"class":330},[201,4729,4730],{"class":203,"line":334},[201,4731,479],{"emptyLinePlaceholder":478},[201,4733,4734,4736,4738,4740,4742,4744,4747,4749,4751,4753,4755],{"class":203,"line":361},[201,4735,3626],{"class":326},[201,4737,663],{"class":330},[201,4739,896],{"class":322},[201,4741,327],{"class":326},[201,4743,347],{"class":330},[201,4745,4746],{"class":210},"/checkout",[201,4748,347],{"class":330},[201,4750,495],{"class":330},[201,4752,2728],{"class":330},[201,4754,635],{"class":486},[201,4756,369],{"class":330},[201,4758,4759,4762,4764,4766,4768,4771,4773,4775,4778,4780,4782,4784,4786,4789,4791,4794,4796,4798,4801,4803,4805],{"class":203,"line":372},[201,4760,4761],{"class":315},"  throw",[201,4763,4712],{"class":322},[201,4765,327],{"class":337},[201,4767,671],{"class":330},[201,4769,4770],{"class":337}," message",[201,4772,341],{"class":330},[201,4774,390],{"class":330},[201,4776,4777],{"class":210},"Payment failed",[201,4779,347],{"class":330},[201,4781,495],{"class":330},[201,4783,3244],{"class":337},[201,4785,341],{"class":330},[201,4787,4788],{"class":3249}," 402",[201,4790,495],{"class":330},[201,4792,4793],{"class":337}," why",[201,4795,341],{"class":330},[201,4797,390],{"class":330},[201,4799,4800],{"class":210},"Card declined",[201,4802,347],{"class":330},[201,4804,462],{"class":330},[201,4806,418],{"class":337},[201,4808,4809,4811],{"class":203,"line":382},[201,4810,415],{"class":330},[201,4812,418],{"class":326},[201,4814,4815],{"class":203,"line":400},[201,4816,479],{"emptyLinePlaceholder":478},[201,4818,4819,4821,4823,4825,4827,4829,4832,4834,4836,4838,4840,4842,4845,4847,4849],{"class":203,"line":406},[201,4820,3626],{"class":326},[201,4822,663],{"class":330},[201,4824,3631],{"class":322},[201,4826,327],{"class":326},[201,4828,327],{"class":330},[201,4830,4831],{"class":624},"err",[201,4833,495],{"class":330},[201,4835,2740],{"class":624},[201,4837,495],{"class":330},[201,4839,4326],{"class":624},[201,4841,495],{"class":330},[201,4843,4844],{"class":624}," next",[201,4846,632],{"class":330},[201,4848,635],{"class":486},[201,4850,369],{"class":330},[201,4852,4853,4855,4857,4859,4861,4863,4865,4867],{"class":203,"line":412},[201,4854,4337],{"class":326},[201,4856,663],{"class":330},[201,4858,1300],{"class":326},[201,4860,663],{"class":330},[201,4862,3302],{"class":322},[201,4864,327],{"class":337},[201,4866,4831],{"class":326},[201,4868,418],{"class":337},[201,4870,4871,4873,4876,4878,4880,4882,4884],{"class":203,"line":930},[201,4872,642],{"class":486},[201,4874,4875],{"class":326}," parsed",[201,4877,513],{"class":330},[201,4879,4717],{"class":322},[201,4881,327],{"class":337},[201,4883,4831],{"class":326},[201,4885,418],{"class":337},[201,4887,4888,4890,4892,4894,4896,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921,4924,4926,4928,4930,4932,4934,4936,4938,4941,4943,4945,4947,4949,4951],{"class":203,"line":1266},[201,4889,4372],{"class":326},[201,4891,663],{"class":330},[201,4893,3278],{"class":322},[201,4895,327],{"class":337},[201,4897,4898],{"class":326},"parsed",[201,4900,663],{"class":330},[201,4902,3278],{"class":326},[201,4904,632],{"class":337},[201,4906,663],{"class":330},[201,4908,709],{"class":322},[201,4910,327],{"class":337},[201,4912,671],{"class":330},[201,4914,4770],{"class":337},[201,4916,341],{"class":330},[201,4918,4875],{"class":326},[201,4920,663],{"class":330},[201,4922,4923],{"class":326},"message",[201,4925,495],{"class":330},[201,4927,4793],{"class":337},[201,4929,341],{"class":330},[201,4931,4875],{"class":326},[201,4933,663],{"class":330},[201,4935,2900],{"class":326},[201,4937,495],{"class":330},[201,4939,4940],{"class":337}," fix",[201,4942,341],{"class":330},[201,4944,4875],{"class":326},[201,4946,663],{"class":330},[201,4948,2903],{"class":326},[201,4950,462],{"class":330},[201,4952,418],{"class":337},[201,4954,4955,4957],{"class":203,"line":1276},[201,4956,415],{"class":330},[201,4958,418],{"class":326},[936,4960,4127,4961,4131],{"color":1876,"icon":1877},[289,4962,4963],{"href":158},"Express example",[259,4965,162],{"id":4966},"elysia",[178,4968,4969,4970,4141,4973,4975,4976,4978],{},"evlog provides an Elysia plugin at ",[198,4971,4972],{},"evlog/elysia",[198,4974,1300],{}," in route context or ",[198,4977,1760],{}," and emits a wide event when the response completes.",[190,4980,4982],{"className":192,"code":4981,"language":195,"meta":196,"style":196},"bun add evlog elysia\n",[198,4983,4984],{"__ignoreMap":196},[201,4985,4986,4988,4990,4992],{"class":203,"line":204},[201,4987,247],{"class":207},[201,4989,211],{"class":210},[201,4991,3457],{"class":210},[201,4993,4994],{"class":210}," elysia\n",[190,4996,4998],{"className":305,"code":4997,"filename":3055,"language":308,"meta":196,"style":196},"import { Elysia } from 'elysia'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog/elysia'\n\ninitLogger({\n  env: { service: 'elysia-api' },\n})\n\nconst app = new Elysia()\n  .use(evlog())\n  .get('/api/users', ({ log }) => {\n    log.set({ users: { count: 42 } })\n    return { users: [] }\n  })\n  .listen(3000)\n",[198,4999,5000,5019,5037,5055,5059,5067,5088,5094,5098,5112,5125,5152,5183,5198,5205],{"__ignoreMap":196},[201,5001,5002,5004,5006,5009,5011,5013,5015,5017],{"class":203,"line":204},[201,5003,453],{"class":315},[201,5005,456],{"class":330},[201,5007,5008],{"class":326}," Elysia",[201,5010,462],{"class":330},[201,5012,465],{"class":315},[201,5014,390],{"class":330},[201,5016,4966],{"class":210},[201,5018,473],{"class":330},[201,5020,5021,5023,5025,5027,5029,5031,5033,5035],{"class":203,"line":334},[201,5022,453],{"class":315},[201,5024,456],{"class":330},[201,5026,3513],{"class":326},[201,5028,462],{"class":330},[201,5030,465],{"class":315},[201,5032,390],{"class":330},[201,5034,2419],{"class":210},[201,5036,473],{"class":330},[201,5038,5039,5041,5043,5045,5047,5049,5051,5053],{"class":203,"line":361},[201,5040,453],{"class":315},[201,5042,456],{"class":330},[201,5044,3457],{"class":326},[201,5046,462],{"class":330},[201,5048,465],{"class":315},[201,5050,390],{"class":330},[201,5052,4972],{"class":210},[201,5054,473],{"class":330},[201,5056,5057],{"class":203,"line":372},[201,5058,479],{"emptyLinePlaceholder":478},[201,5060,5061,5063,5065],{"class":203,"line":382},[201,5062,3557],{"class":322},[201,5064,327],{"class":326},[201,5066,331],{"class":330},[201,5068,5069,5071,5073,5075,5077,5079,5081,5084,5086],{"class":203,"line":400},[201,5070,3100],{"class":337},[201,5072,341],{"class":330},[201,5074,456],{"class":330},[201,5076,1220],{"class":337},[201,5078,341],{"class":330},[201,5080,390],{"class":330},[201,5082,5083],{"class":210},"elysia-api",[201,5085,347],{"class":330},[201,5087,1992],{"class":330},[201,5089,5090,5092],{"class":203,"line":406},[201,5091,415],{"class":330},[201,5093,418],{"class":326},[201,5095,5096],{"class":203,"line":412},[201,5097,479],{"emptyLinePlaceholder":478},[201,5099,5100,5102,5104,5106,5108,5110],{"class":203,"line":930},[201,5101,3597],{"class":486},[201,5103,3600],{"class":326},[201,5105,611],{"class":330},[201,5107,3226],{"class":330},[201,5109,5008],{"class":322},[201,5111,829],{"class":326},[201,5113,5114,5117,5119,5121,5123],{"class":203,"line":1266},[201,5115,5116],{"class":330},"  .",[201,5118,3631],{"class":322},[201,5120,327],{"class":326},[201,5122,2419],{"class":322},[201,5124,3638],{"class":326},[201,5126,5127,5129,5131,5133,5135,5137,5139,5141,5144,5146,5148,5150],{"class":203,"line":1276},[201,5128,5116],{"class":330},[201,5130,896],{"class":322},[201,5132,327],{"class":326},[201,5134,347],{"class":330},[201,5136,3657],{"class":210},[201,5138,347],{"class":330},[201,5140,495],{"class":330},[201,5142,5143],{"class":330}," ({",[201,5145,503],{"class":624},[201,5147,1167],{"class":330},[201,5149,635],{"class":486},[201,5151,369],{"class":330},[201,5153,5154,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181],{"class":203,"line":1286},[201,5155,5156],{"class":326},"    log",[201,5158,663],{"class":330},[201,5160,666],{"class":322},[201,5162,327],{"class":337},[201,5164,671],{"class":330},[201,5166,3712],{"class":337},[201,5168,341],{"class":330},[201,5170,456],{"class":330},[201,5172,3719],{"class":337},[201,5174,341],{"class":330},[201,5176,3724],{"class":3249},[201,5178,462],{"class":330},[201,5180,462],{"class":330},[201,5182,418],{"class":337},[201,5184,5185,5188,5190,5192,5194,5196],{"class":203,"line":1292},[201,5186,5187],{"class":315},"    return",[201,5189,456],{"class":330},[201,5191,3712],{"class":337},[201,5193,341],{"class":330},[201,5195,3751],{"class":337},[201,5197,1064],{"class":330},[201,5199,5200,5203],{"class":203,"line":2832},[201,5201,5202],{"class":330},"  }",[201,5204,418],{"class":326},[201,5206,5207,5209,5211,5213,5215],{"class":203,"line":2858},[201,5208,5116],{"class":330},[201,5210,4409],{"class":322},[201,5212,327],{"class":326},[201,5214,4414],{"class":3249},[201,5216,418],{"class":326},[178,5218,5219],{},"The plugin supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[190,5221,5222],{"className":305,"code":3810,"language":308,"meta":196,"style":196},[198,5223,5224,5242,5260,5264,5276,5280,5296,5314,5332,5340,5364,5368,5380,5396,5406,5430,5434,5450,5486,5490],{"__ignoreMap":196},[201,5225,5226,5228,5230,5232,5234,5236,5238,5240],{"class":203,"line":204},[201,5227,453],{"class":315},[201,5229,456],{"class":330},[201,5231,3821],{"class":326},[201,5233,462],{"class":330},[201,5235,465],{"class":315},[201,5237,390],{"class":330},[201,5239,3830],{"class":210},[201,5241,473],{"class":330},[201,5243,5244,5246,5248,5250,5252,5254,5256,5258],{"class":203,"line":334},[201,5245,453],{"class":315},[201,5247,456],{"class":330},[201,5249,3841],{"class":326},[201,5251,462],{"class":330},[201,5253,465],{"class":315},[201,5255,390],{"class":330},[201,5257,3850],{"class":210},[201,5259,473],{"class":330},[201,5261,5262],{"class":203,"line":361},[201,5263,479],{"emptyLinePlaceholder":478},[201,5265,5266,5268,5270,5272,5274],{"class":203,"line":372},[201,5267,3597],{"class":486},[201,5269,3863],{"class":326},[201,5271,611],{"class":330},[201,5273,3841],{"class":322},[201,5275,829],{"class":326},[201,5277,5278],{"class":203,"line":382},[201,5279,479],{"emptyLinePlaceholder":478},[201,5281,5282,5284,5286,5288,5290,5292,5294],{"class":203,"line":400},[201,5283,3626],{"class":326},[201,5285,663],{"class":330},[201,5287,3631],{"class":322},[201,5289,327],{"class":326},[201,5291,2419],{"class":322},[201,5293,327],{"class":326},[201,5295,331],{"class":330},[201,5297,5298,5300,5302,5304,5306,5308,5310,5312],{"class":203,"line":406},[201,5299,3894],{"class":337},[201,5301,341],{"class":330},[201,5303,344],{"class":326},[201,5305,347],{"class":330},[201,5307,3903],{"class":210},[201,5309,347],{"class":330},[201,5311,355],{"class":326},[201,5313,358],{"class":330},[201,5315,5316,5318,5320,5322,5324,5326,5328,5330],{"class":203,"line":412},[201,5317,3914],{"class":337},[201,5319,341],{"class":330},[201,5321,344],{"class":326},[201,5323,347],{"class":330},[201,5325,3923],{"class":210},[201,5327,347],{"class":330},[201,5329,355],{"class":326},[201,5331,358],{"class":330},[201,5333,5334,5336,5338],{"class":203,"line":930},[201,5335,3934],{"class":337},[201,5337,341],{"class":330},[201,5339,369],{"class":330},[201,5341,5342,5344,5346,5348,5350,5352,5354,5356,5358,5360,5362],{"class":203,"line":1266},[201,5343,3943],{"class":330},[201,5345,3946],{"class":337},[201,5347,347],{"class":330},[201,5349,341],{"class":330},[201,5351,456],{"class":330},[201,5353,1220],{"class":337},[201,5355,341],{"class":330},[201,5357,390],{"class":330},[201,5359,3961],{"class":210},[201,5361,347],{"class":330},[201,5363,1992],{"class":330},[201,5365,5366],{"class":203,"line":1276},[201,5367,409],{"class":330},[201,5369,5370,5372,5374,5376,5378],{"class":203,"line":1286},[201,5371,3974],{"class":337},[201,5373,341],{"class":330},[201,5375,3821],{"class":322},[201,5377,1350],{"class":326},[201,5379,358],{"class":330},[201,5381,5382,5384,5386,5388,5390,5392,5394],{"class":203,"line":1292},[201,5383,3987],{"class":322},[201,5385,341],{"class":330},[201,5387,621],{"class":330},[201,5389,3994],{"class":624},[201,5391,632],{"class":330},[201,5393,635],{"class":486},[201,5395,369],{"class":330},[201,5397,5398,5400,5402,5404],{"class":203,"line":2832},[201,5399,4005],{"class":322},[201,5401,327],{"class":337},[201,5403,3994],{"class":326},[201,5405,418],{"class":337},[201,5407,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428],{"class":203,"line":2858},[201,5409,4016],{"class":326},[201,5411,663],{"class":330},[201,5413,2082],{"class":326},[201,5415,663],{"class":330},[201,5417,4025],{"class":326},[201,5419,513],{"class":330},[201,5421,4030],{"class":326},[201,5423,663],{"class":330},[201,5425,1521],{"class":326},[201,5427,663],{"class":330},[201,5429,4039],{"class":326},[201,5431,5432],{"class":203,"line":2864},[201,5433,409],{"class":330},[201,5435,5436,5438,5440,5442,5444,5446,5448],{"class":203,"line":2869},[201,5437,4048],{"class":322},[201,5439,341],{"class":330},[201,5441,621],{"class":330},[201,5443,3994],{"class":624},[201,5445,632],{"class":330},[201,5447,635],{"class":486},[201,5449,369],{"class":330},[201,5451,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5478,5480,5482,5484],{"class":203,"line":2874},[201,5453,4065],{"class":315},[201,5455,621],{"class":337},[201,5457,3994],{"class":326},[201,5459,663],{"class":330},[201,5461,4074],{"class":326},[201,5463,4077],{"class":330},[201,5465,4080],{"class":326},[201,5467,663],{"class":330},[201,5469,4074],{"class":326},[201,5471,4087],{"class":330},[201,5473,4090],{"class":3249},[201,5475,908],{"class":337},[201,5477,3994],{"class":326},[201,5479,663],{"class":330},[201,5481,4099],{"class":326},[201,5483,513],{"class":330},[201,5485,4104],{"class":721},[201,5487,5488],{"class":203,"line":3351},[201,5489,409],{"class":330},[201,5491,5492,5494],{"class":203,"line":3360},[201,5493,415],{"class":330},[201,5495,4115],{"class":326},[178,5497,5498,5499,5502],{},"Handle errors with Elysia's ",[198,5500,5501],{},"onError"," hook (evlog captures them automatically):",[190,5504,5506],{"className":305,"code":5505,"language":308,"meta":196,"style":196},"import { createError, parseError } from 'evlog'\n\napp\n  .use(evlog())\n  .get('/checkout', () => {\n    throw createError({ message: 'Payment failed', status: 402, why: 'Card declined' })\n  })\n  .onError(({ error, set }) => {\n    const parsed = parseError(error)\n    set.status = parsed.status\n    return { message: parsed.message, why: parsed.why, fix: parsed.fix }\n  })\n",[198,5507,5508,5530,5534,5539,5551,5573,5618,5624,5648,5664,5682,5724],{"__ignoreMap":196},[201,5509,5510,5512,5514,5516,5518,5520,5522,5524,5526,5528],{"class":203,"line":204},[201,5511,453],{"class":315},[201,5513,456],{"class":330},[201,5515,4712],{"class":326},[201,5517,495],{"class":330},[201,5519,4717],{"class":326},[201,5521,462],{"class":330},[201,5523,465],{"class":315},[201,5525,390],{"class":330},[201,5527,2419],{"class":210},[201,5529,473],{"class":330},[201,5531,5532],{"class":203,"line":334},[201,5533,479],{"emptyLinePlaceholder":478},[201,5535,5536],{"class":203,"line":361},[201,5537,5538],{"class":326},"app\n",[201,5540,5541,5543,5545,5547,5549],{"class":203,"line":372},[201,5542,5116],{"class":330},[201,5544,3631],{"class":322},[201,5546,327],{"class":326},[201,5548,2419],{"class":322},[201,5550,3638],{"class":326},[201,5552,5553,5555,5557,5559,5561,5563,5565,5567,5569,5571],{"class":203,"line":382},[201,5554,5116],{"class":330},[201,5556,896],{"class":322},[201,5558,327],{"class":326},[201,5560,347],{"class":330},[201,5562,4746],{"class":210},[201,5564,347],{"class":330},[201,5566,495],{"class":330},[201,5568,2728],{"class":330},[201,5570,635],{"class":486},[201,5572,369],{"class":330},[201,5574,5575,5578,5580,5582,5584,5586,5588,5590,5592,5594,5596,5598,5600,5602,5604,5606,5608,5610,5612,5614,5616],{"class":203,"line":400},[201,5576,5577],{"class":315},"    throw",[201,5579,4712],{"class":322},[201,5581,327],{"class":337},[201,5583,671],{"class":330},[201,5585,4770],{"class":337},[201,5587,341],{"class":330},[201,5589,390],{"class":330},[201,5591,4777],{"class":210},[201,5593,347],{"class":330},[201,5595,495],{"class":330},[201,5597,3244],{"class":337},[201,5599,341],{"class":330},[201,5601,4788],{"class":3249},[201,5603,495],{"class":330},[201,5605,4793],{"class":337},[201,5607,341],{"class":330},[201,5609,390],{"class":330},[201,5611,4800],{"class":210},[201,5613,347],{"class":330},[201,5615,462],{"class":330},[201,5617,418],{"class":337},[201,5619,5620,5622],{"class":203,"line":406},[201,5621,5202],{"class":330},[201,5623,418],{"class":326},[201,5625,5626,5628,5630,5632,5634,5637,5639,5642,5644,5646],{"class":203,"line":412},[201,5627,5116],{"class":330},[201,5629,5501],{"class":322},[201,5631,327],{"class":326},[201,5633,1144],{"class":330},[201,5635,5636],{"class":624}," error",[201,5638,495],{"class":330},[201,5640,5641],{"class":624}," set",[201,5643,1167],{"class":330},[201,5645,635],{"class":486},[201,5647,369],{"class":330},[201,5649,5650,5652,5654,5656,5658,5660,5662],{"class":203,"line":930},[201,5651,3161],{"class":486},[201,5653,4875],{"class":326},[201,5655,513],{"class":330},[201,5657,4717],{"class":322},[201,5659,327],{"class":337},[201,5661,3302],{"class":326},[201,5663,418],{"class":337},[201,5665,5666,5669,5671,5673,5675,5677,5679],{"class":203,"line":1266},[201,5667,5668],{"class":326},"    set",[201,5670,663],{"class":330},[201,5672,3278],{"class":326},[201,5674,513],{"class":330},[201,5676,4875],{"class":326},[201,5678,663],{"class":330},[201,5680,5681],{"class":326},"status\n",[201,5683,5684,5686,5688,5690,5692,5694,5696,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718,5720,5722],{"class":203,"line":1276},[201,5685,5187],{"class":315},[201,5687,456],{"class":330},[201,5689,4770],{"class":337},[201,5691,341],{"class":330},[201,5693,4875],{"class":326},[201,5695,663],{"class":330},[201,5697,4923],{"class":326},[201,5699,495],{"class":330},[201,5701,4793],{"class":337},[201,5703,341],{"class":330},[201,5705,4875],{"class":326},[201,5707,663],{"class":330},[201,5709,2900],{"class":326},[201,5711,495],{"class":330},[201,5713,4940],{"class":337},[201,5715,341],{"class":330},[201,5717,4875],{"class":326},[201,5719,663],{"class":330},[201,5721,2903],{"class":326},[201,5723,927],{"class":330},[201,5725,5726,5728],{"class":203,"line":1286},[201,5727,5202],{"class":330},[201,5729,418],{"class":326},[936,5731,4127,5732,4131],{"color":1876,"icon":1877},[289,5733,5734],{"href":163},"Elysia example",[259,5736,167],{"id":5737},"fastify",[178,5739,5740,5741,4141,5744,4145,5747,4148],{},"evlog provides a Fastify plugin at ",[198,5742,5743],{},"evlog/fastify",[198,5745,5746],{},"request.log",[198,5748,1760],{},[190,5750,5752],{"className":192,"code":5751,"language":195,"meta":196,"style":196},"npm install evlog fastify\n",[198,5753,5754],{"__ignoreMap":196},[201,5755,5756,5758,5760,5762],{"class":203,"line":204},[201,5757,218],{"class":207},[201,5759,227],{"class":210},[201,5761,3457],{"class":210},[201,5763,5764],{"class":210}," fastify\n",[190,5766,5768],{"className":305,"code":5767,"filename":3055,"language":308,"meta":196,"style":196},"import Fastify from 'fastify'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog/fastify'\n\ninitLogger({\n  env: { service: 'fastify-api' },\n})\n\nconst app = Fastify({ logger: false })\n\nawait app.register(evlog)\n\napp.get('/api/users', async (request) => {\n  request.log.set({ users: { count: 42 } })\n  return { users: [] }\n})\n\nawait app.listen({ port: 3000 })\n",[198,5769,5770,5785,5803,5821,5825,5833,5854,5860,5864,5891,5895,5910,5914,5944,5979,5993,5999,6003],{"__ignoreMap":196},[201,5771,5772,5774,5777,5779,5781,5783],{"class":203,"line":204},[201,5773,453],{"class":315},[201,5775,5776],{"class":326}," Fastify ",[201,5778,1928],{"class":315},[201,5780,390],{"class":330},[201,5782,5737],{"class":210},[201,5784,473],{"class":330},[201,5786,5787,5789,5791,5793,5795,5797,5799,5801],{"class":203,"line":334},[201,5788,453],{"class":315},[201,5790,456],{"class":330},[201,5792,3513],{"class":326},[201,5794,462],{"class":330},[201,5796,465],{"class":315},[201,5798,390],{"class":330},[201,5800,2419],{"class":210},[201,5802,473],{"class":330},[201,5804,5805,5807,5809,5811,5813,5815,5817,5819],{"class":203,"line":361},[201,5806,453],{"class":315},[201,5808,456],{"class":330},[201,5810,3457],{"class":326},[201,5812,462],{"class":330},[201,5814,465],{"class":315},[201,5816,390],{"class":330},[201,5818,5743],{"class":210},[201,5820,473],{"class":330},[201,5822,5823],{"class":203,"line":372},[201,5824,479],{"emptyLinePlaceholder":478},[201,5826,5827,5829,5831],{"class":203,"line":382},[201,5828,3557],{"class":322},[201,5830,327],{"class":326},[201,5832,331],{"class":330},[201,5834,5835,5837,5839,5841,5843,5845,5847,5850,5852],{"class":203,"line":400},[201,5836,3100],{"class":337},[201,5838,341],{"class":330},[201,5840,456],{"class":330},[201,5842,1220],{"class":337},[201,5844,341],{"class":330},[201,5846,390],{"class":330},[201,5848,5849],{"class":210},"fastify-api",[201,5851,347],{"class":330},[201,5853,1992],{"class":330},[201,5855,5856,5858],{"class":203,"line":406},[201,5857,415],{"class":330},[201,5859,418],{"class":326},[201,5861,5862],{"class":203,"line":412},[201,5863,479],{"emptyLinePlaceholder":478},[201,5865,5866,5868,5870,5872,5875,5877,5879,5882,5884,5887,5889],{"class":203,"line":930},[201,5867,3597],{"class":486},[201,5869,3600],{"class":326},[201,5871,611],{"class":330},[201,5873,5874],{"class":322}," Fastify",[201,5876,327],{"class":326},[201,5878,671],{"class":330},[201,5880,5881],{"class":337}," logger",[201,5883,341],{"class":330},[201,5885,5886],{"class":721}," false",[201,5888,462],{"class":330},[201,5890,418],{"class":326},[201,5892,5893],{"class":203,"line":1266},[201,5894,479],{"emptyLinePlaceholder":478},[201,5896,5897,5900,5902,5904,5907],{"class":203,"line":1276},[201,5898,5899],{"class":315},"await",[201,5901,3781],{"class":326},[201,5903,663],{"class":330},[201,5905,5906],{"class":322},"register",[201,5908,5909],{"class":326},"(evlog)\n",[201,5911,5912],{"class":203,"line":1286},[201,5913,479],{"emptyLinePlaceholder":478},[201,5915,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934,5936,5938,5940,5942],{"class":203,"line":1292},[201,5917,3626],{"class":326},[201,5919,663],{"class":330},[201,5921,896],{"class":322},[201,5923,327],{"class":326},[201,5925,347],{"class":330},[201,5927,3657],{"class":210},[201,5929,347],{"class":330},[201,5931,495],{"class":330},[201,5933,2725],{"class":486},[201,5935,621],{"class":330},[201,5937,625],{"class":624},[201,5939,632],{"class":330},[201,5941,635],{"class":486},[201,5943,369],{"class":330},[201,5945,5946,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977],{"class":203,"line":2832},[201,5947,5948],{"class":326},"  request",[201,5950,663],{"class":330},[201,5952,1300],{"class":326},[201,5954,663],{"class":330},[201,5956,666],{"class":322},[201,5958,327],{"class":337},[201,5960,671],{"class":330},[201,5962,3712],{"class":337},[201,5964,341],{"class":330},[201,5966,456],{"class":330},[201,5968,3719],{"class":337},[201,5970,341],{"class":330},[201,5972,3724],{"class":3249},[201,5974,462],{"class":330},[201,5976,462],{"class":330},[201,5978,418],{"class":337},[201,5980,5981,5983,5985,5987,5989,5991],{"class":203,"line":2858},[201,5982,701],{"class":315},[201,5984,456],{"class":330},[201,5986,3712],{"class":337},[201,5988,341],{"class":330},[201,5990,3751],{"class":337},[201,5992,1064],{"class":330},[201,5994,5995,5997],{"class":203,"line":2864},[201,5996,415],{"class":330},[201,5998,418],{"class":326},[201,6000,6001],{"class":203,"line":2869},[201,6002,479],{"emptyLinePlaceholder":478},[201,6004,6005,6007,6009,6011,6013,6015,6017,6019,6021,6023,6025],{"class":203,"line":2874},[201,6006,5899],{"class":315},[201,6008,3781],{"class":326},[201,6010,663],{"class":330},[201,6012,4409],{"class":322},[201,6014,327],{"class":326},[201,6016,671],{"class":330},[201,6018,3791],{"class":337},[201,6020,341],{"class":330},[201,6022,3796],{"class":3249},[201,6024,462],{"class":330},[201,6026,418],{"class":326},[178,6028,5219],{},[190,6030,6032],{"className":305,"code":6031,"language":308,"meta":196,"style":196},"import { createAxiomDrain } from 'evlog/axiom'\nimport { createUserAgentEnricher } from 'evlog/enrichers'\n\nconst userAgent = createUserAgentEnricher()\n\nawait app.register(evlog, {\n  include: ['/api/**'],\n  exclude: ['/_internal/**'],\n  routes: {\n    '/api/auth/**': { service: 'auth-service' },\n  },\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n})\n",[198,6033,6034,6052,6070,6074,6086,6090,6107,6125,6143,6151,6175,6179,6191,6207,6217,6241,6245,6261,6297,6301],{"__ignoreMap":196},[201,6035,6036,6038,6040,6042,6044,6046,6048,6050],{"class":203,"line":204},[201,6037,453],{"class":315},[201,6039,456],{"class":330},[201,6041,3821],{"class":326},[201,6043,462],{"class":330},[201,6045,465],{"class":315},[201,6047,390],{"class":330},[201,6049,3830],{"class":210},[201,6051,473],{"class":330},[201,6053,6054,6056,6058,6060,6062,6064,6066,6068],{"class":203,"line":334},[201,6055,453],{"class":315},[201,6057,456],{"class":330},[201,6059,3841],{"class":326},[201,6061,462],{"class":330},[201,6063,465],{"class":315},[201,6065,390],{"class":330},[201,6067,3850],{"class":210},[201,6069,473],{"class":330},[201,6071,6072],{"class":203,"line":361},[201,6073,479],{"emptyLinePlaceholder":478},[201,6075,6076,6078,6080,6082,6084],{"class":203,"line":372},[201,6077,3597],{"class":486},[201,6079,3863],{"class":326},[201,6081,611],{"class":330},[201,6083,3841],{"class":322},[201,6085,829],{"class":326},[201,6087,6088],{"class":203,"line":382},[201,6089,479],{"emptyLinePlaceholder":478},[201,6091,6092,6094,6096,6098,6100,6103,6105],{"class":203,"line":400},[201,6093,5899],{"class":315},[201,6095,3781],{"class":326},[201,6097,663],{"class":330},[201,6099,5906],{"class":322},[201,6101,6102],{"class":326},"(evlog",[201,6104,495],{"class":330},[201,6106,369],{"class":330},[201,6108,6109,6111,6113,6115,6117,6119,6121,6123],{"class":203,"line":406},[201,6110,3894],{"class":337},[201,6112,341],{"class":330},[201,6114,344],{"class":326},[201,6116,347],{"class":330},[201,6118,3903],{"class":210},[201,6120,347],{"class":330},[201,6122,355],{"class":326},[201,6124,358],{"class":330},[201,6126,6127,6129,6131,6133,6135,6137,6139,6141],{"class":203,"line":412},[201,6128,3914],{"class":337},[201,6130,341],{"class":330},[201,6132,344],{"class":326},[201,6134,347],{"class":330},[201,6136,3923],{"class":210},[201,6138,347],{"class":330},[201,6140,355],{"class":326},[201,6142,358],{"class":330},[201,6144,6145,6147,6149],{"class":203,"line":930},[201,6146,3934],{"class":337},[201,6148,341],{"class":330},[201,6150,369],{"class":330},[201,6152,6153,6155,6157,6159,6161,6163,6165,6167,6169,6171,6173],{"class":203,"line":1266},[201,6154,3943],{"class":330},[201,6156,3946],{"class":337},[201,6158,347],{"class":330},[201,6160,341],{"class":330},[201,6162,456],{"class":330},[201,6164,1220],{"class":337},[201,6166,341],{"class":330},[201,6168,390],{"class":330},[201,6170,3961],{"class":210},[201,6172,347],{"class":330},[201,6174,1992],{"class":330},[201,6176,6177],{"class":203,"line":1276},[201,6178,409],{"class":330},[201,6180,6181,6183,6185,6187,6189],{"class":203,"line":1286},[201,6182,3974],{"class":337},[201,6184,341],{"class":330},[201,6186,3821],{"class":322},[201,6188,1350],{"class":326},[201,6190,358],{"class":330},[201,6192,6193,6195,6197,6199,6201,6203,6205],{"class":203,"line":1292},[201,6194,3987],{"class":322},[201,6196,341],{"class":330},[201,6198,621],{"class":330},[201,6200,3994],{"class":624},[201,6202,632],{"class":330},[201,6204,635],{"class":486},[201,6206,369],{"class":330},[201,6208,6209,6211,6213,6215],{"class":203,"line":2832},[201,6210,4005],{"class":322},[201,6212,327],{"class":337},[201,6214,3994],{"class":326},[201,6216,418],{"class":337},[201,6218,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239],{"class":203,"line":2858},[201,6220,4016],{"class":326},[201,6222,663],{"class":330},[201,6224,2082],{"class":326},[201,6226,663],{"class":330},[201,6228,4025],{"class":326},[201,6230,513],{"class":330},[201,6232,4030],{"class":326},[201,6234,663],{"class":330},[201,6236,1521],{"class":326},[201,6238,663],{"class":330},[201,6240,4039],{"class":326},[201,6242,6243],{"class":203,"line":2864},[201,6244,409],{"class":330},[201,6246,6247,6249,6251,6253,6255,6257,6259],{"class":203,"line":2869},[201,6248,4048],{"class":322},[201,6250,341],{"class":330},[201,6252,621],{"class":330},[201,6254,3994],{"class":624},[201,6256,632],{"class":330},[201,6258,635],{"class":486},[201,6260,369],{"class":330},[201,6262,6263,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295],{"class":203,"line":2874},[201,6264,4065],{"class":315},[201,6266,621],{"class":337},[201,6268,3994],{"class":326},[201,6270,663],{"class":330},[201,6272,4074],{"class":326},[201,6274,4077],{"class":330},[201,6276,4080],{"class":326},[201,6278,663],{"class":330},[201,6280,4074],{"class":326},[201,6282,4087],{"class":330},[201,6284,4090],{"class":3249},[201,6286,908],{"class":337},[201,6288,3994],{"class":326},[201,6290,663],{"class":330},[201,6292,4099],{"class":326},[201,6294,513],{"class":330},[201,6296,4104],{"class":721},[201,6298,6299],{"class":203,"line":3351},[201,6300,409],{"class":330},[201,6302,6303,6305],{"class":203,"line":3360},[201,6304,415],{"class":330},[201,6306,418],{"class":326},[178,6308,3419,6309,6311],{},[198,6310,1760],{}," to access the logger from anywhere in the call stack:",[190,6313,6315],{"className":305,"code":6314,"language":308,"meta":196,"style":196},"import { useLogger } from 'evlog/fastify'\n\nfunction findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n}\n",[198,6316,6317,6335,6339,6361,6373,6399],{"__ignoreMap":196},[201,6318,6319,6321,6323,6325,6327,6329,6331,6333],{"class":203,"line":204},[201,6320,453],{"class":315},[201,6322,456],{"class":330},[201,6324,498],{"class":326},[201,6326,462],{"class":330},[201,6328,465],{"class":315},[201,6330,390],{"class":330},[201,6332,5743],{"class":210},[201,6334,473],{"class":330},[201,6336,6337],{"class":203,"line":334},[201,6338,479],{"emptyLinePlaceholder":478},[201,6340,6341,6344,6347,6349,6352,6354,6357,6359],{"class":203,"line":361},[201,6342,6343],{"class":486},"function",[201,6345,6346],{"class":322}," findUser",[201,6348,327],{"class":330},[201,6350,6351],{"class":624},"id",[201,6353,341],{"class":330},[201,6355,6356],{"class":207}," string",[201,6358,632],{"class":330},[201,6360,369],{"class":330},[201,6362,6363,6365,6367,6369,6371],{"class":203,"line":372},[201,6364,642],{"class":486},[201,6366,503],{"class":326},[201,6368,513],{"class":330},[201,6370,498],{"class":322},[201,6372,829],{"class":337},[201,6374,6375,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6397],{"class":203,"line":382},[201,6376,660],{"class":326},[201,6378,663],{"class":330},[201,6380,666],{"class":322},[201,6382,327],{"class":337},[201,6384,671],{"class":330},[201,6386,674],{"class":337},[201,6388,341],{"class":330},[201,6390,456],{"class":330},[201,6392,681],{"class":326},[201,6394,462],{"class":330},[201,6396,462],{"class":330},[201,6398,418],{"class":337},[201,6400,6401],{"class":203,"line":400},[201,6402,1064],{"class":330},[936,6404,6405,2413,6407,6409,6410,6413],{"color":938,"icon":13},[2410,6406,2412],{},[198,6408,5746],{}," is the evlog wide-event logger (shadows Fastify's built-in pino logger on the request). Fastify's pino logger remains accessible via ",[198,6411,6412],{},"fastify.log"," for server-level structured logging.",[936,6415,4127,6416,4131],{"color":1876,"icon":1877},[289,6417,6418],{"href":168},"Fastify example",[259,6420,6422],{"id":6421},"standalone-typescript","Standalone TypeScript",[178,6424,6425],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[190,6427,6430],{"className":305,"code":6428,"filename":6429,"language":308,"meta":196,"style":196},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({\n  env: {\n    service: 'my-worker',\n    environment: 'production',\n  },\n})\n\nconst log = createLogger({ jobId: job.id, source: job.source, target: job.target })\nlog.set({ recordsSynced: 150 })\nlog.emit() // Manual emit required in standalone mode\n","scripts/sync-job.ts",[198,6431,6432,6455,6459,6467,6475,6491,6507,6511,6517,6521,6579,6603],{"__ignoreMap":196},[201,6433,6434,6436,6438,6440,6442,6445,6447,6449,6451,6453],{"class":203,"line":204},[201,6435,453],{"class":315},[201,6437,456],{"class":330},[201,6439,3513],{"class":326},[201,6441,495],{"class":330},[201,6443,6444],{"class":326}," createLogger",[201,6446,462],{"class":330},[201,6448,465],{"class":315},[201,6450,390],{"class":330},[201,6452,2419],{"class":210},[201,6454,473],{"class":330},[201,6456,6457],{"class":203,"line":334},[201,6458,479],{"emptyLinePlaceholder":478},[201,6460,6461,6463,6465],{"class":203,"line":361},[201,6462,3557],{"class":322},[201,6464,327],{"class":326},[201,6466,331],{"class":330},[201,6468,6469,6471,6473],{"class":203,"line":372},[201,6470,3100],{"class":337},[201,6472,341],{"class":330},[201,6474,369],{"class":330},[201,6476,6477,6480,6482,6484,6487,6489],{"class":203,"line":382},[201,6478,6479],{"class":337},"    service",[201,6481,341],{"class":330},[201,6483,390],{"class":330},[201,6485,6486],{"class":210},"my-worker",[201,6488,347],{"class":330},[201,6490,358],{"class":330},[201,6492,6493,6496,6498,6500,6503,6505],{"class":203,"line":400},[201,6494,6495],{"class":337},"    environment",[201,6497,341],{"class":330},[201,6499,390],{"class":330},[201,6501,6502],{"class":210},"production",[201,6504,347],{"class":330},[201,6506,358],{"class":330},[201,6508,6509],{"class":203,"line":406},[201,6510,409],{"class":330},[201,6512,6513,6515],{"class":203,"line":412},[201,6514,415],{"class":330},[201,6516,418],{"class":326},[201,6518,6519],{"class":203,"line":930},[201,6520,479],{"emptyLinePlaceholder":478},[201,6522,6523,6525,6528,6530,6532,6534,6536,6539,6541,6544,6546,6548,6550,6552,6554,6556,6558,6561,6563,6566,6568,6570,6572,6575,6577],{"class":203,"line":1266},[201,6524,3597],{"class":486},[201,6526,6527],{"class":326}," log ",[201,6529,611],{"class":330},[201,6531,6444],{"class":322},[201,6533,327],{"class":326},[201,6535,671],{"class":330},[201,6537,6538],{"class":337}," jobId",[201,6540,341],{"class":330},[201,6542,6543],{"class":326}," job",[201,6545,663],{"class":330},[201,6547,6351],{"class":326},[201,6549,495],{"class":330},[201,6551,858],{"class":337},[201,6553,341],{"class":330},[201,6555,6543],{"class":326},[201,6557,663],{"class":330},[201,6559,6560],{"class":326},"source",[201,6562,495],{"class":330},[201,6564,6565],{"class":337}," target",[201,6567,341],{"class":330},[201,6569,6543],{"class":326},[201,6571,663],{"class":330},[201,6573,6574],{"class":326},"target ",[201,6576,415],{"class":330},[201,6578,418],{"class":326},[201,6580,6581,6583,6585,6587,6589,6591,6594,6596,6599,6601],{"class":203,"line":1276},[201,6582,1300],{"class":326},[201,6584,663],{"class":330},[201,6586,666],{"class":322},[201,6588,327],{"class":326},[201,6590,671],{"class":330},[201,6592,6593],{"class":337}," recordsSynced",[201,6595,341],{"class":330},[201,6597,6598],{"class":3249}," 150",[201,6600,462],{"class":330},[201,6602,418],{"class":326},[201,6604,6605,6607,6609,6611,6614],{"class":203,"line":1286},[201,6606,1300],{"class":326},[201,6608,663],{"class":330},[201,6610,3263],{"class":322},[201,6612,6613],{"class":326},"() ",[201,6615,6616],{"class":654},"// Manual emit required in standalone mode\n",[178,6618,6619,6622,6623,425,6626,6629],{},[198,6620,6621],{},"createLogger()"," accepts any initial context, making it ideal for workflows, jobs, queues, or scripts where HTTP request fields (",[198,6624,6625],{},"method",[198,6627,6628],{},"path",") don't apply.",[178,6631,6632,6633,6636,6637,425,6639,429,6641,341],{},"For HTTP request contexts, use ",[198,6634,6635],{},"createRequestLogger()"," which pre-populates ",[198,6638,6625],{},[198,6640,6628],{},[198,6642,1073],{},[190,6644,6647],{"className":305,"code":6645,"filename":6646,"language":308,"meta":196,"style":196},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '/api/checkout', requestId: 'req-123' })\n","server/middleware.ts",[198,6648,6649,6668,6672],{"__ignoreMap":196},[201,6650,6651,6653,6655,6658,6660,6662,6664,6666],{"class":203,"line":204},[201,6652,453],{"class":315},[201,6654,456],{"class":330},[201,6656,6657],{"class":326}," createRequestLogger",[201,6659,462],{"class":330},[201,6661,465],{"class":315},[201,6663,390],{"class":330},[201,6665,2419],{"class":210},[201,6667,473],{"class":330},[201,6669,6670],{"class":203,"line":334},[201,6671,479],{"emptyLinePlaceholder":478},[201,6673,6674,6676,6678,6680,6682,6684,6686,6689,6691,6693,6696,6698,6700,6703,6705,6707,6710,6712,6714,6717,6719,6721,6724,6726,6728],{"class":203,"line":361},[201,6675,3597],{"class":486},[201,6677,6527],{"class":326},[201,6679,611],{"class":330},[201,6681,6657],{"class":322},[201,6683,327],{"class":326},[201,6685,671],{"class":330},[201,6687,6688],{"class":337}," method",[201,6690,341],{"class":330},[201,6692,390],{"class":330},[201,6694,6695],{"class":210},"POST",[201,6697,347],{"class":330},[201,6699,495],{"class":330},[201,6701,6702],{"class":337}," path",[201,6704,341],{"class":330},[201,6706,390],{"class":330},[201,6708,6709],{"class":210},"/api/checkout",[201,6711,347],{"class":330},[201,6713,495],{"class":330},[201,6715,6716],{"class":337}," requestId",[201,6718,341],{"class":330},[201,6720,390],{"class":330},[201,6722,6723],{"class":210},"req-123",[201,6725,347],{"class":330},[201,6727,462],{"class":330},[201,6729,418],{"class":326},[936,6731,6732,6733,6736],{"color":938,"icon":13},"In standalone mode, you must call ",[198,6734,6735],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[734,6738,6740],{"id":6739},"draining-logs-to-external-services","Draining Logs to External Services",[178,6742,4118,6743,6745,6746,6748,6749,6752,6753,6756],{},[198,6744,1634],{}," option in ",[198,6747,3557],{}," to automatically send every emitted event to an external service. This works with all built-in ",[289,6750,6751],{"href":62},"adapters"," and the ",[289,6754,6755],{"href":97},"pipeline"," for batching and retry.",[190,6758,6760],{"className":305,"code":6759,"filename":6429,"language":308,"meta":196,"style":196},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 10 } })\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script', environment: 'production' },\n  drain,\n})\n\n// Every log is automatically drained\nlog.info({ action: 'sync_started' })\n\nconst syncLog = createLogger({ jobId: 'sync-001', source: 'postgres', target: 's3' })\nsyncLog.set({ recordsSynced: 150 })\nsyncLog.emit() // drained automatically\n\n// Flush remaining events before exit\nawait drain.flush()\n",[198,6761,6762,6783,6809,6827,6847,6851,6894,6913,6917,6925,6959,6965,6971,6975,6980,7007,7011,7067,7090,7103,7107,7112],{"__ignoreMap":196},[201,6763,6764,6766,6768,6770,6773,6775,6777,6779,6781],{"class":203,"line":204},[201,6765,453],{"class":315},[201,6767,2651],{"class":315},[201,6769,456],{"class":330},[201,6771,6772],{"class":326}," DrainContext",[201,6774,462],{"class":330},[201,6776,465],{"class":315},[201,6778,390],{"class":330},[201,6780,2419],{"class":210},[201,6782,473],{"class":330},[201,6784,6785,6787,6789,6791,6793,6795,6797,6799,6801,6803,6805,6807],{"class":203,"line":334},[201,6786,453],{"class":315},[201,6788,456],{"class":330},[201,6790,3513],{"class":326},[201,6792,495],{"class":330},[201,6794,503],{"class":326},[201,6796,495],{"class":330},[201,6798,6444],{"class":326},[201,6800,462],{"class":330},[201,6802,465],{"class":315},[201,6804,390],{"class":330},[201,6806,2419],{"class":210},[201,6808,473],{"class":330},[201,6810,6811,6813,6815,6817,6819,6821,6823,6825],{"class":203,"line":361},[201,6812,453],{"class":315},[201,6814,456],{"class":330},[201,6816,3821],{"class":326},[201,6818,462],{"class":330},[201,6820,465],{"class":315},[201,6822,390],{"class":330},[201,6824,3830],{"class":210},[201,6826,473],{"class":330},[201,6828,6829,6831,6833,6836,6838,6840,6842,6845],{"class":203,"line":372},[201,6830,453],{"class":315},[201,6832,456],{"class":330},[201,6834,6835],{"class":326}," createDrainPipeline",[201,6837,462],{"class":330},[201,6839,465],{"class":315},[201,6841,390],{"class":330},[201,6843,6844],{"class":210},"evlog/pipeline",[201,6846,473],{"class":330},[201,6848,6849],{"class":203,"line":382},[201,6850,479],{"emptyLinePlaceholder":478},[201,6852,6853,6855,6858,6860,6862,6864,6867,6869,6871,6873,6876,6878,6880,6883,6885,6888,6890,6892],{"class":203,"line":400},[201,6854,3597],{"class":486},[201,6856,6857],{"class":326}," pipeline ",[201,6859,611],{"class":330},[201,6861,6835],{"class":322},[201,6863,3609],{"class":330},[201,6865,6866],{"class":207},"DrainContext",[201,6868,3615],{"class":330},[201,6870,327],{"class":326},[201,6872,671],{"class":330},[201,6874,6875],{"class":337}," batch",[201,6877,341],{"class":330},[201,6879,456],{"class":330},[201,6881,6882],{"class":337}," size",[201,6884,341],{"class":330},[201,6886,6887],{"class":3249}," 10",[201,6889,462],{"class":330},[201,6891,462],{"class":330},[201,6893,418],{"class":326},[201,6895,6896,6898,6901,6903,6906,6908,6911],{"class":203,"line":406},[201,6897,3597],{"class":486},[201,6899,6900],{"class":326}," drain ",[201,6902,611],{"class":330},[201,6904,6905],{"class":322}," pipeline",[201,6907,327],{"class":326},[201,6909,6910],{"class":322},"createAxiomDrain",[201,6912,3638],{"class":326},[201,6914,6915],{"class":203,"line":412},[201,6916,479],{"emptyLinePlaceholder":478},[201,6918,6919,6921,6923],{"class":203,"line":930},[201,6920,3557],{"class":322},[201,6922,327],{"class":326},[201,6924,331],{"class":330},[201,6926,6927,6929,6931,6933,6935,6937,6939,6942,6944,6946,6949,6951,6953,6955,6957],{"class":203,"line":1266},[201,6928,3100],{"class":337},[201,6930,341],{"class":330},[201,6932,456],{"class":330},[201,6934,1220],{"class":337},[201,6936,341],{"class":330},[201,6938,390],{"class":330},[201,6940,6941],{"class":210},"my-script",[201,6943,347],{"class":330},[201,6945,495],{"class":330},[201,6947,6948],{"class":337}," environment",[201,6950,341],{"class":330},[201,6952,390],{"class":330},[201,6954,6502],{"class":210},[201,6956,347],{"class":330},[201,6958,1992],{"class":330},[201,6960,6961,6963],{"class":203,"line":1276},[201,6962,3974],{"class":326},[201,6964,358],{"class":330},[201,6966,6967,6969],{"class":203,"line":1286},[201,6968,415],{"class":330},[201,6970,418],{"class":326},[201,6972,6973],{"class":203,"line":1292},[201,6974,479],{"emptyLinePlaceholder":478},[201,6976,6977],{"class":203,"line":2832},[201,6978,6979],{"class":654},"// Every log is automatically drained\n",[201,6981,6982,6984,6986,6988,6990,6992,6994,6996,6998,7001,7003,7005],{"class":203,"line":2858},[201,6983,1300],{"class":326},[201,6985,663],{"class":330},[201,6987,938],{"class":322},[201,6989,327],{"class":326},[201,6991,671],{"class":330},[201,6993,844],{"class":337},[201,6995,341],{"class":330},[201,6997,390],{"class":330},[201,6999,7000],{"class":210},"sync_started",[201,7002,347],{"class":330},[201,7004,462],{"class":330},[201,7006,418],{"class":326},[201,7008,7009],{"class":203,"line":2864},[201,7010,479],{"emptyLinePlaceholder":478},[201,7012,7013,7015,7018,7020,7022,7024,7026,7028,7030,7032,7035,7037,7039,7041,7043,7045,7048,7050,7052,7054,7056,7058,7061,7063,7065],{"class":203,"line":2869},[201,7014,3597],{"class":486},[201,7016,7017],{"class":326}," syncLog ",[201,7019,611],{"class":330},[201,7021,6444],{"class":322},[201,7023,327],{"class":326},[201,7025,671],{"class":330},[201,7027,6538],{"class":337},[201,7029,341],{"class":330},[201,7031,390],{"class":330},[201,7033,7034],{"class":210},"sync-001",[201,7036,347],{"class":330},[201,7038,495],{"class":330},[201,7040,858],{"class":337},[201,7042,341],{"class":330},[201,7044,390],{"class":330},[201,7046,7047],{"class":210},"postgres",[201,7049,347],{"class":330},[201,7051,495],{"class":330},[201,7053,6565],{"class":337},[201,7055,341],{"class":330},[201,7057,390],{"class":330},[201,7059,7060],{"class":210},"s3",[201,7062,347],{"class":330},[201,7064,462],{"class":330},[201,7066,418],{"class":326},[201,7068,7069,7072,7074,7076,7078,7080,7082,7084,7086,7088],{"class":203,"line":2874},[201,7070,7071],{"class":326},"syncLog",[201,7073,663],{"class":330},[201,7075,666],{"class":322},[201,7077,327],{"class":326},[201,7079,671],{"class":330},[201,7081,6593],{"class":337},[201,7083,341],{"class":330},[201,7085,6598],{"class":3249},[201,7087,462],{"class":330},[201,7089,418],{"class":326},[201,7091,7092,7094,7096,7098,7100],{"class":203,"line":3351},[201,7093,7071],{"class":326},[201,7095,663],{"class":330},[201,7097,3263],{"class":322},[201,7099,6613],{"class":326},[201,7101,7102],{"class":654},"// drained automatically\n",[201,7104,7105],{"class":203,"line":3360},[201,7106,479],{"emptyLinePlaceholder":478},[201,7108,7109],{"class":203,"line":3366},[201,7110,7111],{"class":654},"// Flush remaining events before exit\n",[201,7113,7114,7116,7119,7121,7124],{"class":203,"line":3371},[201,7115,5899],{"class":315},[201,7117,7118],{"class":326}," drain",[201,7120,663],{"class":330},[201,7122,7123],{"class":322},"flush",[201,7125,829],{"class":326},[936,7127,3426,7128,7133],{"color":1876,"icon":1877},[289,7129,7132],{"href":7130,"rel":7131},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[3431],"bun-script example"," for a complete working script.",[182,7135,7137],{"id":7136},"configuration-options","Configuration Options",[178,7139,7140,7141,7144],{},"These options apply to ",[2410,7142,7143],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[1433,7146,7147,7159],{},[1436,7148,7149],{},[1439,7150,7151,7153,7155,7157],{},[1442,7152,1444],{},[1442,7154,1447],{},[1442,7156,1450],{},[1442,7158,1453],{},[1455,7160,7161,7182,7203,7220,7236,7256,7273,7290,7308,7330,7350],{},[1439,7162,7163,7167,7171,7175],{},[1460,7164,7165],{},[198,7166,1484],{},[1460,7168,7169],{},[198,7170,1489],{},[1460,7172,7173],{},[198,7174,1494],{},[1460,7176,7177,7178,7181],{},"Globally enable/disable all logging. When ",[198,7179,7180],{},"false",", all operations become no-ops",[1439,7183,7184,7189,7193,7197],{},[1460,7185,7186],{},[198,7187,7188],{},"console",[1460,7190,7191],{},[198,7192,1489],{},[1460,7194,7195],{},[198,7196,1494],{},[1460,7198,7199,7200,7202],{},"Enable/disable browser console output. When ",[198,7201,7180],{},", client logs are suppressed in DevTools but still sent via transport",[1439,7204,7205,7210,7214,7218],{},[1460,7206,7207],{},[198,7208,7209],{},"env.service",[1460,7211,7212],{},[198,7213,1469],{},[1460,7215,7216],{},[198,7217,1474],{},[1460,7219,1477],{},[1439,7221,7222,7227,7231,7233],{},[1460,7223,7224],{},[198,7225,7226],{},"env.environment",[1460,7228,7229],{},[198,7230,1469],{},[1460,7232,1529],{},[1460,7234,7235],{},"Environment name",[1439,7237,7238,7242,7246,7250],{},[1460,7239,7240],{},[198,7241,1578],{},[1460,7243,7244],{},[198,7245,1583],{},[1460,7247,7248],{},[198,7249,1549],{},[1460,7251,7252,7253,7255],{},"Route patterns to log. Supports glob (",[198,7254,3903],{},"). If not set, all routes are logged",[1439,7257,7258,7262,7266,7270],{},[1460,7259,7260],{},[198,7261,1597],{},[1460,7263,7264],{},[198,7265,1583],{},[1460,7267,7268],{},[198,7269,1549],{},[1460,7271,7272],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[1439,7274,7275,7279,7283,7287],{},[1460,7276,7277],{},[198,7278,1615],{},[1460,7280,7281],{},[198,7282,1620],{},[1460,7284,7285],{},[198,7286,1549],{},[1460,7288,7289],{},"Route-specific service configuration",[1439,7291,7292,7296,7300,7305],{},[1460,7293,7294],{},[198,7295,1504],{},[1460,7297,7298],{},[198,7299,1489],{},[1460,7301,7302,7304],{},[198,7303,1494],{}," in dev",[1460,7306,7307],{},"Pretty print with tree formatting",[1439,7309,7310,7314,7319,7323],{},[1460,7311,7312],{},[198,7313,1539],{},[1460,7315,7316],{},[198,7317,7318],{},"object",[1460,7320,7321],{},[198,7322,1549],{},[1460,7324,7325,7326],{},"Head sampling rates per log level (0-100%). See ",[289,7327,7329],{"href":7328},"#sampling","Sampling",[1439,7331,7332,7336,7341,7345],{},[1460,7333,7334],{},[198,7335,1559],{},[1460,7337,7338],{},[198,7339,7340],{},"array",[1460,7342,7343],{},[198,7344,1549],{},[1460,7346,7347,7348],{},"Tail sampling conditions to force-keep logs. See ",[289,7349,7329],{"href":7328},[1439,7351,7352,7356,7360,7364],{},[1460,7353,7354],{},[198,7355,1672],{},[1460,7357,7358],{},[198,7359,1677],{},[1460,7361,7362],{},[198,7363,1549],{},[1460,7365,7366,7367,7369],{},"Custom tail sampling callback (Next.js). Equivalent to ",[198,7368,1841],{}," hook in Nuxt",[936,7371,7372,7373,949,7376,7379,7380,663],{"color":938,"icon":13},"Nuxt also supports ",[198,7374,7375],{},"transport.enabled",[198,7377,7378],{},"transport.endpoint"," for ",[289,7381,7383],{"href":7382},"#client-transport-nuxt-only","Client Transport",[259,7385,7387],{"id":7386},"route-filtering","Route Filtering",[178,7389,3419,7390,949,7392,7394],{},[198,7391,1578],{},[198,7393,1597],{}," to control which routes are logged. Both support glob patterns.",[187,7396,7397,7528,7654],{},[190,7398,7400],{"className":305,"code":7399,"filename":307,"language":308,"meta":196,"style":196},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    include: ['/api/**', '/auth/**'],\n    exclude: [\n      '/api/_nuxt_icon/**',\n      '/api/_content/**',\n      '/api/health',\n    ],\n  },\n})\n",[198,7401,7402,7414,7432,7440,7468,7477,7489,7500,7511,7518,7522],{"__ignoreMap":196},[201,7403,7404,7406,7408,7410,7412],{"class":203,"line":204},[201,7405,316],{"class":315},[201,7407,319],{"class":315},[201,7409,323],{"class":322},[201,7411,327],{"class":326},[201,7413,331],{"class":330},[201,7415,7416,7418,7420,7422,7424,7426,7428,7430],{"class":203,"line":334},[201,7417,338],{"class":337},[201,7419,341],{"class":330},[201,7421,344],{"class":326},[201,7423,347],{"class":330},[201,7425,350],{"class":210},[201,7427,347],{"class":330},[201,7429,355],{"class":326},[201,7431,358],{"class":330},[201,7433,7434,7436,7438],{"class":203,"line":361},[201,7435,364],{"class":337},[201,7437,341],{"class":330},[201,7439,369],{"class":330},[201,7441,7442,7445,7447,7449,7451,7453,7455,7457,7459,7462,7464,7466],{"class":203,"line":372},[201,7443,7444],{"class":337},"    include",[201,7446,341],{"class":330},[201,7448,344],{"class":326},[201,7450,347],{"class":330},[201,7452,3903],{"class":210},[201,7454,347],{"class":330},[201,7456,495],{"class":330},[201,7458,390],{"class":330},[201,7460,7461],{"class":210},"/auth/**",[201,7463,347],{"class":330},[201,7465,355],{"class":326},[201,7467,358],{"class":330},[201,7469,7470,7473,7475],{"class":203,"line":382},[201,7471,7472],{"class":337},"    exclude",[201,7474,341],{"class":330},[201,7476,1960],{"class":326},[201,7478,7479,7482,7485,7487],{"class":203,"line":400},[201,7480,7481],{"class":330},"      '",[201,7483,7484],{"class":210},"/api/_nuxt_icon/**",[201,7486,347],{"class":330},[201,7488,358],{"class":330},[201,7490,7491,7493,7496,7498],{"class":203,"line":406},[201,7492,7481],{"class":330},[201,7494,7495],{"class":210},"/api/_content/**",[201,7497,347],{"class":330},[201,7499,358],{"class":330},[201,7501,7502,7504,7507,7509],{"class":203,"line":412},[201,7503,7481],{"class":330},[201,7505,7506],{"class":210},"/api/health",[201,7508,347],{"class":330},[201,7510,358],{"class":330},[201,7512,7513,7516],{"class":203,"line":930},[201,7514,7515],{"class":326},"    ]",[201,7517,358],{"class":330},[201,7519,7520],{"class":203,"line":1266},[201,7521,409],{"class":330},[201,7523,7524,7526],{"class":203,"line":1276},[201,7525,415],{"class":330},[201,7527,418],{"class":326},[190,7529,7532],{"className":305,"code":7530,"filename":7531,"language":308,"meta":196,"style":196},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      include: ['/api/**'],\n      exclude: ['/api/health'],\n    })\n  ],\n})\n","nitro.config.ts (v3)",[198,7533,7534,7552,7566,7570,7582,7590,7598,7617,7636,7642,7648],{"__ignoreMap":196},[201,7535,7536,7538,7540,7542,7544,7546,7548,7550],{"class":203,"line":204},[201,7537,453],{"class":315},[201,7539,456],{"class":330},[201,7541,1908],{"class":326},[201,7543,462],{"class":330},[201,7545,465],{"class":315},[201,7547,390],{"class":330},[201,7549,1892],{"class":210},[201,7551,473],{"class":330},[201,7553,7554,7556,7558,7560,7562,7564],{"class":203,"line":334},[201,7555,453],{"class":315},[201,7557,1925],{"class":326},[201,7559,1928],{"class":315},[201,7561,390],{"class":330},[201,7563,1933],{"class":210},[201,7565,473],{"class":330},[201,7567,7568],{"class":203,"line":361},[201,7569,479],{"emptyLinePlaceholder":478},[201,7571,7572,7574,7576,7578,7580],{"class":203,"line":372},[201,7573,316],{"class":315},[201,7575,319],{"class":315},[201,7577,1908],{"class":322},[201,7579,327],{"class":326},[201,7581,331],{"class":330},[201,7583,7584,7586,7588],{"class":203,"line":382},[201,7585,338],{"class":337},[201,7587,341],{"class":330},[201,7589,1960],{"class":326},[201,7591,7592,7594,7596],{"class":203,"line":400},[201,7593,1965],{"class":322},[201,7595,327],{"class":326},[201,7597,331],{"class":330},[201,7599,7600,7603,7605,7607,7609,7611,7613,7615],{"class":203,"line":406},[201,7601,7602],{"class":337},"      include",[201,7604,341],{"class":330},[201,7606,344],{"class":326},[201,7608,347],{"class":330},[201,7610,3903],{"class":210},[201,7612,347],{"class":330},[201,7614,355],{"class":326},[201,7616,358],{"class":330},[201,7618,7619,7622,7624,7626,7628,7630,7632,7634],{"class":203,"line":412},[201,7620,7621],{"class":337},"      exclude",[201,7623,341],{"class":330},[201,7625,344],{"class":326},[201,7627,347],{"class":330},[201,7629,7506],{"class":210},[201,7631,347],{"class":330},[201,7633,355],{"class":326},[201,7635,358],{"class":330},[201,7637,7638,7640],{"class":203,"line":930},[201,7639,1997],{"class":330},[201,7641,418],{"class":326},[201,7643,7644,7646],{"class":203,"line":1266},[201,7645,2004],{"class":326},[201,7647,358],{"class":330},[201,7649,7650,7652],{"class":203,"line":1276},[201,7651,415],{"class":330},[201,7653,418],{"class":326},[190,7655,7658],{"className":305,"code":7656,"filename":7657,"language":308,"meta":196,"style":196},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      include: ['/api/**'],\n      exclude: ['/api/health'],\n    })\n  ],\n})\n","nitro.config.ts (v2)",[198,7659,7660,7678,7692,7696,7708,7716,7724,7742,7760,7766,7772],{"__ignoreMap":196},[201,7661,7662,7664,7666,7668,7670,7672,7674,7676],{"class":203,"line":204},[201,7663,453],{"class":315},[201,7665,456],{"class":330},[201,7667,2176],{"class":326},[201,7669,462],{"class":330},[201,7671,465],{"class":315},[201,7673,390],{"class":330},[201,7675,2185],{"class":210},[201,7677,473],{"class":330},[201,7679,7680,7682,7684,7686,7688,7690],{"class":203,"line":334},[201,7681,453],{"class":315},[201,7683,1925],{"class":326},[201,7685,1928],{"class":315},[201,7687,390],{"class":330},[201,7689,2200],{"class":210},[201,7691,473],{"class":330},[201,7693,7694],{"class":203,"line":361},[201,7695,479],{"emptyLinePlaceholder":478},[201,7697,7698,7700,7702,7704,7706],{"class":203,"line":372},[201,7699,316],{"class":315},[201,7701,319],{"class":315},[201,7703,2176],{"class":322},[201,7705,327],{"class":326},[201,7707,331],{"class":330},[201,7709,7710,7712,7714],{"class":203,"line":382},[201,7711,338],{"class":337},[201,7713,341],{"class":330},[201,7715,1960],{"class":326},[201,7717,7718,7720,7722],{"class":203,"line":400},[201,7719,1965],{"class":322},[201,7721,327],{"class":326},[201,7723,331],{"class":330},[201,7725,7726,7728,7730,7732,7734,7736,7738,7740],{"class":203,"line":406},[201,7727,7602],{"class":337},[201,7729,341],{"class":330},[201,7731,344],{"class":326},[201,7733,347],{"class":330},[201,7735,3903],{"class":210},[201,7737,347],{"class":330},[201,7739,355],{"class":326},[201,7741,358],{"class":330},[201,7743,7744,7746,7748,7750,7752,7754,7756,7758],{"class":203,"line":412},[201,7745,7621],{"class":337},[201,7747,341],{"class":330},[201,7749,344],{"class":326},[201,7751,347],{"class":330},[201,7753,7506],{"class":210},[201,7755,347],{"class":330},[201,7757,355],{"class":326},[201,7759,358],{"class":330},[201,7761,7762,7764],{"class":203,"line":930},[201,7763,1997],{"class":330},[201,7765,418],{"class":326},[201,7767,7768,7770],{"class":203,"line":1266},[201,7769,2004],{"class":326},[201,7771,358],{"class":330},[201,7773,7774,7776],{"class":203,"line":1276},[201,7775,415],{"class":330},[201,7777,418],{"class":326},[936,7779,7780,7783,7784,949,7786,7788],{"color":938,"icon":13},[2410,7781,7782],{},"Exclusions take precedence."," If a path matches both ",[198,7785,1578],{},[198,7787,1597],{},", it will be excluded.",[259,7790,7792],{"id":7791},"route-based-service-configuration","Route-Based Service Configuration",[178,7794,7795],{},"In multi-service architectures, configure different service names for different routes:",[187,7797,7798,7967,8136],{},[190,7799,7801],{"className":305,"code":7800,"filename":307,"language":308,"meta":196,"style":196},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'default-service',\n    },\n    routes: {\n      '/api/auth/**': { service: 'auth-service' },\n      '/api/payment/**': { service: 'payment-service' },\n      '/api/booking/**': { service: 'booking-service' },\n    },\n  },\n})\n",[198,7802,7803,7815,7833,7841,7849,7864,7868,7877,7901,7927,7953,7957,7961],{"__ignoreMap":196},[201,7804,7805,7807,7809,7811,7813],{"class":203,"line":204},[201,7806,316],{"class":315},[201,7808,319],{"class":315},[201,7810,323],{"class":322},[201,7812,327],{"class":326},[201,7814,331],{"class":330},[201,7816,7817,7819,7821,7823,7825,7827,7829,7831],{"class":203,"line":334},[201,7818,338],{"class":337},[201,7820,341],{"class":330},[201,7822,344],{"class":326},[201,7824,347],{"class":330},[201,7826,350],{"class":210},[201,7828,347],{"class":330},[201,7830,355],{"class":326},[201,7832,358],{"class":330},[201,7834,7835,7837,7839],{"class":203,"line":361},[201,7836,364],{"class":337},[201,7838,341],{"class":330},[201,7840,369],{"class":330},[201,7842,7843,7845,7847],{"class":203,"line":372},[201,7844,375],{"class":337},[201,7846,341],{"class":330},[201,7848,369],{"class":330},[201,7850,7851,7853,7855,7857,7860,7862],{"class":203,"line":382},[201,7852,385],{"class":337},[201,7854,341],{"class":330},[201,7856,390],{"class":330},[201,7858,7859],{"class":210},"default-service",[201,7861,347],{"class":330},[201,7863,358],{"class":330},[201,7865,7866],{"class":203,"line":400},[201,7867,403],{"class":330},[201,7869,7870,7873,7875],{"class":203,"line":406},[201,7871,7872],{"class":337},"    routes",[201,7874,341],{"class":330},[201,7876,369],{"class":330},[201,7878,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899],{"class":203,"line":412},[201,7880,7481],{"class":330},[201,7882,3946],{"class":337},[201,7884,347],{"class":330},[201,7886,341],{"class":330},[201,7888,456],{"class":330},[201,7890,1220],{"class":337},[201,7892,341],{"class":330},[201,7894,390],{"class":330},[201,7896,3961],{"class":210},[201,7898,347],{"class":330},[201,7900,1992],{"class":330},[201,7902,7903,7905,7908,7910,7912,7914,7916,7918,7920,7923,7925],{"class":203,"line":930},[201,7904,7481],{"class":330},[201,7906,7907],{"class":337},"/api/payment/**",[201,7909,347],{"class":330},[201,7911,341],{"class":330},[201,7913,456],{"class":330},[201,7915,1220],{"class":337},[201,7917,341],{"class":330},[201,7919,390],{"class":330},[201,7921,7922],{"class":210},"payment-service",[201,7924,347],{"class":330},[201,7926,1992],{"class":330},[201,7928,7929,7931,7934,7936,7938,7940,7942,7944,7946,7949,7951],{"class":203,"line":1266},[201,7930,7481],{"class":330},[201,7932,7933],{"class":337},"/api/booking/**",[201,7935,347],{"class":330},[201,7937,341],{"class":330},[201,7939,456],{"class":330},[201,7941,1220],{"class":337},[201,7943,341],{"class":330},[201,7945,390],{"class":330},[201,7947,7948],{"class":210},"booking-service",[201,7950,347],{"class":330},[201,7952,1992],{"class":330},[201,7954,7955],{"class":203,"line":1276},[201,7956,403],{"class":330},[201,7958,7959],{"class":203,"line":1286},[201,7960,409],{"class":330},[201,7962,7963,7965],{"class":203,"line":1292},[201,7964,415],{"class":330},[201,7966,418],{"class":326},[190,7968,7970],{"className":305,"code":7969,"filename":7531,"language":308,"meta":196,"style":196},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'default-service' },\n      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[198,7971,7972,7990,8004,8008,8020,8028,8036,8056,8065,8090,8114,8118,8124,8130],{"__ignoreMap":196},[201,7973,7974,7976,7978,7980,7982,7984,7986,7988],{"class":203,"line":204},[201,7975,453],{"class":315},[201,7977,456],{"class":330},[201,7979,1908],{"class":326},[201,7981,462],{"class":330},[201,7983,465],{"class":315},[201,7985,390],{"class":330},[201,7987,1892],{"class":210},[201,7989,473],{"class":330},[201,7991,7992,7994,7996,7998,8000,8002],{"class":203,"line":334},[201,7993,453],{"class":315},[201,7995,1925],{"class":326},[201,7997,1928],{"class":315},[201,7999,390],{"class":330},[201,8001,1933],{"class":210},[201,8003,473],{"class":330},[201,8005,8006],{"class":203,"line":361},[201,8007,479],{"emptyLinePlaceholder":478},[201,8009,8010,8012,8014,8016,8018],{"class":203,"line":372},[201,8011,316],{"class":315},[201,8013,319],{"class":315},[201,8015,1908],{"class":322},[201,8017,327],{"class":326},[201,8019,331],{"class":330},[201,8021,8022,8024,8026],{"class":203,"line":382},[201,8023,338],{"class":337},[201,8025,341],{"class":330},[201,8027,1960],{"class":326},[201,8029,8030,8032,8034],{"class":203,"line":400},[201,8031,1965],{"class":322},[201,8033,327],{"class":326},[201,8035,331],{"class":330},[201,8037,8038,8040,8042,8044,8046,8048,8050,8052,8054],{"class":203,"line":406},[201,8039,1974],{"class":337},[201,8041,341],{"class":330},[201,8043,456],{"class":330},[201,8045,1220],{"class":337},[201,8047,341],{"class":330},[201,8049,390],{"class":330},[201,8051,7859],{"class":210},[201,8053,347],{"class":330},[201,8055,1992],{"class":330},[201,8057,8058,8061,8063],{"class":203,"line":412},[201,8059,8060],{"class":337},"      routes",[201,8062,341],{"class":330},[201,8064,369],{"class":330},[201,8066,8067,8070,8072,8074,8076,8078,8080,8082,8084,8086,8088],{"class":203,"line":930},[201,8068,8069],{"class":330},"        '",[201,8071,3946],{"class":337},[201,8073,347],{"class":330},[201,8075,341],{"class":330},[201,8077,456],{"class":330},[201,8079,1220],{"class":337},[201,8081,341],{"class":330},[201,8083,390],{"class":330},[201,8085,3961],{"class":210},[201,8087,347],{"class":330},[201,8089,1992],{"class":330},[201,8091,8092,8094,8096,8098,8100,8102,8104,8106,8108,8110,8112],{"class":203,"line":1266},[201,8093,8069],{"class":330},[201,8095,7907],{"class":337},[201,8097,347],{"class":330},[201,8099,341],{"class":330},[201,8101,456],{"class":330},[201,8103,1220],{"class":337},[201,8105,341],{"class":330},[201,8107,390],{"class":330},[201,8109,7922],{"class":210},[201,8111,347],{"class":330},[201,8113,1992],{"class":330},[201,8115,8116],{"class":203,"line":1276},[201,8117,2861],{"class":330},[201,8119,8120,8122],{"class":203,"line":1286},[201,8121,1997],{"class":330},[201,8123,418],{"class":326},[201,8125,8126,8128],{"class":203,"line":1292},[201,8127,2004],{"class":326},[201,8129,358],{"class":330},[201,8131,8132,8134],{"class":203,"line":2832},[201,8133,415],{"class":330},[201,8135,418],{"class":326},[190,8137,8139],{"className":305,"code":8138,"filename":7657,"language":308,"meta":196,"style":196},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'default-service' },\n      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[198,8140,8141,8159,8173,8177,8189,8197,8205,8225,8233,8257,8281,8285,8291,8297],{"__ignoreMap":196},[201,8142,8143,8145,8147,8149,8151,8153,8155,8157],{"class":203,"line":204},[201,8144,453],{"class":315},[201,8146,456],{"class":330},[201,8148,2176],{"class":326},[201,8150,462],{"class":330},[201,8152,465],{"class":315},[201,8154,390],{"class":330},[201,8156,2185],{"class":210},[201,8158,473],{"class":330},[201,8160,8161,8163,8165,8167,8169,8171],{"class":203,"line":334},[201,8162,453],{"class":315},[201,8164,1925],{"class":326},[201,8166,1928],{"class":315},[201,8168,390],{"class":330},[201,8170,2200],{"class":210},[201,8172,473],{"class":330},[201,8174,8175],{"class":203,"line":361},[201,8176,479],{"emptyLinePlaceholder":478},[201,8178,8179,8181,8183,8185,8187],{"class":203,"line":372},[201,8180,316],{"class":315},[201,8182,319],{"class":315},[201,8184,2176],{"class":322},[201,8186,327],{"class":326},[201,8188,331],{"class":330},[201,8190,8191,8193,8195],{"class":203,"line":382},[201,8192,338],{"class":337},[201,8194,341],{"class":330},[201,8196,1960],{"class":326},[201,8198,8199,8201,8203],{"class":203,"line":400},[201,8200,1965],{"class":322},[201,8202,327],{"class":326},[201,8204,331],{"class":330},[201,8206,8207,8209,8211,8213,8215,8217,8219,8221,8223],{"class":203,"line":406},[201,8208,1974],{"class":337},[201,8210,341],{"class":330},[201,8212,456],{"class":330},[201,8214,1220],{"class":337},[201,8216,341],{"class":330},[201,8218,390],{"class":330},[201,8220,7859],{"class":210},[201,8222,347],{"class":330},[201,8224,1992],{"class":330},[201,8226,8227,8229,8231],{"class":203,"line":412},[201,8228,8060],{"class":337},[201,8230,341],{"class":330},[201,8232,369],{"class":330},[201,8234,8235,8237,8239,8241,8243,8245,8247,8249,8251,8253,8255],{"class":203,"line":930},[201,8236,8069],{"class":330},[201,8238,3946],{"class":337},[201,8240,347],{"class":330},[201,8242,341],{"class":330},[201,8244,456],{"class":330},[201,8246,1220],{"class":337},[201,8248,341],{"class":330},[201,8250,390],{"class":330},[201,8252,3961],{"class":210},[201,8254,347],{"class":330},[201,8256,1992],{"class":330},[201,8258,8259,8261,8263,8265,8267,8269,8271,8273,8275,8277,8279],{"class":203,"line":1266},[201,8260,8069],{"class":330},[201,8262,7907],{"class":337},[201,8264,347],{"class":330},[201,8266,341],{"class":330},[201,8268,456],{"class":330},[201,8270,1220],{"class":337},[201,8272,341],{"class":330},[201,8274,390],{"class":330},[201,8276,7922],{"class":210},[201,8278,347],{"class":330},[201,8280,1992],{"class":330},[201,8282,8283],{"class":203,"line":1276},[201,8284,2861],{"class":330},[201,8286,8287,8289],{"class":203,"line":1286},[201,8288,1997],{"class":330},[201,8290,418],{"class":326},[201,8292,8293,8295],{"class":203,"line":1292},[201,8294,2004],{"class":326},[201,8296,358],{"class":330},[201,8298,8299,8301],{"class":203,"line":2832},[201,8300,415],{"class":330},[201,8302,418],{"class":326},[178,8304,8305,8306,8309,8310,291],{},"You can also override the service name per handler using ",[198,8307,8308],{},"useLogger(event, 'service-name')",". See ",[289,8311,8313],{"href":8312},"/getting-started/quick-start#service-identification","Quick Start - Service Identification",[259,8315,7329],{"id":8316},"sampling",[178,8318,8319],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[734,8321,8323],{"id":8322},"head-sampling-rates","Head Sampling (rates)",[178,8325,8326,8327,8330],{},"Random sampling based on log level, decided ",[2410,8328,8329],{},"before"," the request completes:",[187,8332,8333,8471,8607],{},[190,8334,8336],{"className":305,"code":8335,"filename":307,"language":308,"meta":196,"style":196},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,    // Keep 10% of info logs\n        warn: 50,    // Keep 50% of warning logs\n        debug: 5,    // Keep 5% of debug logs\n        error: 100,  // Always keep errors (default)\n      },\n    },\n  },\n})\n",[198,8337,8338,8350,8368,8376,8385,8394,8408,8423,8438,8453,8457,8461,8465],{"__ignoreMap":196},[201,8339,8340,8342,8344,8346,8348],{"class":203,"line":204},[201,8341,316],{"class":315},[201,8343,319],{"class":315},[201,8345,323],{"class":322},[201,8347,327],{"class":326},[201,8349,331],{"class":330},[201,8351,8352,8354,8356,8358,8360,8362,8364,8366],{"class":203,"line":334},[201,8353,338],{"class":337},[201,8355,341],{"class":330},[201,8357,344],{"class":326},[201,8359,347],{"class":330},[201,8361,350],{"class":210},[201,8363,347],{"class":330},[201,8365,355],{"class":326},[201,8367,358],{"class":330},[201,8369,8370,8372,8374],{"class":203,"line":361},[201,8371,364],{"class":337},[201,8373,341],{"class":330},[201,8375,369],{"class":330},[201,8377,8378,8381,8383],{"class":203,"line":372},[201,8379,8380],{"class":337},"    sampling",[201,8382,341],{"class":330},[201,8384,369],{"class":330},[201,8386,8387,8390,8392],{"class":203,"line":382},[201,8388,8389],{"class":337},"      rates",[201,8391,341],{"class":330},[201,8393,369],{"class":330},[201,8395,8396,8399,8401,8403,8405],{"class":203,"line":400},[201,8397,8398],{"class":337},"        info",[201,8400,341],{"class":330},[201,8402,6887],{"class":3249},[201,8404,495],{"class":330},[201,8406,8407],{"class":654},"    // Keep 10% of info logs\n",[201,8409,8410,8413,8415,8418,8420],{"class":203,"line":406},[201,8411,8412],{"class":337},"        warn",[201,8414,341],{"class":330},[201,8416,8417],{"class":3249}," 50",[201,8419,495],{"class":330},[201,8421,8422],{"class":654},"    // Keep 50% of warning logs\n",[201,8424,8425,8428,8430,8433,8435],{"class":203,"line":412},[201,8426,8427],{"class":337},"        debug",[201,8429,341],{"class":330},[201,8431,8432],{"class":3249}," 5",[201,8434,495],{"class":330},[201,8436,8437],{"class":654},"    // Keep 5% of debug logs\n",[201,8439,8440,8443,8445,8448,8450],{"class":203,"line":930},[201,8441,8442],{"class":337},"        error",[201,8444,341],{"class":330},[201,8446,8447],{"class":3249}," 100",[201,8449,495],{"class":330},[201,8451,8452],{"class":654},"  // Always keep errors (default)\n",[201,8454,8455],{"class":203,"line":1266},[201,8456,2861],{"class":330},[201,8458,8459],{"class":203,"line":1276},[201,8460,403],{"class":330},[201,8462,8463],{"class":203,"line":1286},[201,8464,409],{"class":330},[201,8466,8467,8469],{"class":203,"line":1292},[201,8468,415],{"class":330},[201,8470,418],{"class":326},[190,8472,8474],{"className":305,"code":8473,"filename":7531,"language":308,"meta":196,"style":196},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n      },\n    })\n  ],\n})\n",[198,8475,8476,8494,8508,8512,8524,8532,8540,8549,8585,8589,8595,8601],{"__ignoreMap":196},[201,8477,8478,8480,8482,8484,8486,8488,8490,8492],{"class":203,"line":204},[201,8479,453],{"class":315},[201,8481,456],{"class":330},[201,8483,1908],{"class":326},[201,8485,462],{"class":330},[201,8487,465],{"class":315},[201,8489,390],{"class":330},[201,8491,1892],{"class":210},[201,8493,473],{"class":330},[201,8495,8496,8498,8500,8502,8504,8506],{"class":203,"line":334},[201,8497,453],{"class":315},[201,8499,1925],{"class":326},[201,8501,1928],{"class":315},[201,8503,390],{"class":330},[201,8505,1933],{"class":210},[201,8507,473],{"class":330},[201,8509,8510],{"class":203,"line":361},[201,8511,479],{"emptyLinePlaceholder":478},[201,8513,8514,8516,8518,8520,8522],{"class":203,"line":372},[201,8515,316],{"class":315},[201,8517,319],{"class":315},[201,8519,1908],{"class":322},[201,8521,327],{"class":326},[201,8523,331],{"class":330},[201,8525,8526,8528,8530],{"class":203,"line":382},[201,8527,338],{"class":337},[201,8529,341],{"class":330},[201,8531,1960],{"class":326},[201,8533,8534,8536,8538],{"class":203,"line":400},[201,8535,1965],{"class":322},[201,8537,327],{"class":326},[201,8539,331],{"class":330},[201,8541,8542,8545,8547],{"class":203,"line":406},[201,8543,8544],{"class":337},"      sampling",[201,8546,341],{"class":330},[201,8548,369],{"class":330},[201,8550,8551,8554,8556,8558,8561,8563,8565,8567,8570,8572,8574,8576,8579,8581,8583],{"class":203,"line":412},[201,8552,8553],{"class":337},"        rates",[201,8555,341],{"class":330},[201,8557,456],{"class":330},[201,8559,8560],{"class":337}," info",[201,8562,341],{"class":330},[201,8564,6887],{"class":3249},[201,8566,495],{"class":330},[201,8568,8569],{"class":337}," warn",[201,8571,341],{"class":330},[201,8573,8417],{"class":3249},[201,8575,495],{"class":330},[201,8577,8578],{"class":337}," debug",[201,8580,341],{"class":330},[201,8582,8432],{"class":3249},[201,8584,1992],{"class":330},[201,8586,8587],{"class":203,"line":930},[201,8588,2861],{"class":330},[201,8590,8591,8593],{"class":203,"line":1266},[201,8592,1997],{"class":330},[201,8594,418],{"class":326},[201,8596,8597,8599],{"class":203,"line":1276},[201,8598,2004],{"class":326},[201,8600,358],{"class":330},[201,8602,8603,8605],{"class":203,"line":1286},[201,8604,415],{"class":330},[201,8606,418],{"class":326},[190,8608,8610],{"className":305,"code":8609,"filename":7657,"language":308,"meta":196,"style":196},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n      },\n    })\n  ],\n})\n",[198,8611,8612,8630,8644,8648,8660,8668,8676,8684,8716,8720,8726,8732],{"__ignoreMap":196},[201,8613,8614,8616,8618,8620,8622,8624,8626,8628],{"class":203,"line":204},[201,8615,453],{"class":315},[201,8617,456],{"class":330},[201,8619,2176],{"class":326},[201,8621,462],{"class":330},[201,8623,465],{"class":315},[201,8625,390],{"class":330},[201,8627,2185],{"class":210},[201,8629,473],{"class":330},[201,8631,8632,8634,8636,8638,8640,8642],{"class":203,"line":334},[201,8633,453],{"class":315},[201,8635,1925],{"class":326},[201,8637,1928],{"class":315},[201,8639,390],{"class":330},[201,8641,2200],{"class":210},[201,8643,473],{"class":330},[201,8645,8646],{"class":203,"line":361},[201,8647,479],{"emptyLinePlaceholder":478},[201,8649,8650,8652,8654,8656,8658],{"class":203,"line":372},[201,8651,316],{"class":315},[201,8653,319],{"class":315},[201,8655,2176],{"class":322},[201,8657,327],{"class":326},[201,8659,331],{"class":330},[201,8661,8662,8664,8666],{"class":203,"line":382},[201,8663,338],{"class":337},[201,8665,341],{"class":330},[201,8667,1960],{"class":326},[201,8669,8670,8672,8674],{"class":203,"line":400},[201,8671,1965],{"class":322},[201,8673,327],{"class":326},[201,8675,331],{"class":330},[201,8677,8678,8680,8682],{"class":203,"line":406},[201,8679,8544],{"class":337},[201,8681,341],{"class":330},[201,8683,369],{"class":330},[201,8685,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712,8714],{"class":203,"line":412},[201,8687,8553],{"class":337},[201,8689,341],{"class":330},[201,8691,456],{"class":330},[201,8693,8560],{"class":337},[201,8695,341],{"class":330},[201,8697,6887],{"class":3249},[201,8699,495],{"class":330},[201,8701,8569],{"class":337},[201,8703,341],{"class":330},[201,8705,8417],{"class":3249},[201,8707,495],{"class":330},[201,8709,8578],{"class":337},[201,8711,341],{"class":330},[201,8713,8432],{"class":3249},[201,8715,1992],{"class":330},[201,8717,8718],{"class":203,"line":930},[201,8719,2861],{"class":330},[201,8721,8722,8724],{"class":203,"line":1266},[201,8723,1997],{"class":330},[201,8725,418],{"class":326},[201,8727,8728,8730],{"class":203,"line":1276},[201,8729,2004],{"class":326},[201,8731,358],{"class":330},[201,8733,8734,8736],{"class":203,"line":1286},[201,8735,415],{"class":330},[201,8737,418],{"class":326},[936,8739,8741,8744,8745,8748,8749,663],{"color":8740,"icon":49},"success",[2410,8742,8743],{},"Errors are always logged by default."," Even if you don't specify ",[198,8746,8747],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[198,8750,8751],{},"error: 0",[734,8753,8755],{"id":8754},"tail-sampling-keep","Tail Sampling (keep)",[178,8757,8758,8759,8762],{},"Force-keep logs based on request outcome, evaluated ",[2410,8760,8761],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[190,8764,8766],{"className":305,"code":8765,"language":308,"meta":196,"style":196},"// Works the same in Nuxt, Nitro v2, and Nitro v3\nsampling: {\n  rates: { info: 10 },\n  keep: [\n    { duration: 1000 },           // Always keep if duration >= 1000ms\n    { status: 400 },              // Always keep if status >= 400\n    { path: '/api/critical/**' }, // Always keep critical paths\n  ],\n}\n",[198,8767,8768,8773,8781,8798,8806,8825,8841,8861,8867],{"__ignoreMap":196},[201,8769,8770],{"class":203,"line":204},[201,8771,8772],{"class":654},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[201,8774,8775,8777,8779],{"class":203,"line":334},[201,8776,8316],{"class":207},[201,8778,341],{"class":330},[201,8780,369],{"class":330},[201,8782,8783,8786,8788,8790,8792,8794,8796],{"class":203,"line":361},[201,8784,8785],{"class":207},"  rates",[201,8787,341],{"class":330},[201,8789,456],{"class":330},[201,8791,8560],{"class":207},[201,8793,341],{"class":330},[201,8795,6887],{"class":3249},[201,8797,1992],{"class":330},[201,8799,8800,8802,8804],{"class":203,"line":372},[201,8801,4048],{"class":207},[201,8803,341],{"class":330},[201,8805,1960],{"class":337},[201,8807,8808,8811,8814,8816,8819,8822],{"class":203,"line":382},[201,8809,8810],{"class":330},"    {",[201,8812,8813],{"class":337}," duration",[201,8815,341],{"class":330},[201,8817,8818],{"class":3249}," 1000",[201,8820,8821],{"class":330}," },",[201,8823,8824],{"class":654},"           // Always keep if duration >= 1000ms\n",[201,8826,8827,8829,8831,8833,8836,8838],{"class":203,"line":400},[201,8828,8810],{"class":330},[201,8830,3244],{"class":337},[201,8832,341],{"class":330},[201,8834,8835],{"class":3249}," 400",[201,8837,8821],{"class":330},[201,8839,8840],{"class":654},"              // Always keep if status >= 400\n",[201,8842,8843,8845,8847,8849,8851,8854,8856,8858],{"class":203,"line":406},[201,8844,8810],{"class":330},[201,8846,6702],{"class":337},[201,8848,341],{"class":330},[201,8850,390],{"class":330},[201,8852,8853],{"class":210},"/api/critical/**",[201,8855,347],{"class":330},[201,8857,8821],{"class":330},[201,8859,8860],{"class":654}," // Always keep critical paths\n",[201,8862,8863,8865],{"class":203,"line":412},[201,8864,2004],{"class":337},[201,8866,358],{"class":330},[201,8868,8869],{"class":203,"line":930},[201,8870,1064],{"class":330},[178,8872,8873,8874,8877],{},"Conditions use ",[198,8875,8876],{},">="," comparison and follow OR logic (any match = keep).",[734,8879,8881],{"id":8880},"custom-tail-sampling","Custom Tail Sampling",[178,8883,8884,8885,8887,8888,8890],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[198,8886,1841],{}," hook (Nuxt/Nitro) or the ",[198,8889,1672],{}," callback (Next.js):",[187,8892,8893,9047],{},[190,8894,8897],{"className":305,"code":8895,"filename":8896,"language":308,"meta":196,"style":196},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server/plugins/evlog-sampling.ts (Nuxt)",[198,8898,8899,8921,8956,8996,9000,9018,9031,9035,9041],{"__ignoreMap":196},[201,8900,8901,8903,8905,8908,8910,8912,8915,8917,8919],{"class":203,"line":204},[201,8902,316],{"class":315},[201,8904,319],{"class":315},[201,8906,8907],{"class":322}," defineNitroPlugin",[201,8909,327],{"class":326},[201,8911,327],{"class":330},[201,8913,8914],{"class":624},"nitroApp",[201,8916,632],{"class":330},[201,8918,635],{"class":486},[201,8920,369],{"class":330},[201,8922,8923,8926,8928,8931,8933,8936,8938,8940,8942,8944,8946,8948,8950,8952,8954],{"class":203,"line":334},[201,8924,8925],{"class":326},"  nitroApp",[201,8927,663],{"class":330},[201,8929,8930],{"class":326},"hooks",[201,8932,663],{"class":330},[201,8934,8935],{"class":322},"hook",[201,8937,327],{"class":337},[201,8939,347],{"class":330},[201,8941,1841],{"class":210},[201,8943,347],{"class":330},[201,8945,495],{"class":330},[201,8947,621],{"class":330},[201,8949,3994],{"class":624},[201,8951,632],{"class":330},[201,8953,635],{"class":486},[201,8955,369],{"class":330},[201,8957,8958,8960,8962,8964,8966,8968,8970,8972,8975,8977,8979,8982,8985,8988,8990,8993],{"class":203,"line":361},[201,8959,3161],{"class":486},[201,8961,674],{"class":326},[201,8963,513],{"class":330},[201,8965,4080],{"class":326},[201,8967,663],{"class":330},[201,8969,2761],{"class":326},[201,8971,663],{"class":330},[201,8973,8974],{"class":326},"user",[201,8976,2768],{"class":315},[201,8978,456],{"class":330},[201,8980,8981],{"class":337}," premium",[201,8983,8984],{"class":330},"?:",[201,8986,8987],{"class":207}," boolean",[201,8989,462],{"class":330},[201,8991,8992],{"class":330}," |",[201,8994,8995],{"class":207}," undefined\n",[201,8997,8998],{"class":203,"line":372},[201,8999,479],{"emptyLinePlaceholder":478},[201,9001,9002,9004,9006,9008,9011,9014,9016],{"class":203,"line":382},[201,9003,4065],{"class":315},[201,9005,621],{"class":337},[201,9007,8974],{"class":326},[201,9009,9010],{"class":330},"?.",[201,9012,9013],{"class":326},"premium",[201,9015,908],{"class":337},[201,9017,331],{"class":330},[201,9019,9020,9023,9025,9027,9029],{"class":203,"line":400},[201,9021,9022],{"class":326},"      ctx",[201,9024,663],{"class":330},[201,9026,4099],{"class":326},[201,9028,513],{"class":330},[201,9030,4104],{"class":721},[201,9032,9033],{"class":203,"line":406},[201,9034,3363],{"class":330},[201,9036,9037,9039],{"class":203,"line":412},[201,9038,5202],{"class":330},[201,9040,418],{"class":337},[201,9042,9043,9045],{"class":203,"line":930},[201,9044,415],{"class":330},[201,9046,418],{"class":326},[190,9048,9051],{"className":305,"code":9049,"filename":9050,"language":308,"meta":196,"style":196},"import { createEvlog } from 'evlog/next'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: { info: 10 },\n    keep: [{ status: 400 }, { duration: 1000 }],\n  },\n  keep: (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  },\n})\n","lib/evlog.ts (Next.js)",[198,9052,9053,9071,9075,9100,9114,9123,9140,9173,9177,9193,9227,9251,9255],{"__ignoreMap":196},[201,9054,9055,9057,9059,9061,9063,9065,9067,9069],{"class":203,"line":204},[201,9056,453],{"class":315},[201,9058,456],{"class":330},[201,9060,459],{"class":326},[201,9062,462],{"class":330},[201,9064,465],{"class":315},[201,9066,390],{"class":330},[201,9068,470],{"class":210},[201,9070,473],{"class":330},[201,9072,9073],{"class":203,"line":334},[201,9074,479],{"emptyLinePlaceholder":478},[201,9076,9077,9079,9081,9083,9085,9087,9090,9092,9094,9096,9098],{"class":203,"line":361},[201,9078,316],{"class":315},[201,9080,487],{"class":486},[201,9082,456],{"class":330},[201,9084,492],{"class":326},[201,9086,495],{"class":330},[201,9088,9089],{"class":326}," useLogger ",[201,9091,415],{"class":330},[201,9093,513],{"class":330},[201,9095,459],{"class":322},[201,9097,327],{"class":326},[201,9099,331],{"class":330},[201,9101,9102,9104,9106,9108,9110,9112],{"class":203,"line":372},[201,9103,524],{"class":337},[201,9105,341],{"class":330},[201,9107,390],{"class":330},[201,9109,393],{"class":210},[201,9111,347],{"class":330},[201,9113,358],{"class":330},[201,9115,9116,9119,9121],{"class":203,"line":382},[201,9117,9118],{"class":337},"  sampling",[201,9120,341],{"class":330},[201,9122,369],{"class":330},[201,9124,9125,9128,9130,9132,9134,9136,9138],{"class":203,"line":400},[201,9126,9127],{"class":337},"    rates",[201,9129,341],{"class":330},[201,9131,456],{"class":330},[201,9133,8560],{"class":337},[201,9135,341],{"class":330},[201,9137,6887],{"class":3249},[201,9139,1992],{"class":330},[201,9141,9142,9145,9147,9149,9151,9153,9155,9157,9159,9161,9163,9165,9167,9169,9171],{"class":203,"line":406},[201,9143,9144],{"class":337},"    keep",[201,9146,341],{"class":330},[201,9148,344],{"class":326},[201,9150,671],{"class":330},[201,9152,3244],{"class":337},[201,9154,341],{"class":330},[201,9156,8835],{"class":3249},[201,9158,8821],{"class":330},[201,9160,456],{"class":330},[201,9162,8813],{"class":337},[201,9164,341],{"class":330},[201,9166,8818],{"class":3249},[201,9168,462],{"class":330},[201,9170,355],{"class":326},[201,9172,358],{"class":330},[201,9174,9175],{"class":203,"line":412},[201,9176,409],{"class":330},[201,9178,9179,9181,9183,9185,9187,9189,9191],{"class":203,"line":930},[201,9180,4048],{"class":322},[201,9182,341],{"class":330},[201,9184,621],{"class":330},[201,9186,3994],{"class":624},[201,9188,632],{"class":330},[201,9190,635],{"class":486},[201,9192,369],{"class":330},[201,9194,9195,9197,9199,9201,9203,9205,9207,9209,9211,9213,9215,9217,9219,9221,9223,9225],{"class":203,"line":1266},[201,9196,3161],{"class":486},[201,9198,674],{"class":326},[201,9200,513],{"class":330},[201,9202,4080],{"class":326},[201,9204,663],{"class":330},[201,9206,2761],{"class":326},[201,9208,663],{"class":330},[201,9210,8974],{"class":326},[201,9212,2768],{"class":315},[201,9214,456],{"class":330},[201,9216,8981],{"class":337},[201,9218,8984],{"class":330},[201,9220,8987],{"class":207},[201,9222,462],{"class":330},[201,9224,8992],{"class":330},[201,9226,8995],{"class":207},[201,9228,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249],{"class":203,"line":1276},[201,9230,4065],{"class":315},[201,9232,621],{"class":337},[201,9234,8974],{"class":326},[201,9236,9010],{"class":330},[201,9238,9013],{"class":326},[201,9240,908],{"class":337},[201,9242,3994],{"class":326},[201,9244,663],{"class":330},[201,9246,4099],{"class":326},[201,9248,513],{"class":330},[201,9250,4104],{"class":721},[201,9252,9253],{"class":203,"line":1286},[201,9254,409],{"class":330},[201,9256,9257,9259],{"class":203,"line":1292},[201,9258,415],{"class":330},[201,9260,418],{"class":326},[178,9262,9263,9264,9267,9268,425,9270,425,9272,425,9274,9276,9277,663],{},"The callback receives a ",[198,9265,9266],{},"TailSamplingContext"," with ",[198,9269,3278],{},[198,9271,4074],{},[198,9273,6628],{},[198,9275,6625],{},", and the full accumulated ",[198,9278,2761],{},[259,9280,9282],{"id":9281},"log-draining","Log Draining",[178,9284,9285,9286,9289],{},"Send logs to external services like Axiom, Loki, or custom endpoints. The drain is called in ",[2410,9287,9288],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[187,9291,9292,9473],{},[190,9293,9296],{"className":305,"code":9294,"filename":9295,"language":308,"meta":196,"style":196},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    await fetch('https://api.axiom.co/v1/datasets/logs/ingest', {\n      method: 'POST',\n      headers: { Authorization: `Bearer ${process.env.AXIOM_TOKEN}` },\n      body: JSON.stringify([ctx.event]),\n    })\n  })\n})\n","server/plugins/evlog-drain.ts (Nuxt)",[198,9297,9298,9318,9352,9372,9387,9427,9455,9461,9467],{"__ignoreMap":196},[201,9299,9300,9302,9304,9306,9308,9310,9312,9314,9316],{"class":203,"line":204},[201,9301,316],{"class":315},[201,9303,319],{"class":315},[201,9305,8907],{"class":322},[201,9307,327],{"class":326},[201,9309,327],{"class":330},[201,9311,8914],{"class":624},[201,9313,632],{"class":330},[201,9315,635],{"class":486},[201,9317,369],{"class":330},[201,9319,9320,9322,9324,9326,9328,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350],{"class":203,"line":334},[201,9321,8925],{"class":326},[201,9323,663],{"class":330},[201,9325,8930],{"class":326},[201,9327,663],{"class":330},[201,9329,8935],{"class":322},[201,9331,327],{"class":337},[201,9333,347],{"class":330},[201,9335,1797],{"class":210},[201,9337,347],{"class":330},[201,9339,495],{"class":330},[201,9341,2725],{"class":486},[201,9343,621],{"class":330},[201,9345,3994],{"class":624},[201,9347,632],{"class":330},[201,9349,635],{"class":486},[201,9351,369],{"class":330},[201,9353,9354,9357,9359,9361,9363,9366,9368,9370],{"class":203,"line":361},[201,9355,9356],{"class":315},"    await",[201,9358,3143],{"class":322},[201,9360,327],{"class":337},[201,9362,347],{"class":330},[201,9364,9365],{"class":210},"https://api.axiom.co/v1/datasets/logs/ingest",[201,9367,347],{"class":330},[201,9369,495],{"class":330},[201,9371,369],{"class":330},[201,9373,9374,9377,9379,9381,9383,9385],{"class":203,"line":372},[201,9375,9376],{"class":337},"      method",[201,9378,341],{"class":330},[201,9380,390],{"class":330},[201,9382,6695],{"class":210},[201,9384,347],{"class":330},[201,9386,358],{"class":330},[201,9388,9389,9392,9394,9396,9399,9401,9404,9407,9410,9413,9415,9417,9419,9422,9425],{"class":203,"line":382},[201,9390,9391],{"class":337},"      headers",[201,9393,341],{"class":330},[201,9395,456],{"class":330},[201,9397,9398],{"class":337}," Authorization",[201,9400,341],{"class":330},[201,9402,9403],{"class":330}," `",[201,9405,9406],{"class":210},"Bearer ",[201,9408,9409],{"class":330},"${",[201,9411,9412],{"class":326},"process",[201,9414,663],{"class":330},[201,9416,1521],{"class":326},[201,9418,663],{"class":330},[201,9420,9421],{"class":326},"AXIOM_TOKEN",[201,9423,9424],{"class":330},"}`",[201,9426,1992],{"class":330},[201,9428,9429,9432,9434,9437,9439,9441,9444,9446,9448,9450,9453],{"class":203,"line":400},[201,9430,9431],{"class":337},"      body",[201,9433,341],{"class":330},[201,9435,9436],{"class":326}," JSON",[201,9438,663],{"class":330},[201,9440,1695],{"class":322},[201,9442,9443],{"class":337},"([",[201,9445,3994],{"class":326},[201,9447,663],{"class":330},[201,9449,2082],{"class":326},[201,9451,9452],{"class":337},"])",[201,9454,358],{"class":330},[201,9456,9457,9459],{"class":203,"line":406},[201,9458,1997],{"class":330},[201,9460,418],{"class":337},[201,9462,9463,9465],{"class":203,"line":412},[201,9464,5202],{"class":330},[201,9466,418],{"class":337},[201,9468,9469,9471],{"class":203,"line":930},[201,9470,415],{"class":330},[201,9472,418],{"class":326},[190,9474,9476],{"className":305,"code":9475,"filename":9050,"language":308,"meta":196,"style":196},"import { createEvlog } from 'evlog/next'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline({ batch: { size: 50 } })\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  drain: pipeline(createAxiomDrain({\n    dataset: 'logs',\n    token: process.env.AXIOM_TOKEN!,\n  })),\n})\n",[198,9477,9478,9496,9514,9532,9536,9568,9572,9596,9610,9626,9642,9662,9671],{"__ignoreMap":196},[201,9479,9480,9482,9484,9486,9488,9490,9492,9494],{"class":203,"line":204},[201,9481,453],{"class":315},[201,9483,456],{"class":330},[201,9485,459],{"class":326},[201,9487,462],{"class":330},[201,9489,465],{"class":315},[201,9491,390],{"class":330},[201,9493,470],{"class":210},[201,9495,473],{"class":330},[201,9497,9498,9500,9502,9504,9506,9508,9510,9512],{"class":203,"line":334},[201,9499,453],{"class":315},[201,9501,456],{"class":330},[201,9503,3821],{"class":326},[201,9505,462],{"class":330},[201,9507,465],{"class":315},[201,9509,390],{"class":330},[201,9511,3830],{"class":210},[201,9513,473],{"class":330},[201,9515,9516,9518,9520,9522,9524,9526,9528,9530],{"class":203,"line":361},[201,9517,453],{"class":315},[201,9519,456],{"class":330},[201,9521,6835],{"class":326},[201,9523,462],{"class":330},[201,9525,465],{"class":315},[201,9527,390],{"class":330},[201,9529,6844],{"class":210},[201,9531,473],{"class":330},[201,9533,9534],{"class":203,"line":372},[201,9535,479],{"emptyLinePlaceholder":478},[201,9537,9538,9540,9542,9544,9546,9548,9550,9552,9554,9556,9558,9560,9562,9564,9566],{"class":203,"line":382},[201,9539,3597],{"class":486},[201,9541,6857],{"class":326},[201,9543,611],{"class":330},[201,9545,6835],{"class":322},[201,9547,327],{"class":326},[201,9549,671],{"class":330},[201,9551,6875],{"class":337},[201,9553,341],{"class":330},[201,9555,456],{"class":330},[201,9557,6882],{"class":337},[201,9559,341],{"class":330},[201,9561,8417],{"class":3249},[201,9563,462],{"class":330},[201,9565,462],{"class":330},[201,9567,418],{"class":326},[201,9569,9570],{"class":203,"line":400},[201,9571,479],{"emptyLinePlaceholder":478},[201,9573,9574,9576,9578,9580,9582,9584,9586,9588,9590,9592,9594],{"class":203,"line":406},[201,9575,316],{"class":315},[201,9577,487],{"class":486},[201,9579,456],{"class":330},[201,9581,492],{"class":326},[201,9583,495],{"class":330},[201,9585,9089],{"class":326},[201,9587,415],{"class":330},[201,9589,513],{"class":330},[201,9591,459],{"class":322},[201,9593,327],{"class":326},[201,9595,331],{"class":330},[201,9597,9598,9600,9602,9604,9606,9608],{"class":203,"line":412},[201,9599,524],{"class":337},[201,9601,341],{"class":330},[201,9603,390],{"class":330},[201,9605,393],{"class":210},[201,9607,347],{"class":330},[201,9609,358],{"class":330},[201,9611,9612,9614,9616,9618,9620,9622,9624],{"class":203,"line":930},[201,9613,3974],{"class":337},[201,9615,341],{"class":330},[201,9617,6905],{"class":322},[201,9619,327],{"class":326},[201,9621,6910],{"class":322},[201,9623,327],{"class":326},[201,9625,331],{"class":330},[201,9627,9628,9631,9633,9635,9638,9640],{"class":203,"line":1266},[201,9629,9630],{"class":337},"    dataset",[201,9632,341],{"class":330},[201,9634,390],{"class":330},[201,9636,9637],{"class":210},"logs",[201,9639,347],{"class":330},[201,9641,358],{"class":330},[201,9643,9644,9647,9649,9651,9653,9655,9657,9659],{"class":203,"line":1276},[201,9645,9646],{"class":337},"    token",[201,9648,341],{"class":330},[201,9650,4030],{"class":326},[201,9652,663],{"class":330},[201,9654,1521],{"class":326},[201,9656,663],{"class":330},[201,9658,9421],{"class":326},[201,9660,9661],{"class":330},"!,\n",[201,9663,9664,9666,9669],{"class":203,"line":1286},[201,9665,5202],{"class":330},[201,9667,9668],{"class":326},"))",[201,9670,358],{"class":330},[201,9672,9673,9675],{"class":203,"line":1292},[201,9674,415],{"class":330},[201,9676,418],{"class":326},[178,9678,9679,9680,9682],{},"The hook receives a ",[198,9681,6866],{}," with:",[3399,9684,9685,9694,9705],{},[3402,9686,9687,9689,9690,9693],{},[198,9688,2082],{},": The complete ",[198,9691,9692],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[3402,9695,9696,9698,9699,425,9701,425,9703,632],{},[198,9697,625],{},": Optional request metadata (",[198,9700,6625],{},[198,9702,6628],{},[198,9704,1073],{},[3402,9706,9707,9710],{},[198,9708,9709],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[936,9712,9713,9716,9717,425,9720,425,9723,425,9726,425,9729,425,9732,9735],{"color":8740,"icon":49},[2410,9714,9715],{},"Security:"," Sensitive headers (",[198,9718,9719],{},"authorization",[198,9721,9722],{},"cookie",[198,9724,9725],{},"set-cookie",[198,9727,9728],{},"x-api-key",[198,9730,9731],{},"x-auth-token",[198,9733,9734],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[734,9737,9739],{"id":9738},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[178,9741,3803,9742,9744],{},[198,9743,9709],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[190,9746,9749],{"className":305,"code":9747,"filename":9748,"language":308,"meta":196,"style":196},"export default defineNitroPlugin((nitroApp) => {\n  const posthog = usePostHog()\n\n  nitroApp.hooks.hook('evlog:drain', (ctx) => {\n    if (!posthog) return\n\n    const sessionId = ctx.headers?.['x-posthog-session-id']\n    const distinctId = ctx.headers?.['x-posthog-distinct-id']\n\n    if (!distinctId) return\n\n    posthog.capture({\n      distinctId,\n      event: 'server_log',\n      properties: {\n        ...ctx.event,\n        $session_id: sessionId,\n      },\n    })\n  })\n})\n","server/plugins/evlog-posthog.ts",[198,9750,9751,9771,9785,9789,9821,9838,9842,9872,9900,9904,9919,9923,9937,9944,9960,9969,9982,9993,9997,10003,10009],{"__ignoreMap":196},[201,9752,9753,9755,9757,9759,9761,9763,9765,9767,9769],{"class":203,"line":204},[201,9754,316],{"class":315},[201,9756,319],{"class":315},[201,9758,8907],{"class":322},[201,9760,327],{"class":326},[201,9762,327],{"class":330},[201,9764,8914],{"class":624},[201,9766,632],{"class":330},[201,9768,635],{"class":486},[201,9770,369],{"class":330},[201,9772,9773,9775,9778,9780,9783],{"class":203,"line":334},[201,9774,642],{"class":486},[201,9776,9777],{"class":326}," posthog",[201,9779,513],{"class":330},[201,9781,9782],{"class":322}," usePostHog",[201,9784,829],{"class":337},[201,9786,9787],{"class":203,"line":361},[201,9788,479],{"emptyLinePlaceholder":478},[201,9790,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819],{"class":203,"line":372},[201,9792,8925],{"class":326},[201,9794,663],{"class":330},[201,9796,8930],{"class":326},[201,9798,663],{"class":330},[201,9800,8935],{"class":322},[201,9802,327],{"class":337},[201,9804,347],{"class":330},[201,9806,1797],{"class":210},[201,9808,347],{"class":330},[201,9810,495],{"class":330},[201,9812,621],{"class":330},[201,9814,3994],{"class":624},[201,9816,632],{"class":330},[201,9818,635],{"class":486},[201,9820,369],{"class":330},[201,9822,9823,9825,9827,9830,9833,9835],{"class":203,"line":382},[201,9824,4065],{"class":315},[201,9826,621],{"class":337},[201,9828,9829],{"class":330},"!",[201,9831,9832],{"class":326},"posthog",[201,9834,908],{"class":337},[201,9836,9837],{"class":315},"return\n",[201,9839,9840],{"class":203,"line":400},[201,9841,479],{"emptyLinePlaceholder":478},[201,9843,9844,9846,9849,9851,9853,9855,9857,9859,9862,9864,9867,9869],{"class":203,"line":406},[201,9845,3161],{"class":486},[201,9847,9848],{"class":326}," sessionId",[201,9850,513],{"class":330},[201,9852,4080],{"class":326},[201,9854,663],{"class":330},[201,9856,9709],{"class":326},[201,9858,9010],{"class":330},[201,9860,9861],{"class":337},"[",[201,9863,347],{"class":330},[201,9865,9866],{"class":210},"x-posthog-session-id",[201,9868,347],{"class":330},[201,9870,9871],{"class":337},"]\n",[201,9873,9874,9876,9879,9881,9883,9885,9887,9889,9891,9893,9896,9898],{"class":203,"line":412},[201,9875,3161],{"class":486},[201,9877,9878],{"class":326}," distinctId",[201,9880,513],{"class":330},[201,9882,4080],{"class":326},[201,9884,663],{"class":330},[201,9886,9709],{"class":326},[201,9888,9010],{"class":330},[201,9890,9861],{"class":337},[201,9892,347],{"class":330},[201,9894,9895],{"class":210},"x-posthog-distinct-id",[201,9897,347],{"class":330},[201,9899,9871],{"class":337},[201,9901,9902],{"class":203,"line":930},[201,9903,479],{"emptyLinePlaceholder":478},[201,9905,9906,9908,9910,9912,9915,9917],{"class":203,"line":1266},[201,9907,4065],{"class":315},[201,9909,621],{"class":337},[201,9911,9829],{"class":330},[201,9913,9914],{"class":326},"distinctId",[201,9916,908],{"class":337},[201,9918,9837],{"class":315},[201,9920,9921],{"class":203,"line":1276},[201,9922,479],{"emptyLinePlaceholder":478},[201,9924,9925,9928,9930,9933,9935],{"class":203,"line":1286},[201,9926,9927],{"class":326},"    posthog",[201,9929,663],{"class":330},[201,9931,9932],{"class":322},"capture",[201,9934,327],{"class":337},[201,9936,331],{"class":330},[201,9938,9939,9942],{"class":203,"line":1292},[201,9940,9941],{"class":326},"      distinctId",[201,9943,358],{"class":330},[201,9945,9946,9949,9951,9953,9956,9958],{"class":203,"line":2832},[201,9947,9948],{"class":337},"      event",[201,9950,341],{"class":330},[201,9952,390],{"class":330},[201,9954,9955],{"class":210},"server_log",[201,9957,347],{"class":330},[201,9959,358],{"class":330},[201,9961,9962,9965,9967],{"class":203,"line":2858},[201,9963,9964],{"class":337},"      properties",[201,9966,341],{"class":330},[201,9968,369],{"class":330},[201,9970,9971,9974,9976,9978,9980],{"class":203,"line":2864},[201,9972,9973],{"class":330},"        ...",[201,9975,3994],{"class":326},[201,9977,663],{"class":330},[201,9979,2082],{"class":326},[201,9981,358],{"class":330},[201,9983,9984,9987,9989,9991],{"class":203,"line":2869},[201,9985,9986],{"class":337},"        $session_id",[201,9988,341],{"class":330},[201,9990,9848],{"class":326},[201,9992,358],{"class":330},[201,9994,9995],{"class":203,"line":2874},[201,9996,2861],{"class":330},[201,9998,9999,10001],{"class":203,"line":3351},[201,10000,1997],{"class":330},[201,10002,418],{"class":337},[201,10004,10005,10007],{"class":203,"line":3360},[201,10006,5202],{"class":330},[201,10008,418],{"class":337},[201,10010,10011,10013],{"class":203,"line":3366},[201,10012,415],{"class":330},[201,10014,418],{"class":326},[259,10016,10018],{"id":10017},"event-enrichment","Event Enrichment",[178,10020,10021],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[187,10023,10024,10228],{},[190,10025,10028],{"className":305,"code":10026,"filename":10027,"language":308,"meta":196,"style":196},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog/enrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n    createRequestSizeEnricher(),\n    createTraceContextEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server/plugins/evlog-enrich.ts (Nuxt)",[198,10029,10030,10036,10043,10050,10057,10064,10076,10080,10100,10111,10120,10129,10138,10147,10152,10156,10188,10216,10222],{"__ignoreMap":196},[201,10031,10032,10034],{"class":203,"line":204},[201,10033,453],{"class":315},[201,10035,369],{"class":330},[201,10037,10038,10041],{"class":203,"line":334},[201,10039,10040],{"class":326},"  createUserAgentEnricher",[201,10042,358],{"class":330},[201,10044,10045,10048],{"class":203,"line":361},[201,10046,10047],{"class":326},"  createGeoEnricher",[201,10049,358],{"class":330},[201,10051,10052,10055],{"class":203,"line":372},[201,10053,10054],{"class":326},"  createRequestSizeEnricher",[201,10056,358],{"class":330},[201,10058,10059,10062],{"class":203,"line":382},[201,10060,10061],{"class":326},"  createTraceContextEnricher",[201,10063,358],{"class":330},[201,10065,10066,10068,10070,10072,10074],{"class":203,"line":400},[201,10067,415],{"class":330},[201,10069,465],{"class":315},[201,10071,390],{"class":330},[201,10073,3850],{"class":210},[201,10075,473],{"class":330},[201,10077,10078],{"class":203,"line":406},[201,10079,479],{"emptyLinePlaceholder":478},[201,10081,10082,10084,10086,10088,10090,10092,10094,10096,10098],{"class":203,"line":412},[201,10083,316],{"class":315},[201,10085,319],{"class":315},[201,10087,8907],{"class":322},[201,10089,327],{"class":326},[201,10091,327],{"class":330},[201,10093,8914],{"class":624},[201,10095,632],{"class":330},[201,10097,635],{"class":486},[201,10099,369],{"class":330},[201,10101,10102,10104,10107,10109],{"class":203,"line":930},[201,10103,642],{"class":486},[201,10105,10106],{"class":326}," enrichers",[201,10108,513],{"class":330},[201,10110,1960],{"class":337},[201,10112,10113,10116,10118],{"class":203,"line":1266},[201,10114,10115],{"class":322},"    createUserAgentEnricher",[201,10117,1350],{"class":337},[201,10119,358],{"class":330},[201,10121,10122,10125,10127],{"class":203,"line":1276},[201,10123,10124],{"class":322},"    createGeoEnricher",[201,10126,1350],{"class":337},[201,10128,358],{"class":330},[201,10130,10131,10134,10136],{"class":203,"line":1286},[201,10132,10133],{"class":322},"    createRequestSizeEnricher",[201,10135,1350],{"class":337},[201,10137,358],{"class":330},[201,10139,10140,10143,10145],{"class":203,"line":1292},[201,10141,10142],{"class":322},"    createTraceContextEnricher",[201,10144,1350],{"class":337},[201,10146,358],{"class":330},[201,10148,10149],{"class":203,"line":2832},[201,10150,10151],{"class":337},"  ]\n",[201,10153,10154],{"class":203,"line":2858},[201,10155,479],{"emptyLinePlaceholder":478},[201,10157,10158,10160,10162,10164,10166,10168,10170,10172,10174,10176,10178,10180,10182,10184,10186],{"class":203,"line":2864},[201,10159,8925],{"class":326},[201,10161,663],{"class":330},[201,10163,8930],{"class":326},[201,10165,663],{"class":330},[201,10167,8935],{"class":322},[201,10169,327],{"class":337},[201,10171,347],{"class":330},[201,10173,1813],{"class":210},[201,10175,347],{"class":330},[201,10177,495],{"class":330},[201,10179,621],{"class":330},[201,10181,3994],{"class":624},[201,10183,632],{"class":330},[201,10185,635],{"class":486},[201,10187,369],{"class":330},[201,10189,10190,10193,10195,10197,10200,10203,10205,10207,10210,10212,10214],{"class":203,"line":2869},[201,10191,10192],{"class":315},"    for",[201,10194,621],{"class":337},[201,10196,3597],{"class":486},[201,10198,10199],{"class":326}," enricher",[201,10201,10202],{"class":330}," of",[201,10204,10106],{"class":326},[201,10206,908],{"class":337},[201,10208,10209],{"class":322},"enricher",[201,10211,327],{"class":337},[201,10213,3994],{"class":326},[201,10215,418],{"class":337},[201,10217,10218,10220],{"class":203,"line":2874},[201,10219,5202],{"class":330},[201,10221,418],{"class":337},[201,10223,10224,10226],{"class":203,"line":3351},[201,10225,415],{"class":330},[201,10227,418],{"class":326},[190,10229,10231],{"className":305,"code":10230,"filename":9050,"language":308,"meta":196,"style":196},"import { createEvlog } from 'evlog/next'\nimport { createUserAgentEnricher, createGeoEnricher } from 'evlog/enrichers'\n\nconst enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  enrich: (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n    ctx.event.deploymentId = process.env.VERCEL_DEPLOYMENT_ID\n  },\n})\n",[198,10232,10233,10251,10274,10278,10301,10305,10329,10343,10359,10383,10409,10413],{"__ignoreMap":196},[201,10234,10235,10237,10239,10241,10243,10245,10247,10249],{"class":203,"line":204},[201,10236,453],{"class":315},[201,10238,456],{"class":330},[201,10240,459],{"class":326},[201,10242,462],{"class":330},[201,10244,465],{"class":315},[201,10246,390],{"class":330},[201,10248,470],{"class":210},[201,10250,473],{"class":330},[201,10252,10253,10255,10257,10259,10261,10264,10266,10268,10270,10272],{"class":203,"line":334},[201,10254,453],{"class":315},[201,10256,456],{"class":330},[201,10258,3841],{"class":326},[201,10260,495],{"class":330},[201,10262,10263],{"class":326}," createGeoEnricher",[201,10265,462],{"class":330},[201,10267,465],{"class":315},[201,10269,390],{"class":330},[201,10271,3850],{"class":210},[201,10273,473],{"class":330},[201,10275,10276],{"class":203,"line":361},[201,10277,479],{"emptyLinePlaceholder":478},[201,10279,10280,10282,10285,10287,10289,10292,10294,10296,10298],{"class":203,"line":372},[201,10281,3597],{"class":486},[201,10283,10284],{"class":326}," enrichers ",[201,10286,611],{"class":330},[201,10288,344],{"class":326},[201,10290,10291],{"class":322},"createUserAgentEnricher",[201,10293,1350],{"class":326},[201,10295,495],{"class":330},[201,10297,10263],{"class":322},[201,10299,10300],{"class":326},"()]\n",[201,10302,10303],{"class":203,"line":382},[201,10304,479],{"emptyLinePlaceholder":478},[201,10306,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325,10327],{"class":203,"line":400},[201,10308,316],{"class":315},[201,10310,487],{"class":486},[201,10312,456],{"class":330},[201,10314,492],{"class":326},[201,10316,495],{"class":330},[201,10318,9089],{"class":326},[201,10320,415],{"class":330},[201,10322,513],{"class":330},[201,10324,459],{"class":322},[201,10326,327],{"class":326},[201,10328,331],{"class":330},[201,10330,10331,10333,10335,10337,10339,10341],{"class":203,"line":406},[201,10332,524],{"class":337},[201,10334,341],{"class":330},[201,10336,390],{"class":330},[201,10338,393],{"class":210},[201,10340,347],{"class":330},[201,10342,358],{"class":330},[201,10344,10345,10347,10349,10351,10353,10355,10357],{"class":203,"line":412},[201,10346,3987],{"class":322},[201,10348,341],{"class":330},[201,10350,621],{"class":330},[201,10352,3994],{"class":624},[201,10354,632],{"class":330},[201,10356,635],{"class":486},[201,10358,369],{"class":330},[201,10360,10361,10363,10365,10367,10369,10371,10373,10375,10377,10379,10381],{"class":203,"line":930},[201,10362,10192],{"class":315},[201,10364,621],{"class":337},[201,10366,3597],{"class":486},[201,10368,10199],{"class":326},[201,10370,10202],{"class":330},[201,10372,10106],{"class":326},[201,10374,908],{"class":337},[201,10376,10209],{"class":322},[201,10378,327],{"class":337},[201,10380,3994],{"class":326},[201,10382,418],{"class":337},[201,10384,10385,10387,10389,10391,10393,10396,10398,10400,10402,10404,10406],{"class":203,"line":1266},[201,10386,4016],{"class":326},[201,10388,663],{"class":330},[201,10390,2082],{"class":326},[201,10392,663],{"class":330},[201,10394,10395],{"class":326},"deploymentId",[201,10397,513],{"class":330},[201,10399,4030],{"class":326},[201,10401,663],{"class":330},[201,10403,1521],{"class":326},[201,10405,663],{"class":330},[201,10407,10408],{"class":326},"VERCEL_DEPLOYMENT_ID\n",[201,10410,10411],{"class":203,"line":1276},[201,10412,409],{"class":330},[201,10414,10415,10417],{"class":203,"line":1286},[201,10416,415],{"class":330},[201,10418,418],{"class":326},[1433,10420,10421,10433],{},[1436,10422,10423],{},[1439,10424,10425,10428,10431],{},[1442,10426,10427],{},"Enricher",[1442,10429,10430],{},"Event Field",[1442,10432,1453],{},[1455,10434,10435,10450,10465,10480],{},[1439,10436,10437,10442,10447],{},[1460,10438,10439],{},[198,10440,10441],{},"createUserAgentEnricher()",[1460,10443,10444],{},[198,10445,10446],{},"userAgent",[1460,10448,10449],{},"Browser, OS, device type from User-Agent header",[1439,10451,10452,10457,10462],{},[1460,10453,10454],{},[198,10455,10456],{},"createGeoEnricher()",[1460,10458,10459],{},[198,10460,10461],{},"geo",[1460,10463,10464],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[1439,10466,10467,10472,10477],{},[1460,10468,10469],{},[198,10470,10471],{},"createRequestSizeEnricher()",[1460,10473,10474],{},[198,10475,10476],{},"requestSize",[1460,10478,10479],{},"Request/response payload sizes from Content-Length",[1439,10481,10482,10487,10492],{},[1460,10483,10484],{},[198,10485,10486],{},"createTraceContextEnricher()",[1460,10488,10489],{},[198,10490,10491],{},"traceContext",[1460,10493,10494],{},"W3C trace context (traceId, spanId) from traceparent header",[178,10496,10497],{},"You can also write custom enrichers to add any derived context:",[190,10499,10502],{"className":305,"code":10500,"filename":10501,"language":308,"meta":196,"style":196},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    ctx.event.deploymentId = process.env.DEPLOYMENT_ID\n  })\n})\n","server/plugins/evlog-enrich.ts",[198,10503,10504,10524,10556,10581,10587],{"__ignoreMap":196},[201,10505,10506,10508,10510,10512,10514,10516,10518,10520,10522],{"class":203,"line":204},[201,10507,316],{"class":315},[201,10509,319],{"class":315},[201,10511,8907],{"class":322},[201,10513,327],{"class":326},[201,10515,327],{"class":330},[201,10517,8914],{"class":624},[201,10519,632],{"class":330},[201,10521,635],{"class":486},[201,10523,369],{"class":330},[201,10525,10526,10528,10530,10532,10534,10536,10538,10540,10542,10544,10546,10548,10550,10552,10554],{"class":203,"line":334},[201,10527,8925],{"class":326},[201,10529,663],{"class":330},[201,10531,8930],{"class":326},[201,10533,663],{"class":330},[201,10535,8935],{"class":322},[201,10537,327],{"class":337},[201,10539,347],{"class":330},[201,10541,1813],{"class":210},[201,10543,347],{"class":330},[201,10545,495],{"class":330},[201,10547,621],{"class":330},[201,10549,3994],{"class":624},[201,10551,632],{"class":330},[201,10553,635],{"class":486},[201,10555,369],{"class":330},[201,10557,10558,10560,10562,10564,10566,10568,10570,10572,10574,10576,10578],{"class":203,"line":361},[201,10559,4016],{"class":326},[201,10561,663],{"class":330},[201,10563,2082],{"class":326},[201,10565,663],{"class":330},[201,10567,10395],{"class":326},[201,10569,513],{"class":330},[201,10571,4030],{"class":326},[201,10573,663],{"class":330},[201,10575,1521],{"class":326},[201,10577,663],{"class":330},[201,10579,10580],{"class":326},"DEPLOYMENT_ID\n",[201,10582,10583,10585],{"class":203,"line":372},[201,10584,5202],{"class":330},[201,10586,418],{"class":337},[201,10588,10589,10591],{"class":203,"line":382},[201,10590,415],{"class":330},[201,10592,418],{"class":326},[178,10594,4127,10595,10598],{},[289,10596,10597],{"href":111},"Enrichers guide"," for full documentation.",[182,10600,7383],{"id":10601},"client-transport",[178,10603,10604,10605,425,10608,10611],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[198,10606,10607],{},"log.info()",[198,10609,10610],{},"log.error()",", etc. calls are automatically sent to the server.",[187,10613,10614,10711],{},[190,10615,10618],{"className":305,"code":10616,"filename":10617,"language":308,"meta":196,"style":196},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    transport: {\n      enabled: true,\n      endpoint: '/api/_evlog/ingest',  // default\n    },\n  },\n})\n","nuxt.config.ts (Nuxt)",[198,10619,10620,10632,10650,10658,10667,10678,10697,10701,10705],{"__ignoreMap":196},[201,10621,10622,10624,10626,10628,10630],{"class":203,"line":204},[201,10623,316],{"class":315},[201,10625,319],{"class":315},[201,10627,323],{"class":322},[201,10629,327],{"class":326},[201,10631,331],{"class":330},[201,10633,10634,10636,10638,10640,10642,10644,10646,10648],{"class":203,"line":334},[201,10635,338],{"class":337},[201,10637,341],{"class":330},[201,10639,344],{"class":326},[201,10641,347],{"class":330},[201,10643,350],{"class":210},[201,10645,347],{"class":330},[201,10647,355],{"class":326},[201,10649,358],{"class":330},[201,10651,10652,10654,10656],{"class":203,"line":361},[201,10653,364],{"class":337},[201,10655,341],{"class":330},[201,10657,369],{"class":330},[201,10659,10660,10663,10665],{"class":203,"line":372},[201,10661,10662],{"class":337},"    transport",[201,10664,341],{"class":330},[201,10666,369],{"class":330},[201,10668,10669,10672,10674,10676],{"class":203,"line":382},[201,10670,10671],{"class":337},"      enabled",[201,10673,341],{"class":330},[201,10675,722],{"class":721},[201,10677,358],{"class":330},[201,10679,10680,10683,10685,10687,10690,10692,10694],{"class":203,"line":400},[201,10681,10682],{"class":337},"      endpoint",[201,10684,341],{"class":330},[201,10686,390],{"class":330},[201,10688,10689],{"class":210},"/api/_evlog/ingest",[201,10691,347],{"class":330},[201,10693,495],{"class":330},[201,10695,10696],{"class":654},"  // default\n",[201,10698,10699],{"class":203,"line":406},[201,10700,403],{"class":330},[201,10702,10703],{"class":203,"line":412},[201,10704,409],{"class":330},[201,10706,10707,10709],{"class":203,"line":930},[201,10708,415],{"class":330},[201,10710,418],{"class":326},[190,10712,10714],{"className":1100,"code":1101,"filename":10713,"language":1103,"meta":196,"style":196},"app/layout.tsx (Next.js)",[198,10715,10716,10734,10738,10770,10776,10794,10802,10830,10838,10846,10854,10862,10866],{"__ignoreMap":196},[201,10717,10718,10720,10722,10724,10726,10728,10730,10732],{"class":203,"line":204},[201,10719,453],{"class":315},[201,10721,456],{"class":330},[201,10723,1114],{"class":326},[201,10725,462],{"class":330},[201,10727,465],{"class":315},[201,10729,390],{"class":330},[201,10731,1123],{"class":210},[201,10733,473],{"class":330},[201,10735,10736],{"class":203,"line":334},[201,10737,479],{"emptyLinePlaceholder":478},[201,10739,10740,10742,10744,10746,10748,10750,10752,10754,10756,10758,10760,10762,10764,10766,10768],{"class":203,"line":361},[201,10741,316],{"class":315},[201,10743,319],{"class":315},[201,10745,1138],{"class":486},[201,10747,1141],{"class":322},[201,10749,1144],{"class":330},[201,10751,1147],{"class":624},[201,10753,1150],{"class":330},[201,10755,456],{"class":330},[201,10757,1147],{"class":337},[201,10759,341],{"class":330},[201,10761,1159],{"class":207},[201,10763,663],{"class":330},[201,10765,1164],{"class":207},[201,10767,1167],{"class":330},[201,10769,369],{"class":330},[201,10771,10772,10774],{"class":203,"line":372},[201,10773,701],{"class":315},[201,10775,1176],{"class":337},[201,10777,10778,10780,10782,10784,10786,10788,10790,10792],{"class":203,"line":382},[201,10779,1181],{"class":330},[201,10781,1184],{"class":337},[201,10783,1187],{"class":486},[201,10785,611],{"class":330},[201,10787,1192],{"class":330},[201,10789,1195],{"class":210},[201,10791,1192],{"class":330},[201,10793,1200],{"class":330},[201,10795,10796,10798,10800],{"class":203,"line":400},[201,10797,1205],{"class":330},[201,10799,1208],{"class":337},[201,10801,1200],{"class":330},[201,10803,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822,10824,10826,10828],{"class":203,"line":406},[201,10805,1215],{"class":330},[201,10807,1097],{"class":207},[201,10809,1220],{"class":486},[201,10811,611],{"class":330},[201,10813,1192],{"class":330},[201,10815,393],{"class":210},[201,10817,1192],{"class":330},[201,10819,1231],{"class":486},[201,10821,1234],{"class":330},[201,10823,1237],{"class":337},[201,10825,341],{"class":330},[201,10827,722],{"class":721},[201,10829,1244],{"class":330},[201,10831,10832,10834,10836],{"class":203,"line":412},[201,10833,1249],{"class":330},[201,10835,1252],{"class":326},[201,10837,1064],{"class":330},[201,10839,10840,10842,10844],{"class":203,"line":930},[201,10841,1259],{"class":330},[201,10843,1097],{"class":207},[201,10845,1200],{"class":330},[201,10847,10848,10850,10852],{"class":203,"line":1266},[201,10849,1269],{"class":330},[201,10851,1208],{"class":337},[201,10853,1200],{"class":330},[201,10855,10856,10858,10860],{"class":203,"line":1276},[201,10857,1279],{"class":330},[201,10859,1184],{"class":337},[201,10861,1200],{"class":330},[201,10863,10864],{"class":203,"line":1286},[201,10865,1289],{"class":337},[201,10867,10868],{"class":203,"line":1292},[201,10869,1064],{"class":330},[734,10871,10873],{"id":10872},"how-it-works","How it works",[10875,10876,10877,10883,10889,10892,10900],"ol",{},[3402,10878,10879,10880],{},"Client calls ",[198,10881,10882],{},"log.info({ action: 'click', button: 'submit' })",[3402,10884,10885,10886,10888],{},"Log is sent to ",[198,10887,10689],{}," via POST",[3402,10890,10891],{},"Server enriches with environment context (service, version, region, etc.)",[3402,10893,10894,10896,10897],{},[198,10895,1797],{}," hook is called with ",[198,10898,10899],{},"source: 'client'",[3402,10901,10902],{},"External services receive the log (Axiom, Loki, etc.)",[936,10904,10905,10906,425,10908,10911,10912,10915],{"color":938,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[198,10907,1464],{},[198,10909,10910],{},"environment",", or ",[198,10913,10914],{},"version"," from the client.",[178,10917,10918,10919,10921],{},"In your drain hook, you can identify client logs by the ",[198,10920,10899],{}," field:",[190,10923,10926],{"className":305,"code":10924,"filename":10925,"language":308,"meta":196,"style":196},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    if (ctx.event.source === 'client') {\n      console.log('[CLIENT]', ctx.event)\n    }\n  })\n})\n","server/plugins/evlog-drain.ts",[198,10927,10928,10948,10982,11012,11040,11044,11050],{"__ignoreMap":196},[201,10929,10930,10932,10934,10936,10938,10940,10942,10944,10946],{"class":203,"line":204},[201,10931,316],{"class":315},[201,10933,319],{"class":315},[201,10935,8907],{"class":322},[201,10937,327],{"class":326},[201,10939,327],{"class":330},[201,10941,8914],{"class":624},[201,10943,632],{"class":330},[201,10945,635],{"class":486},[201,10947,369],{"class":330},[201,10949,10950,10952,10954,10956,10958,10960,10962,10964,10966,10968,10970,10972,10974,10976,10978,10980],{"class":203,"line":334},[201,10951,8925],{"class":326},[201,10953,663],{"class":330},[201,10955,8930],{"class":326},[201,10957,663],{"class":330},[201,10959,8935],{"class":322},[201,10961,327],{"class":337},[201,10963,347],{"class":330},[201,10965,1797],{"class":210},[201,10967,347],{"class":330},[201,10969,495],{"class":330},[201,10971,2725],{"class":486},[201,10973,621],{"class":330},[201,10975,3994],{"class":624},[201,10977,632],{"class":330},[201,10979,635],{"class":486},[201,10981,369],{"class":330},[201,10983,10984,10986,10988,10990,10992,10994,10996,10998,11001,11003,11006,11008,11010],{"class":203,"line":361},[201,10985,4065],{"class":315},[201,10987,621],{"class":337},[201,10989,3994],{"class":326},[201,10991,663],{"class":330},[201,10993,2082],{"class":326},[201,10995,663],{"class":330},[201,10997,6560],{"class":326},[201,10999,11000],{"class":330}," ===",[201,11002,390],{"class":330},[201,11004,11005],{"class":210},"client",[201,11007,347],{"class":330},[201,11009,908],{"class":337},[201,11011,331],{"class":330},[201,11013,11014,11017,11019,11021,11023,11025,11028,11030,11032,11034,11036,11038],{"class":203,"line":372},[201,11015,11016],{"class":326},"      console",[201,11018,663],{"class":330},[201,11020,1300],{"class":322},[201,11022,327],{"class":337},[201,11024,347],{"class":330},[201,11026,11027],{"class":210},"[CLIENT]",[201,11029,347],{"class":330},[201,11031,495],{"class":330},[201,11033,4080],{"class":326},[201,11035,663],{"class":330},[201,11037,2082],{"class":326},[201,11039,418],{"class":337},[201,11041,11042],{"class":203,"line":382},[201,11043,3363],{"class":330},[201,11045,11046,11048],{"class":203,"line":400},[201,11047,5202],{"class":330},[201,11049,418],{"class":337},[201,11051,11052,11054],{"class":203,"line":406},[201,11053,415],{"class":330},[201,11055,418],{"class":326},[259,11057,11059],{"id":11058},"client-identity","Client Identity",[178,11061,11062,11063,11066],{},"Attach user identity to all client logs with ",[198,11064,11065],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[187,11068,11069,11170],{},[190,11070,11073],{"className":305,"code":11071,"filename":11072,"language":308,"meta":196,"style":196},"// After login\nsetIdentity({ userId: 'usr_123', orgId: 'org_456' })\n\nlog.info({ action: 'checkout' })\n// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n\n// After logout\nclearIdentity()\n","Nuxt (auto-imported)",[198,11074,11075,11080,11119,11123,11149,11154,11158,11163],{"__ignoreMap":196},[201,11076,11077],{"class":203,"line":204},[201,11078,11079],{"class":654},"// After login\n",[201,11081,11082,11085,11087,11089,11092,11094,11096,11099,11101,11103,11106,11108,11110,11113,11115,11117],{"class":203,"line":334},[201,11083,11084],{"class":322},"setIdentity",[201,11086,327],{"class":326},[201,11088,671],{"class":330},[201,11090,11091],{"class":337}," userId",[201,11093,341],{"class":330},[201,11095,390],{"class":330},[201,11097,11098],{"class":210},"usr_123",[201,11100,347],{"class":330},[201,11102,495],{"class":330},[201,11104,11105],{"class":337}," orgId",[201,11107,341],{"class":330},[201,11109,390],{"class":330},[201,11111,11112],{"class":210},"org_456",[201,11114,347],{"class":330},[201,11116,462],{"class":330},[201,11118,418],{"class":326},[201,11120,11121],{"class":203,"line":361},[201,11122,479],{"emptyLinePlaceholder":478},[201,11124,11125,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147],{"class":203,"line":372},[201,11126,1300],{"class":326},[201,11128,663],{"class":330},[201,11130,938],{"class":322},[201,11132,327],{"class":326},[201,11134,671],{"class":330},[201,11136,844],{"class":337},[201,11138,341],{"class":330},[201,11140,390],{"class":330},[201,11142,851],{"class":210},[201,11144,347],{"class":330},[201,11146,462],{"class":330},[201,11148,418],{"class":326},[201,11150,11151],{"class":203,"line":382},[201,11152,11153],{"class":654},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[201,11155,11156],{"class":203,"line":400},[201,11157,479],{"emptyLinePlaceholder":478},[201,11159,11160],{"class":203,"line":406},[201,11161,11162],{"class":654},"// After logout\n",[201,11164,11165,11168],{"class":203,"line":412},[201,11166,11167],{"class":322},"clearIdentity",[201,11169,829],{"class":326},[190,11171,11173],{"className":305,"code":11172,"filename":142,"language":308,"meta":196,"style":196},"import { setIdentity, clearIdentity, log } from 'evlog/next/client'\n\n// After login\nsetIdentity({ userId: 'usr_123', orgId: 'org_456' })\n\nlog.info({ action: 'checkout' })\n// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n\n// After logout\nclearIdentity()\n",[198,11174,11175,11203,11207,11211,11245,11249,11275,11279,11283,11287],{"__ignoreMap":196},[201,11176,11177,11179,11181,11184,11186,11189,11191,11193,11195,11197,11199,11201],{"class":203,"line":204},[201,11178,453],{"class":315},[201,11180,456],{"class":330},[201,11182,11183],{"class":326}," setIdentity",[201,11185,495],{"class":330},[201,11187,11188],{"class":326}," clearIdentity",[201,11190,495],{"class":330},[201,11192,503],{"class":326},[201,11194,462],{"class":330},[201,11196,465],{"class":315},[201,11198,390],{"class":330},[201,11200,1123],{"class":210},[201,11202,473],{"class":330},[201,11204,11205],{"class":203,"line":334},[201,11206,479],{"emptyLinePlaceholder":478},[201,11208,11209],{"class":203,"line":361},[201,11210,11079],{"class":654},[201,11212,11213,11215,11217,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237,11239,11241,11243],{"class":203,"line":372},[201,11214,11084],{"class":322},[201,11216,327],{"class":326},[201,11218,671],{"class":330},[201,11220,11091],{"class":337},[201,11222,341],{"class":330},[201,11224,390],{"class":330},[201,11226,11098],{"class":210},[201,11228,347],{"class":330},[201,11230,495],{"class":330},[201,11232,11105],{"class":337},[201,11234,341],{"class":330},[201,11236,390],{"class":330},[201,11238,11112],{"class":210},[201,11240,347],{"class":330},[201,11242,462],{"class":330},[201,11244,418],{"class":326},[201,11246,11247],{"class":203,"line":382},[201,11248,479],{"emptyLinePlaceholder":478},[201,11250,11251,11253,11255,11257,11259,11261,11263,11265,11267,11269,11271,11273],{"class":203,"line":400},[201,11252,1300],{"class":326},[201,11254,663],{"class":330},[201,11256,938],{"class":322},[201,11258,327],{"class":326},[201,11260,671],{"class":330},[201,11262,844],{"class":337},[201,11264,341],{"class":330},[201,11266,390],{"class":330},[201,11268,851],{"class":210},[201,11270,347],{"class":330},[201,11272,462],{"class":330},[201,11274,418],{"class":326},[201,11276,11277],{"class":203,"line":406},[201,11278,11153],{"class":654},[201,11280,11281],{"class":203,"line":412},[201,11282,479],{"emptyLinePlaceholder":478},[201,11284,11285],{"class":203,"line":930},[201,11286,11162],{"class":654},[201,11288,11289,11291],{"class":203,"line":1266},[201,11290,11167],{"class":322},[201,11292,829],{"class":326},[178,11294,11295,11296,949,11298,11300,11301,663],{},"In Nuxt, ",[198,11297,11084],{},[198,11299,11167],{}," are auto-imported. In Next.js, import them from ",[198,11302,1123],{},[178,11304,11305],{},"Per-event fields override identity fields, so you can always pass explicit values:",[190,11307,11309],{"className":305,"code":11308,"language":308,"meta":196,"style":196},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[198,11310,11311,11333,11360],{"__ignoreMap":196},[201,11312,11313,11315,11317,11319,11321,11323,11325,11327,11329,11331],{"class":203,"line":204},[201,11314,11084],{"class":322},[201,11316,327],{"class":326},[201,11318,671],{"class":330},[201,11320,11091],{"class":337},[201,11322,341],{"class":330},[201,11324,390],{"class":330},[201,11326,11098],{"class":210},[201,11328,347],{"class":330},[201,11330,462],{"class":330},[201,11332,418],{"class":326},[201,11334,11335,11337,11339,11341,11343,11345,11347,11349,11351,11354,11356,11358],{"class":203,"line":334},[201,11336,1300],{"class":326},[201,11338,663],{"class":330},[201,11340,938],{"class":322},[201,11342,327],{"class":326},[201,11344,671],{"class":330},[201,11346,11091],{"class":337},[201,11348,341],{"class":330},[201,11350,390],{"class":330},[201,11352,11353],{"class":210},"usr_admin_override",[201,11355,347],{"class":330},[201,11357,462],{"class":330},[201,11359,418],{"class":326},[201,11361,11362],{"class":203,"line":361},[201,11363,11364],{"class":654},"// -> { userId: 'usr_admin_override', ... }\n",[734,11366,11368],{"id":11367},"syncing-identity-with-auth","Syncing identity with auth",[178,11370,11371],{},"Use a global route middleware to automatically sync identity with your auth state:",[190,11373,11376],{"className":305,"code":11374,"filename":11375,"language":308,"meta":196,"style":196},"export default defineNuxtRouteMiddleware(() => {\n  const { user } = useAuth() // better-auth, supabase, clerk, etc.\n\n  if (user.value) {\n    setIdentity({ userId: user.value.id, email: user.value.email })\n  } else {\n    clearIdentity()\n  }\n})\n","middleware/identity.global.ts",[198,11377,11378,11395,11415,11419,11437,11482,11491,11498,11503],{"__ignoreMap":196},[201,11379,11380,11382,11384,11387,11389,11391,11393],{"class":203,"line":204},[201,11381,316],{"class":315},[201,11383,319],{"class":315},[201,11385,11386],{"class":322}," defineNuxtRouteMiddleware",[201,11388,327],{"class":326},[201,11390,1350],{"class":330},[201,11392,635],{"class":486},[201,11394,369],{"class":330},[201,11396,11397,11399,11401,11403,11405,11407,11410,11412],{"class":203,"line":334},[201,11398,642],{"class":486},[201,11400,456],{"class":330},[201,11402,674],{"class":326},[201,11404,462],{"class":330},[201,11406,513],{"class":330},[201,11408,11409],{"class":322}," useAuth",[201,11411,6613],{"class":337},[201,11413,11414],{"class":654},"// better-auth, supabase, clerk, etc.\n",[201,11416,11417],{"class":203,"line":361},[201,11418,479],{"emptyLinePlaceholder":478},[201,11420,11421,11424,11426,11428,11430,11433,11435],{"class":203,"line":372},[201,11422,11423],{"class":315},"  if",[201,11425,621],{"class":337},[201,11427,8974],{"class":326},[201,11429,663],{"class":330},[201,11431,11432],{"class":326},"value",[201,11434,908],{"class":337},[201,11436,331],{"class":330},[201,11438,11439,11442,11444,11446,11448,11450,11452,11454,11456,11458,11460,11462,11465,11467,11469,11471,11473,11475,11478,11480],{"class":203,"line":382},[201,11440,11441],{"class":322},"    setIdentity",[201,11443,327],{"class":337},[201,11445,671],{"class":330},[201,11447,11091],{"class":337},[201,11449,341],{"class":330},[201,11451,674],{"class":326},[201,11453,663],{"class":330},[201,11455,11432],{"class":326},[201,11457,663],{"class":330},[201,11459,6351],{"class":326},[201,11461,495],{"class":330},[201,11463,11464],{"class":337}," email",[201,11466,341],{"class":330},[201,11468,674],{"class":326},[201,11470,663],{"class":330},[201,11472,11432],{"class":326},[201,11474,663],{"class":330},[201,11476,11477],{"class":326},"email",[201,11479,462],{"class":330},[201,11481,418],{"class":337},[201,11483,11484,11486,11489],{"class":203,"line":400},[201,11485,5202],{"class":330},[201,11487,11488],{"class":315}," else",[201,11490,369],{"class":330},[201,11492,11493,11496],{"class":203,"line":406},[201,11494,11495],{"class":322},"    clearIdentity",[201,11497,829],{"class":337},[201,11499,11500],{"class":203,"line":412},[201,11501,11502],{"class":330},"  }\n",[201,11504,11505,11507],{"class":203,"line":930},[201,11506,415],{"class":330},[201,11508,418],{"class":326},[936,11510,11512,11522],{"color":938,"icon":11511},"i-lucide-lightbulb",[178,11513,11514,11517,11518,11521],{},[2410,11515,11516],{},"Tip:"," Use Nuxt's ",[198,11519,11520],{},"$production"," override to sample and suppress browser console output in production while keeping full visibility in development:",[190,11523,11525],{"className":305,"code":11524,"filename":307,"language":308,"meta":196,"style":196},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      console: false, // Suppress browser DevTools console, keep transport\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[198,11526,11527,11539,11557,11565,11585,11589,11598,11606,11619,11627,11660,11693,11697,11701,11705],{"__ignoreMap":196},[201,11528,11529,11531,11533,11535,11537],{"class":203,"line":204},[201,11530,316],{"class":315},[201,11532,319],{"class":315},[201,11534,323],{"class":322},[201,11536,327],{"class":326},[201,11538,331],{"class":330},[201,11540,11541,11543,11545,11547,11549,11551,11553,11555],{"class":203,"line":334},[201,11542,338],{"class":337},[201,11544,341],{"class":330},[201,11546,344],{"class":326},[201,11548,347],{"class":330},[201,11550,350],{"class":210},[201,11552,347],{"class":330},[201,11554,355],{"class":326},[201,11556,358],{"class":330},[201,11558,11559,11561,11563],{"class":203,"line":361},[201,11560,364],{"class":337},[201,11562,341],{"class":330},[201,11564,369],{"class":330},[201,11566,11567,11569,11571,11573,11575,11577,11579,11581,11583],{"class":203,"line":372},[201,11568,375],{"class":337},[201,11570,341],{"class":330},[201,11572,456],{"class":330},[201,11574,1220],{"class":337},[201,11576,341],{"class":330},[201,11578,390],{"class":330},[201,11580,393],{"class":210},[201,11582,347],{"class":330},[201,11584,1992],{"class":330},[201,11586,11587],{"class":203,"line":382},[201,11588,409],{"class":330},[201,11590,11591,11594,11596],{"class":203,"line":400},[201,11592,11593],{"class":337},"  $production",[201,11595,341],{"class":330},[201,11597,369],{"class":330},[201,11599,11600,11602,11604],{"class":203,"line":406},[201,11601,1965],{"class":337},[201,11603,341],{"class":330},[201,11605,369],{"class":330},[201,11607,11608,11610,11612,11614,11616],{"class":203,"line":412},[201,11609,11016],{"class":337},[201,11611,341],{"class":330},[201,11613,5886],{"class":721},[201,11615,495],{"class":330},[201,11617,11618],{"class":654}," // Suppress browser DevTools console, keep transport\n",[201,11620,11621,11623,11625],{"class":203,"line":930},[201,11622,8544],{"class":337},[201,11624,341],{"class":330},[201,11626,369],{"class":330},[201,11628,11629,11631,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651,11653,11655,11658],{"class":203,"line":1266},[201,11630,8553],{"class":337},[201,11632,341],{"class":330},[201,11634,456],{"class":330},[201,11636,8560],{"class":337},[201,11638,341],{"class":330},[201,11640,6887],{"class":3249},[201,11642,495],{"class":330},[201,11644,8569],{"class":337},[201,11646,341],{"class":330},[201,11648,8417],{"class":3249},[201,11650,495],{"class":330},[201,11652,8578],{"class":337},[201,11654,341],{"class":330},[201,11656,11657],{"class":3249}," 0",[201,11659,1992],{"class":330},[201,11661,11662,11665,11667,11669,11671,11673,11675,11677,11679,11681,11683,11685,11687,11689,11691],{"class":203,"line":1276},[201,11663,11664],{"class":337},"        keep",[201,11666,341],{"class":330},[201,11668,344],{"class":326},[201,11670,671],{"class":330},[201,11672,8813],{"class":337},[201,11674,341],{"class":330},[201,11676,8818],{"class":3249},[201,11678,8821],{"class":330},[201,11680,456],{"class":330},[201,11682,3244],{"class":337},[201,11684,341],{"class":330},[201,11686,8835],{"class":3249},[201,11688,462],{"class":330},[201,11690,355],{"class":326},[201,11692,358],{"class":330},[201,11694,11695],{"class":203,"line":1286},[201,11696,2861],{"class":330},[201,11698,11699],{"class":203,"line":1292},[201,11700,403],{"class":330},[201,11702,11703],{"class":203,"line":2832},[201,11704,409],{"class":330},[201,11706,11707,11709],{"class":203,"line":2858},[201,11708,415],{"class":330},[201,11710,418],{"class":326},[182,11712,11714],{"id":11713},"typescript-configuration","TypeScript Configuration",[178,11716,11717],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[936,11719,11721],{"color":8740,"icon":11720},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[182,11723,11725],{"id":11724},"next-steps","Next Steps",[3399,11727,11728,11733],{},[3402,11729,11730,11732],{},[289,11731,20],{"href":21}," - Learn the core concepts and start using evlog",[3402,11734,11735,11738],{},[289,11736,11737],{"href":143},"Next.js Example"," - Full Next.js App Router example with enrichers, pipeline, and drain",[11740,11741,11742],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":196,"searchDepth":334,"depth":334,"links":11744},[11745,11748,11761,11768,11771,11772],{"id":184,"depth":334,"text":185,"children":11746},[11747],{"id":261,"depth":361,"text":262},{"id":294,"depth":334,"text":295,"children":11749},[11750,11751,11752,11753,11754,11755,11756,11757,11758,11759,11760],{"id":298,"depth":361,"text":299},{"id":436,"depth":361,"text":142},{"id":1885,"depth":361,"text":1886},{"id":2155,"depth":361,"text":2156},{"id":2432,"depth":361,"text":147},{"id":3047,"depth":361,"text":3048},{"id":3436,"depth":361,"text":152},{"id":4134,"depth":361,"text":157},{"id":4966,"depth":361,"text":162},{"id":5737,"depth":361,"text":167},{"id":6421,"depth":361,"text":6422},{"id":7136,"depth":334,"text":7137,"children":11762},[11763,11764,11765,11766,11767],{"id":7386,"depth":361,"text":7387},{"id":7791,"depth":361,"text":7792},{"id":8316,"depth":361,"text":7329},{"id":9281,"depth":361,"text":9282},{"id":10017,"depth":361,"text":10018},{"id":10601,"depth":334,"text":7383,"children":11769},[11770],{"id":11058,"depth":361,"text":11059},{"id":11713,"depth":334,"text":11714},{"id":11724,"depth":334,"text":11725},"Install evlog in your Nuxt, Next.js, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[11776],{"label":20,"icon":23,"to":21,"color":1876,"variant":11777},"subtle",{},{"title":15,"icon":18},{"title":173,"description":11773},"8VRqYSEdJv07JyYBmkrCRQocgPqLxbMMMZba1WOJjGI",[11783,11785],{"title":10,"path":11,"stem":12,"description":11784,"icon":13,"children":-1},"A TypeScript logging library focused on wide events and structured error handling. Replace scattered logs with one comprehensive event per request.",{"title":20,"path":21,"stem":22,"description":11786,"icon":23,"children":-1},"Get up and running with evlog in minutes. Learn useLogger, createError, parseError, and the log API for wide events and structured errors.",1772883105167]