[{"data":1,"prerenderedAt":11774},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":171,"-getting-started-installation-surround":11769},[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":11760,"extension":11761,"links":11762,"meta":11765,"navigation":11766,"path":16,"seo":11767,"stem":17,"__hash__":11768},"docs/1.getting-started/2.installation.md","Install evlog",{"type":175,"value":176,"toc":11730},"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,6013,6015,6293,6298,6389,6400,6405,6409,6412,6603,6616,6629,6716,6723,6727,6743,7112,7120,7124,7131,7356,7370,7374,7381,7764,7775,7779,7782,8289,8300,8303,8306,8310,8317,8724,8738,8742,8749,8857,8864,8868,8877,9247,9265,9269,9276,9663,9669,9697,9722,9726,9731,10001,10005,10008,10405,10481,10484,10579,10585,10588,10598,10856,10860,10889,10902,10908,11042,11046,11053,11279,11289,11292,11351,11355,11358,11495,11698,11702,11705,11709,11713,11726],[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()\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,5877,5881,5896,5900,5930,5965,5979,5985,5989],{"__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],{"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,829],{"class":326},[201,5878,5879],{"class":203,"line":1266},[201,5880,479],{"emptyLinePlaceholder":478},[201,5882,5883,5886,5888,5890,5893],{"class":203,"line":1276},[201,5884,5885],{"class":315},"await",[201,5887,3781],{"class":326},[201,5889,663],{"class":330},[201,5891,5892],{"class":322},"register",[201,5894,5895],{"class":326},"(evlog)\n",[201,5897,5898],{"class":203,"line":1286},[201,5899,479],{"emptyLinePlaceholder":478},[201,5901,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5928],{"class":203,"line":1292},[201,5903,3626],{"class":326},[201,5905,663],{"class":330},[201,5907,896],{"class":322},[201,5909,327],{"class":326},[201,5911,347],{"class":330},[201,5913,3657],{"class":210},[201,5915,347],{"class":330},[201,5917,495],{"class":330},[201,5919,2725],{"class":486},[201,5921,621],{"class":330},[201,5923,625],{"class":624},[201,5925,632],{"class":330},[201,5927,635],{"class":486},[201,5929,369],{"class":330},[201,5931,5932,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963],{"class":203,"line":2832},[201,5933,5934],{"class":326},"  request",[201,5936,663],{"class":330},[201,5938,1300],{"class":326},[201,5940,663],{"class":330},[201,5942,666],{"class":322},[201,5944,327],{"class":337},[201,5946,671],{"class":330},[201,5948,3712],{"class":337},[201,5950,341],{"class":330},[201,5952,456],{"class":330},[201,5954,3719],{"class":337},[201,5956,341],{"class":330},[201,5958,3724],{"class":3249},[201,5960,462],{"class":330},[201,5962,462],{"class":330},[201,5964,418],{"class":337},[201,5966,5967,5969,5971,5973,5975,5977],{"class":203,"line":2858},[201,5968,701],{"class":315},[201,5970,456],{"class":330},[201,5972,3712],{"class":337},[201,5974,341],{"class":330},[201,5976,3751],{"class":337},[201,5978,1064],{"class":330},[201,5980,5981,5983],{"class":203,"line":2864},[201,5982,415],{"class":330},[201,5984,418],{"class":326},[201,5986,5987],{"class":203,"line":2869},[201,5988,479],{"emptyLinePlaceholder":478},[201,5990,5991,5993,5995,5997,5999,6001,6003,6005,6007,6009,6011],{"class":203,"line":2874},[201,5992,5885],{"class":315},[201,5994,3781],{"class":326},[201,5996,663],{"class":330},[201,5998,4409],{"class":322},[201,6000,327],{"class":326},[201,6002,671],{"class":330},[201,6004,3791],{"class":337},[201,6006,341],{"class":330},[201,6008,3796],{"class":3249},[201,6010,462],{"class":330},[201,6012,418],{"class":326},[178,6014,5219],{},[190,6016,6018],{"className":305,"code":6017,"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,6019,6020,6038,6056,6060,6072,6076,6093,6111,6129,6137,6161,6165,6177,6193,6203,6227,6231,6247,6283,6287],{"__ignoreMap":196},[201,6021,6022,6024,6026,6028,6030,6032,6034,6036],{"class":203,"line":204},[201,6023,453],{"class":315},[201,6025,456],{"class":330},[201,6027,3821],{"class":326},[201,6029,462],{"class":330},[201,6031,465],{"class":315},[201,6033,390],{"class":330},[201,6035,3830],{"class":210},[201,6037,473],{"class":330},[201,6039,6040,6042,6044,6046,6048,6050,6052,6054],{"class":203,"line":334},[201,6041,453],{"class":315},[201,6043,456],{"class":330},[201,6045,3841],{"class":326},[201,6047,462],{"class":330},[201,6049,465],{"class":315},[201,6051,390],{"class":330},[201,6053,3850],{"class":210},[201,6055,473],{"class":330},[201,6057,6058],{"class":203,"line":361},[201,6059,479],{"emptyLinePlaceholder":478},[201,6061,6062,6064,6066,6068,6070],{"class":203,"line":372},[201,6063,3597],{"class":486},[201,6065,3863],{"class":326},[201,6067,611],{"class":330},[201,6069,3841],{"class":322},[201,6071,829],{"class":326},[201,6073,6074],{"class":203,"line":382},[201,6075,479],{"emptyLinePlaceholder":478},[201,6077,6078,6080,6082,6084,6086,6089,6091],{"class":203,"line":400},[201,6079,5885],{"class":315},[201,6081,3781],{"class":326},[201,6083,663],{"class":330},[201,6085,5892],{"class":322},[201,6087,6088],{"class":326},"(evlog",[201,6090,495],{"class":330},[201,6092,369],{"class":330},[201,6094,6095,6097,6099,6101,6103,6105,6107,6109],{"class":203,"line":406},[201,6096,3894],{"class":337},[201,6098,341],{"class":330},[201,6100,344],{"class":326},[201,6102,347],{"class":330},[201,6104,3903],{"class":210},[201,6106,347],{"class":330},[201,6108,355],{"class":326},[201,6110,358],{"class":330},[201,6112,6113,6115,6117,6119,6121,6123,6125,6127],{"class":203,"line":412},[201,6114,3914],{"class":337},[201,6116,341],{"class":330},[201,6118,344],{"class":326},[201,6120,347],{"class":330},[201,6122,3923],{"class":210},[201,6124,347],{"class":330},[201,6126,355],{"class":326},[201,6128,358],{"class":330},[201,6130,6131,6133,6135],{"class":203,"line":930},[201,6132,3934],{"class":337},[201,6134,341],{"class":330},[201,6136,369],{"class":330},[201,6138,6139,6141,6143,6145,6147,6149,6151,6153,6155,6157,6159],{"class":203,"line":1266},[201,6140,3943],{"class":330},[201,6142,3946],{"class":337},[201,6144,347],{"class":330},[201,6146,341],{"class":330},[201,6148,456],{"class":330},[201,6150,1220],{"class":337},[201,6152,341],{"class":330},[201,6154,390],{"class":330},[201,6156,3961],{"class":210},[201,6158,347],{"class":330},[201,6160,1992],{"class":330},[201,6162,6163],{"class":203,"line":1276},[201,6164,409],{"class":330},[201,6166,6167,6169,6171,6173,6175],{"class":203,"line":1286},[201,6168,3974],{"class":337},[201,6170,341],{"class":330},[201,6172,3821],{"class":322},[201,6174,1350],{"class":326},[201,6176,358],{"class":330},[201,6178,6179,6181,6183,6185,6187,6189,6191],{"class":203,"line":1292},[201,6180,3987],{"class":322},[201,6182,341],{"class":330},[201,6184,621],{"class":330},[201,6186,3994],{"class":624},[201,6188,632],{"class":330},[201,6190,635],{"class":486},[201,6192,369],{"class":330},[201,6194,6195,6197,6199,6201],{"class":203,"line":2832},[201,6196,4005],{"class":322},[201,6198,327],{"class":337},[201,6200,3994],{"class":326},[201,6202,418],{"class":337},[201,6204,6205,6207,6209,6211,6213,6215,6217,6219,6221,6223,6225],{"class":203,"line":2858},[201,6206,4016],{"class":326},[201,6208,663],{"class":330},[201,6210,2082],{"class":326},[201,6212,663],{"class":330},[201,6214,4025],{"class":326},[201,6216,513],{"class":330},[201,6218,4030],{"class":326},[201,6220,663],{"class":330},[201,6222,1521],{"class":326},[201,6224,663],{"class":330},[201,6226,4039],{"class":326},[201,6228,6229],{"class":203,"line":2864},[201,6230,409],{"class":330},[201,6232,6233,6235,6237,6239,6241,6243,6245],{"class":203,"line":2869},[201,6234,4048],{"class":322},[201,6236,341],{"class":330},[201,6238,621],{"class":330},[201,6240,3994],{"class":624},[201,6242,632],{"class":330},[201,6244,635],{"class":486},[201,6246,369],{"class":330},[201,6248,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279,6281],{"class":203,"line":2874},[201,6250,4065],{"class":315},[201,6252,621],{"class":337},[201,6254,3994],{"class":326},[201,6256,663],{"class":330},[201,6258,4074],{"class":326},[201,6260,4077],{"class":330},[201,6262,4080],{"class":326},[201,6264,663],{"class":330},[201,6266,4074],{"class":326},[201,6268,4087],{"class":330},[201,6270,4090],{"class":3249},[201,6272,908],{"class":337},[201,6274,3994],{"class":326},[201,6276,663],{"class":330},[201,6278,4099],{"class":326},[201,6280,513],{"class":330},[201,6282,4104],{"class":721},[201,6284,6285],{"class":203,"line":3351},[201,6286,409],{"class":330},[201,6288,6289,6291],{"class":203,"line":3360},[201,6290,415],{"class":330},[201,6292,418],{"class":326},[178,6294,3419,6295,6297],{},[198,6296,1760],{}," to access the logger from anywhere in the call stack:",[190,6299,6301],{"className":305,"code":6300,"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,6302,6303,6321,6325,6347,6359,6385],{"__ignoreMap":196},[201,6304,6305,6307,6309,6311,6313,6315,6317,6319],{"class":203,"line":204},[201,6306,453],{"class":315},[201,6308,456],{"class":330},[201,6310,498],{"class":326},[201,6312,462],{"class":330},[201,6314,465],{"class":315},[201,6316,390],{"class":330},[201,6318,5743],{"class":210},[201,6320,473],{"class":330},[201,6322,6323],{"class":203,"line":334},[201,6324,479],{"emptyLinePlaceholder":478},[201,6326,6327,6330,6333,6335,6338,6340,6343,6345],{"class":203,"line":361},[201,6328,6329],{"class":486},"function",[201,6331,6332],{"class":322}," findUser",[201,6334,327],{"class":330},[201,6336,6337],{"class":624},"id",[201,6339,341],{"class":330},[201,6341,6342],{"class":207}," string",[201,6344,632],{"class":330},[201,6346,369],{"class":330},[201,6348,6349,6351,6353,6355,6357],{"class":203,"line":372},[201,6350,642],{"class":486},[201,6352,503],{"class":326},[201,6354,513],{"class":330},[201,6356,498],{"class":322},[201,6358,829],{"class":337},[201,6360,6361,6363,6365,6367,6369,6371,6373,6375,6377,6379,6381,6383],{"class":203,"line":382},[201,6362,660],{"class":326},[201,6364,663],{"class":330},[201,6366,666],{"class":322},[201,6368,327],{"class":337},[201,6370,671],{"class":330},[201,6372,674],{"class":337},[201,6374,341],{"class":330},[201,6376,456],{"class":330},[201,6378,681],{"class":326},[201,6380,462],{"class":330},[201,6382,462],{"class":330},[201,6384,418],{"class":337},[201,6386,6387],{"class":203,"line":400},[201,6388,1064],{"class":330},[936,6390,6391,2413,6393,6395,6396,6399],{"color":938,"icon":13},[2410,6392,2412],{},[198,6394,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,6397,6398],{},"fastify.log"," for server-level structured logging.",[936,6401,4127,6402,4131],{"color":1876,"icon":1877},[289,6403,6404],{"href":168},"Fastify example",[259,6406,6408],{"id":6407},"standalone-typescript","Standalone TypeScript",[178,6410,6411],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[190,6413,6416],{"className":305,"code":6414,"filename":6415,"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,6417,6418,6441,6445,6453,6461,6477,6493,6497,6503,6507,6565,6589],{"__ignoreMap":196},[201,6419,6420,6422,6424,6426,6428,6431,6433,6435,6437,6439],{"class":203,"line":204},[201,6421,453],{"class":315},[201,6423,456],{"class":330},[201,6425,3513],{"class":326},[201,6427,495],{"class":330},[201,6429,6430],{"class":326}," createLogger",[201,6432,462],{"class":330},[201,6434,465],{"class":315},[201,6436,390],{"class":330},[201,6438,2419],{"class":210},[201,6440,473],{"class":330},[201,6442,6443],{"class":203,"line":334},[201,6444,479],{"emptyLinePlaceholder":478},[201,6446,6447,6449,6451],{"class":203,"line":361},[201,6448,3557],{"class":322},[201,6450,327],{"class":326},[201,6452,331],{"class":330},[201,6454,6455,6457,6459],{"class":203,"line":372},[201,6456,3100],{"class":337},[201,6458,341],{"class":330},[201,6460,369],{"class":330},[201,6462,6463,6466,6468,6470,6473,6475],{"class":203,"line":382},[201,6464,6465],{"class":337},"    service",[201,6467,341],{"class":330},[201,6469,390],{"class":330},[201,6471,6472],{"class":210},"my-worker",[201,6474,347],{"class":330},[201,6476,358],{"class":330},[201,6478,6479,6482,6484,6486,6489,6491],{"class":203,"line":400},[201,6480,6481],{"class":337},"    environment",[201,6483,341],{"class":330},[201,6485,390],{"class":330},[201,6487,6488],{"class":210},"production",[201,6490,347],{"class":330},[201,6492,358],{"class":330},[201,6494,6495],{"class":203,"line":406},[201,6496,409],{"class":330},[201,6498,6499,6501],{"class":203,"line":412},[201,6500,415],{"class":330},[201,6502,418],{"class":326},[201,6504,6505],{"class":203,"line":930},[201,6506,479],{"emptyLinePlaceholder":478},[201,6508,6509,6511,6514,6516,6518,6520,6522,6525,6527,6530,6532,6534,6536,6538,6540,6542,6544,6547,6549,6552,6554,6556,6558,6561,6563],{"class":203,"line":1266},[201,6510,3597],{"class":486},[201,6512,6513],{"class":326}," log ",[201,6515,611],{"class":330},[201,6517,6430],{"class":322},[201,6519,327],{"class":326},[201,6521,671],{"class":330},[201,6523,6524],{"class":337}," jobId",[201,6526,341],{"class":330},[201,6528,6529],{"class":326}," job",[201,6531,663],{"class":330},[201,6533,6337],{"class":326},[201,6535,495],{"class":330},[201,6537,858],{"class":337},[201,6539,341],{"class":330},[201,6541,6529],{"class":326},[201,6543,663],{"class":330},[201,6545,6546],{"class":326},"source",[201,6548,495],{"class":330},[201,6550,6551],{"class":337}," target",[201,6553,341],{"class":330},[201,6555,6529],{"class":326},[201,6557,663],{"class":330},[201,6559,6560],{"class":326},"target ",[201,6562,415],{"class":330},[201,6564,418],{"class":326},[201,6566,6567,6569,6571,6573,6575,6577,6580,6582,6585,6587],{"class":203,"line":1276},[201,6568,1300],{"class":326},[201,6570,663],{"class":330},[201,6572,666],{"class":322},[201,6574,327],{"class":326},[201,6576,671],{"class":330},[201,6578,6579],{"class":337}," recordsSynced",[201,6581,341],{"class":330},[201,6583,6584],{"class":3249}," 150",[201,6586,462],{"class":330},[201,6588,418],{"class":326},[201,6590,6591,6593,6595,6597,6600],{"class":203,"line":1286},[201,6592,1300],{"class":326},[201,6594,663],{"class":330},[201,6596,3263],{"class":322},[201,6598,6599],{"class":326},"() ",[201,6601,6602],{"class":654},"// Manual emit required in standalone mode\n",[178,6604,6605,6608,6609,425,6612,6615],{},[198,6606,6607],{},"createLogger()"," accepts any initial context, making it ideal for workflows, jobs, queues, or scripts where HTTP request fields (",[198,6610,6611],{},"method",[198,6613,6614],{},"path",") don't apply.",[178,6617,6618,6619,6622,6623,425,6625,429,6627,341],{},"For HTTP request contexts, use ",[198,6620,6621],{},"createRequestLogger()"," which pre-populates ",[198,6624,6611],{},[198,6626,6614],{},[198,6628,1073],{},[190,6630,6633],{"className":305,"code":6631,"filename":6632,"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,6634,6635,6654,6658],{"__ignoreMap":196},[201,6636,6637,6639,6641,6644,6646,6648,6650,6652],{"class":203,"line":204},[201,6638,453],{"class":315},[201,6640,456],{"class":330},[201,6642,6643],{"class":326}," createRequestLogger",[201,6645,462],{"class":330},[201,6647,465],{"class":315},[201,6649,390],{"class":330},[201,6651,2419],{"class":210},[201,6653,473],{"class":330},[201,6655,6656],{"class":203,"line":334},[201,6657,479],{"emptyLinePlaceholder":478},[201,6659,6660,6662,6664,6666,6668,6670,6672,6675,6677,6679,6682,6684,6686,6689,6691,6693,6696,6698,6700,6703,6705,6707,6710,6712,6714],{"class":203,"line":361},[201,6661,3597],{"class":486},[201,6663,6513],{"class":326},[201,6665,611],{"class":330},[201,6667,6643],{"class":322},[201,6669,327],{"class":326},[201,6671,671],{"class":330},[201,6673,6674],{"class":337}," method",[201,6676,341],{"class":330},[201,6678,390],{"class":330},[201,6680,6681],{"class":210},"POST",[201,6683,347],{"class":330},[201,6685,495],{"class":330},[201,6687,6688],{"class":337}," path",[201,6690,341],{"class":330},[201,6692,390],{"class":330},[201,6694,6695],{"class":210},"/api/checkout",[201,6697,347],{"class":330},[201,6699,495],{"class":330},[201,6701,6702],{"class":337}," requestId",[201,6704,341],{"class":330},[201,6706,390],{"class":330},[201,6708,6709],{"class":210},"req-123",[201,6711,347],{"class":330},[201,6713,462],{"class":330},[201,6715,418],{"class":326},[936,6717,6718,6719,6722],{"color":938,"icon":13},"In standalone mode, you must call ",[198,6720,6721],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[734,6724,6726],{"id":6725},"draining-logs-to-external-services","Draining Logs to External Services",[178,6728,4118,6729,6731,6732,6734,6735,6738,6739,6742],{},[198,6730,1634],{}," option in ",[198,6733,3557],{}," to automatically send every emitted event to an external service. This works with all built-in ",[289,6736,6737],{"href":62},"adapters"," and the ",[289,6740,6741],{"href":97},"pipeline"," for batching and retry.",[190,6744,6746],{"className":305,"code":6745,"filename":6415,"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,6747,6748,6769,6795,6813,6833,6837,6880,6899,6903,6911,6945,6951,6957,6961,6966,6993,6997,7053,7076,7089,7093,7098],{"__ignoreMap":196},[201,6749,6750,6752,6754,6756,6759,6761,6763,6765,6767],{"class":203,"line":204},[201,6751,453],{"class":315},[201,6753,2651],{"class":315},[201,6755,456],{"class":330},[201,6757,6758],{"class":326}," DrainContext",[201,6760,462],{"class":330},[201,6762,465],{"class":315},[201,6764,390],{"class":330},[201,6766,2419],{"class":210},[201,6768,473],{"class":330},[201,6770,6771,6773,6775,6777,6779,6781,6783,6785,6787,6789,6791,6793],{"class":203,"line":334},[201,6772,453],{"class":315},[201,6774,456],{"class":330},[201,6776,3513],{"class":326},[201,6778,495],{"class":330},[201,6780,503],{"class":326},[201,6782,495],{"class":330},[201,6784,6430],{"class":326},[201,6786,462],{"class":330},[201,6788,465],{"class":315},[201,6790,390],{"class":330},[201,6792,2419],{"class":210},[201,6794,473],{"class":330},[201,6796,6797,6799,6801,6803,6805,6807,6809,6811],{"class":203,"line":361},[201,6798,453],{"class":315},[201,6800,456],{"class":330},[201,6802,3821],{"class":326},[201,6804,462],{"class":330},[201,6806,465],{"class":315},[201,6808,390],{"class":330},[201,6810,3830],{"class":210},[201,6812,473],{"class":330},[201,6814,6815,6817,6819,6822,6824,6826,6828,6831],{"class":203,"line":372},[201,6816,453],{"class":315},[201,6818,456],{"class":330},[201,6820,6821],{"class":326}," createDrainPipeline",[201,6823,462],{"class":330},[201,6825,465],{"class":315},[201,6827,390],{"class":330},[201,6829,6830],{"class":210},"evlog/pipeline",[201,6832,473],{"class":330},[201,6834,6835],{"class":203,"line":382},[201,6836,479],{"emptyLinePlaceholder":478},[201,6838,6839,6841,6844,6846,6848,6850,6853,6855,6857,6859,6862,6864,6866,6869,6871,6874,6876,6878],{"class":203,"line":400},[201,6840,3597],{"class":486},[201,6842,6843],{"class":326}," pipeline ",[201,6845,611],{"class":330},[201,6847,6821],{"class":322},[201,6849,3609],{"class":330},[201,6851,6852],{"class":207},"DrainContext",[201,6854,3615],{"class":330},[201,6856,327],{"class":326},[201,6858,671],{"class":330},[201,6860,6861],{"class":337}," batch",[201,6863,341],{"class":330},[201,6865,456],{"class":330},[201,6867,6868],{"class":337}," size",[201,6870,341],{"class":330},[201,6872,6873],{"class":3249}," 10",[201,6875,462],{"class":330},[201,6877,462],{"class":330},[201,6879,418],{"class":326},[201,6881,6882,6884,6887,6889,6892,6894,6897],{"class":203,"line":406},[201,6883,3597],{"class":486},[201,6885,6886],{"class":326}," drain ",[201,6888,611],{"class":330},[201,6890,6891],{"class":322}," pipeline",[201,6893,327],{"class":326},[201,6895,6896],{"class":322},"createAxiomDrain",[201,6898,3638],{"class":326},[201,6900,6901],{"class":203,"line":412},[201,6902,479],{"emptyLinePlaceholder":478},[201,6904,6905,6907,6909],{"class":203,"line":930},[201,6906,3557],{"class":322},[201,6908,327],{"class":326},[201,6910,331],{"class":330},[201,6912,6913,6915,6917,6919,6921,6923,6925,6928,6930,6932,6935,6937,6939,6941,6943],{"class":203,"line":1266},[201,6914,3100],{"class":337},[201,6916,341],{"class":330},[201,6918,456],{"class":330},[201,6920,1220],{"class":337},[201,6922,341],{"class":330},[201,6924,390],{"class":330},[201,6926,6927],{"class":210},"my-script",[201,6929,347],{"class":330},[201,6931,495],{"class":330},[201,6933,6934],{"class":337}," environment",[201,6936,341],{"class":330},[201,6938,390],{"class":330},[201,6940,6488],{"class":210},[201,6942,347],{"class":330},[201,6944,1992],{"class":330},[201,6946,6947,6949],{"class":203,"line":1276},[201,6948,3974],{"class":326},[201,6950,358],{"class":330},[201,6952,6953,6955],{"class":203,"line":1286},[201,6954,415],{"class":330},[201,6956,418],{"class":326},[201,6958,6959],{"class":203,"line":1292},[201,6960,479],{"emptyLinePlaceholder":478},[201,6962,6963],{"class":203,"line":2832},[201,6964,6965],{"class":654},"// Every log is automatically drained\n",[201,6967,6968,6970,6972,6974,6976,6978,6980,6982,6984,6987,6989,6991],{"class":203,"line":2858},[201,6969,1300],{"class":326},[201,6971,663],{"class":330},[201,6973,938],{"class":322},[201,6975,327],{"class":326},[201,6977,671],{"class":330},[201,6979,844],{"class":337},[201,6981,341],{"class":330},[201,6983,390],{"class":330},[201,6985,6986],{"class":210},"sync_started",[201,6988,347],{"class":330},[201,6990,462],{"class":330},[201,6992,418],{"class":326},[201,6994,6995],{"class":203,"line":2864},[201,6996,479],{"emptyLinePlaceholder":478},[201,6998,6999,7001,7004,7006,7008,7010,7012,7014,7016,7018,7021,7023,7025,7027,7029,7031,7034,7036,7038,7040,7042,7044,7047,7049,7051],{"class":203,"line":2869},[201,7000,3597],{"class":486},[201,7002,7003],{"class":326}," syncLog ",[201,7005,611],{"class":330},[201,7007,6430],{"class":322},[201,7009,327],{"class":326},[201,7011,671],{"class":330},[201,7013,6524],{"class":337},[201,7015,341],{"class":330},[201,7017,390],{"class":330},[201,7019,7020],{"class":210},"sync-001",[201,7022,347],{"class":330},[201,7024,495],{"class":330},[201,7026,858],{"class":337},[201,7028,341],{"class":330},[201,7030,390],{"class":330},[201,7032,7033],{"class":210},"postgres",[201,7035,347],{"class":330},[201,7037,495],{"class":330},[201,7039,6551],{"class":337},[201,7041,341],{"class":330},[201,7043,390],{"class":330},[201,7045,7046],{"class":210},"s3",[201,7048,347],{"class":330},[201,7050,462],{"class":330},[201,7052,418],{"class":326},[201,7054,7055,7058,7060,7062,7064,7066,7068,7070,7072,7074],{"class":203,"line":2874},[201,7056,7057],{"class":326},"syncLog",[201,7059,663],{"class":330},[201,7061,666],{"class":322},[201,7063,327],{"class":326},[201,7065,671],{"class":330},[201,7067,6579],{"class":337},[201,7069,341],{"class":330},[201,7071,6584],{"class":3249},[201,7073,462],{"class":330},[201,7075,418],{"class":326},[201,7077,7078,7080,7082,7084,7086],{"class":203,"line":3351},[201,7079,7057],{"class":326},[201,7081,663],{"class":330},[201,7083,3263],{"class":322},[201,7085,6599],{"class":326},[201,7087,7088],{"class":654},"// drained automatically\n",[201,7090,7091],{"class":203,"line":3360},[201,7092,479],{"emptyLinePlaceholder":478},[201,7094,7095],{"class":203,"line":3366},[201,7096,7097],{"class":654},"// Flush remaining events before exit\n",[201,7099,7100,7102,7105,7107,7110],{"class":203,"line":3371},[201,7101,5885],{"class":315},[201,7103,7104],{"class":326}," drain",[201,7106,663],{"class":330},[201,7108,7109],{"class":322},"flush",[201,7111,829],{"class":326},[936,7113,3426,7114,7119],{"color":1876,"icon":1877},[289,7115,7118],{"href":7116,"rel":7117},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[3431],"bun-script example"," for a complete working script.",[182,7121,7123],{"id":7122},"configuration-options","Configuration Options",[178,7125,7126,7127,7130],{},"These options apply to ",[2410,7128,7129],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[1433,7132,7133,7145],{},[1436,7134,7135],{},[1439,7136,7137,7139,7141,7143],{},[1442,7138,1444],{},[1442,7140,1447],{},[1442,7142,1450],{},[1442,7144,1453],{},[1455,7146,7147,7168,7189,7206,7222,7242,7259,7276,7294,7316,7336],{},[1439,7148,7149,7153,7157,7161],{},[1460,7150,7151],{},[198,7152,1484],{},[1460,7154,7155],{},[198,7156,1489],{},[1460,7158,7159],{},[198,7160,1494],{},[1460,7162,7163,7164,7167],{},"Globally enable/disable all logging. When ",[198,7165,7166],{},"false",", all operations become no-ops",[1439,7169,7170,7175,7179,7183],{},[1460,7171,7172],{},[198,7173,7174],{},"console",[1460,7176,7177],{},[198,7178,1489],{},[1460,7180,7181],{},[198,7182,1494],{},[1460,7184,7185,7186,7188],{},"Enable/disable browser console output. When ",[198,7187,7166],{},", client logs are suppressed in DevTools but still sent via transport",[1439,7190,7191,7196,7200,7204],{},[1460,7192,7193],{},[198,7194,7195],{},"env.service",[1460,7197,7198],{},[198,7199,1469],{},[1460,7201,7202],{},[198,7203,1474],{},[1460,7205,1477],{},[1439,7207,7208,7213,7217,7219],{},[1460,7209,7210],{},[198,7211,7212],{},"env.environment",[1460,7214,7215],{},[198,7216,1469],{},[1460,7218,1529],{},[1460,7220,7221],{},"Environment name",[1439,7223,7224,7228,7232,7236],{},[1460,7225,7226],{},[198,7227,1578],{},[1460,7229,7230],{},[198,7231,1583],{},[1460,7233,7234],{},[198,7235,1549],{},[1460,7237,7238,7239,7241],{},"Route patterns to log. Supports glob (",[198,7240,3903],{},"). If not set, all routes are logged",[1439,7243,7244,7248,7252,7256],{},[1460,7245,7246],{},[198,7247,1597],{},[1460,7249,7250],{},[198,7251,1583],{},[1460,7253,7254],{},[198,7255,1549],{},[1460,7257,7258],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[1439,7260,7261,7265,7269,7273],{},[1460,7262,7263],{},[198,7264,1615],{},[1460,7266,7267],{},[198,7268,1620],{},[1460,7270,7271],{},[198,7272,1549],{},[1460,7274,7275],{},"Route-specific service configuration",[1439,7277,7278,7282,7286,7291],{},[1460,7279,7280],{},[198,7281,1504],{},[1460,7283,7284],{},[198,7285,1489],{},[1460,7287,7288,7290],{},[198,7289,1494],{}," in dev",[1460,7292,7293],{},"Pretty print with tree formatting",[1439,7295,7296,7300,7305,7309],{},[1460,7297,7298],{},[198,7299,1539],{},[1460,7301,7302],{},[198,7303,7304],{},"object",[1460,7306,7307],{},[198,7308,1549],{},[1460,7310,7311,7312],{},"Head sampling rates per log level (0-100%). See ",[289,7313,7315],{"href":7314},"#sampling","Sampling",[1439,7317,7318,7322,7327,7331],{},[1460,7319,7320],{},[198,7321,1559],{},[1460,7323,7324],{},[198,7325,7326],{},"array",[1460,7328,7329],{},[198,7330,1549],{},[1460,7332,7333,7334],{},"Tail sampling conditions to force-keep logs. See ",[289,7335,7315],{"href":7314},[1439,7337,7338,7342,7346,7350],{},[1460,7339,7340],{},[198,7341,1672],{},[1460,7343,7344],{},[198,7345,1677],{},[1460,7347,7348],{},[198,7349,1549],{},[1460,7351,7352,7353,7355],{},"Custom tail sampling callback (Next.js). Equivalent to ",[198,7354,1841],{}," hook in Nuxt",[936,7357,7358,7359,949,7362,7365,7366,663],{"color":938,"icon":13},"Nuxt also supports ",[198,7360,7361],{},"transport.enabled",[198,7363,7364],{},"transport.endpoint"," for ",[289,7367,7369],{"href":7368},"#client-transport-nuxt-only","Client Transport",[259,7371,7373],{"id":7372},"route-filtering","Route Filtering",[178,7375,3419,7376,949,7378,7380],{},[198,7377,1578],{},[198,7379,1597],{}," to control which routes are logged. Both support glob patterns.",[187,7382,7383,7514,7640],{},[190,7384,7386],{"className":305,"code":7385,"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,7387,7388,7400,7418,7426,7454,7463,7475,7486,7497,7504,7508],{"__ignoreMap":196},[201,7389,7390,7392,7394,7396,7398],{"class":203,"line":204},[201,7391,316],{"class":315},[201,7393,319],{"class":315},[201,7395,323],{"class":322},[201,7397,327],{"class":326},[201,7399,331],{"class":330},[201,7401,7402,7404,7406,7408,7410,7412,7414,7416],{"class":203,"line":334},[201,7403,338],{"class":337},[201,7405,341],{"class":330},[201,7407,344],{"class":326},[201,7409,347],{"class":330},[201,7411,350],{"class":210},[201,7413,347],{"class":330},[201,7415,355],{"class":326},[201,7417,358],{"class":330},[201,7419,7420,7422,7424],{"class":203,"line":361},[201,7421,364],{"class":337},[201,7423,341],{"class":330},[201,7425,369],{"class":330},[201,7427,7428,7431,7433,7435,7437,7439,7441,7443,7445,7448,7450,7452],{"class":203,"line":372},[201,7429,7430],{"class":337},"    include",[201,7432,341],{"class":330},[201,7434,344],{"class":326},[201,7436,347],{"class":330},[201,7438,3903],{"class":210},[201,7440,347],{"class":330},[201,7442,495],{"class":330},[201,7444,390],{"class":330},[201,7446,7447],{"class":210},"/auth/**",[201,7449,347],{"class":330},[201,7451,355],{"class":326},[201,7453,358],{"class":330},[201,7455,7456,7459,7461],{"class":203,"line":382},[201,7457,7458],{"class":337},"    exclude",[201,7460,341],{"class":330},[201,7462,1960],{"class":326},[201,7464,7465,7468,7471,7473],{"class":203,"line":400},[201,7466,7467],{"class":330},"      '",[201,7469,7470],{"class":210},"/api/_nuxt_icon/**",[201,7472,347],{"class":330},[201,7474,358],{"class":330},[201,7476,7477,7479,7482,7484],{"class":203,"line":406},[201,7478,7467],{"class":330},[201,7480,7481],{"class":210},"/api/_content/**",[201,7483,347],{"class":330},[201,7485,358],{"class":330},[201,7487,7488,7490,7493,7495],{"class":203,"line":412},[201,7489,7467],{"class":330},[201,7491,7492],{"class":210},"/api/health",[201,7494,347],{"class":330},[201,7496,358],{"class":330},[201,7498,7499,7502],{"class":203,"line":930},[201,7500,7501],{"class":326},"    ]",[201,7503,358],{"class":330},[201,7505,7506],{"class":203,"line":1266},[201,7507,409],{"class":330},[201,7509,7510,7512],{"class":203,"line":1276},[201,7511,415],{"class":330},[201,7513,418],{"class":326},[190,7515,7518],{"className":305,"code":7516,"filename":7517,"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,7519,7520,7538,7552,7556,7568,7576,7584,7603,7622,7628,7634],{"__ignoreMap":196},[201,7521,7522,7524,7526,7528,7530,7532,7534,7536],{"class":203,"line":204},[201,7523,453],{"class":315},[201,7525,456],{"class":330},[201,7527,1908],{"class":326},[201,7529,462],{"class":330},[201,7531,465],{"class":315},[201,7533,390],{"class":330},[201,7535,1892],{"class":210},[201,7537,473],{"class":330},[201,7539,7540,7542,7544,7546,7548,7550],{"class":203,"line":334},[201,7541,453],{"class":315},[201,7543,1925],{"class":326},[201,7545,1928],{"class":315},[201,7547,390],{"class":330},[201,7549,1933],{"class":210},[201,7551,473],{"class":330},[201,7553,7554],{"class":203,"line":361},[201,7555,479],{"emptyLinePlaceholder":478},[201,7557,7558,7560,7562,7564,7566],{"class":203,"line":372},[201,7559,316],{"class":315},[201,7561,319],{"class":315},[201,7563,1908],{"class":322},[201,7565,327],{"class":326},[201,7567,331],{"class":330},[201,7569,7570,7572,7574],{"class":203,"line":382},[201,7571,338],{"class":337},[201,7573,341],{"class":330},[201,7575,1960],{"class":326},[201,7577,7578,7580,7582],{"class":203,"line":400},[201,7579,1965],{"class":322},[201,7581,327],{"class":326},[201,7583,331],{"class":330},[201,7585,7586,7589,7591,7593,7595,7597,7599,7601],{"class":203,"line":406},[201,7587,7588],{"class":337},"      include",[201,7590,341],{"class":330},[201,7592,344],{"class":326},[201,7594,347],{"class":330},[201,7596,3903],{"class":210},[201,7598,347],{"class":330},[201,7600,355],{"class":326},[201,7602,358],{"class":330},[201,7604,7605,7608,7610,7612,7614,7616,7618,7620],{"class":203,"line":412},[201,7606,7607],{"class":337},"      exclude",[201,7609,341],{"class":330},[201,7611,344],{"class":326},[201,7613,347],{"class":330},[201,7615,7492],{"class":210},[201,7617,347],{"class":330},[201,7619,355],{"class":326},[201,7621,358],{"class":330},[201,7623,7624,7626],{"class":203,"line":930},[201,7625,1997],{"class":330},[201,7627,418],{"class":326},[201,7629,7630,7632],{"class":203,"line":1266},[201,7631,2004],{"class":326},[201,7633,358],{"class":330},[201,7635,7636,7638],{"class":203,"line":1276},[201,7637,415],{"class":330},[201,7639,418],{"class":326},[190,7641,7644],{"className":305,"code":7642,"filename":7643,"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,7645,7646,7664,7678,7682,7694,7702,7710,7728,7746,7752,7758],{"__ignoreMap":196},[201,7647,7648,7650,7652,7654,7656,7658,7660,7662],{"class":203,"line":204},[201,7649,453],{"class":315},[201,7651,456],{"class":330},[201,7653,2176],{"class":326},[201,7655,462],{"class":330},[201,7657,465],{"class":315},[201,7659,390],{"class":330},[201,7661,2185],{"class":210},[201,7663,473],{"class":330},[201,7665,7666,7668,7670,7672,7674,7676],{"class":203,"line":334},[201,7667,453],{"class":315},[201,7669,1925],{"class":326},[201,7671,1928],{"class":315},[201,7673,390],{"class":330},[201,7675,2200],{"class":210},[201,7677,473],{"class":330},[201,7679,7680],{"class":203,"line":361},[201,7681,479],{"emptyLinePlaceholder":478},[201,7683,7684,7686,7688,7690,7692],{"class":203,"line":372},[201,7685,316],{"class":315},[201,7687,319],{"class":315},[201,7689,2176],{"class":322},[201,7691,327],{"class":326},[201,7693,331],{"class":330},[201,7695,7696,7698,7700],{"class":203,"line":382},[201,7697,338],{"class":337},[201,7699,341],{"class":330},[201,7701,1960],{"class":326},[201,7703,7704,7706,7708],{"class":203,"line":400},[201,7705,1965],{"class":322},[201,7707,327],{"class":326},[201,7709,331],{"class":330},[201,7711,7712,7714,7716,7718,7720,7722,7724,7726],{"class":203,"line":406},[201,7713,7588],{"class":337},[201,7715,341],{"class":330},[201,7717,344],{"class":326},[201,7719,347],{"class":330},[201,7721,3903],{"class":210},[201,7723,347],{"class":330},[201,7725,355],{"class":326},[201,7727,358],{"class":330},[201,7729,7730,7732,7734,7736,7738,7740,7742,7744],{"class":203,"line":412},[201,7731,7607],{"class":337},[201,7733,341],{"class":330},[201,7735,344],{"class":326},[201,7737,347],{"class":330},[201,7739,7492],{"class":210},[201,7741,347],{"class":330},[201,7743,355],{"class":326},[201,7745,358],{"class":330},[201,7747,7748,7750],{"class":203,"line":930},[201,7749,1997],{"class":330},[201,7751,418],{"class":326},[201,7753,7754,7756],{"class":203,"line":1266},[201,7755,2004],{"class":326},[201,7757,358],{"class":330},[201,7759,7760,7762],{"class":203,"line":1276},[201,7761,415],{"class":330},[201,7763,418],{"class":326},[936,7765,7766,7769,7770,949,7772,7774],{"color":938,"icon":13},[2410,7767,7768],{},"Exclusions take precedence."," If a path matches both ",[198,7771,1578],{},[198,7773,1597],{},", it will be excluded.",[259,7776,7778],{"id":7777},"route-based-service-configuration","Route-Based Service Configuration",[178,7780,7781],{},"In multi-service architectures, configure different service names for different routes:",[187,7783,7784,7953,8122],{},[190,7785,7787],{"className":305,"code":7786,"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,7788,7789,7801,7819,7827,7835,7850,7854,7863,7887,7913,7939,7943,7947],{"__ignoreMap":196},[201,7790,7791,7793,7795,7797,7799],{"class":203,"line":204},[201,7792,316],{"class":315},[201,7794,319],{"class":315},[201,7796,323],{"class":322},[201,7798,327],{"class":326},[201,7800,331],{"class":330},[201,7802,7803,7805,7807,7809,7811,7813,7815,7817],{"class":203,"line":334},[201,7804,338],{"class":337},[201,7806,341],{"class":330},[201,7808,344],{"class":326},[201,7810,347],{"class":330},[201,7812,350],{"class":210},[201,7814,347],{"class":330},[201,7816,355],{"class":326},[201,7818,358],{"class":330},[201,7820,7821,7823,7825],{"class":203,"line":361},[201,7822,364],{"class":337},[201,7824,341],{"class":330},[201,7826,369],{"class":330},[201,7828,7829,7831,7833],{"class":203,"line":372},[201,7830,375],{"class":337},[201,7832,341],{"class":330},[201,7834,369],{"class":330},[201,7836,7837,7839,7841,7843,7846,7848],{"class":203,"line":382},[201,7838,385],{"class":337},[201,7840,341],{"class":330},[201,7842,390],{"class":330},[201,7844,7845],{"class":210},"default-service",[201,7847,347],{"class":330},[201,7849,358],{"class":330},[201,7851,7852],{"class":203,"line":400},[201,7853,403],{"class":330},[201,7855,7856,7859,7861],{"class":203,"line":406},[201,7857,7858],{"class":337},"    routes",[201,7860,341],{"class":330},[201,7862,369],{"class":330},[201,7864,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885],{"class":203,"line":412},[201,7866,7467],{"class":330},[201,7868,3946],{"class":337},[201,7870,347],{"class":330},[201,7872,341],{"class":330},[201,7874,456],{"class":330},[201,7876,1220],{"class":337},[201,7878,341],{"class":330},[201,7880,390],{"class":330},[201,7882,3961],{"class":210},[201,7884,347],{"class":330},[201,7886,1992],{"class":330},[201,7888,7889,7891,7894,7896,7898,7900,7902,7904,7906,7909,7911],{"class":203,"line":930},[201,7890,7467],{"class":330},[201,7892,7893],{"class":337},"/api/payment/**",[201,7895,347],{"class":330},[201,7897,341],{"class":330},[201,7899,456],{"class":330},[201,7901,1220],{"class":337},[201,7903,341],{"class":330},[201,7905,390],{"class":330},[201,7907,7908],{"class":210},"payment-service",[201,7910,347],{"class":330},[201,7912,1992],{"class":330},[201,7914,7915,7917,7920,7922,7924,7926,7928,7930,7932,7935,7937],{"class":203,"line":1266},[201,7916,7467],{"class":330},[201,7918,7919],{"class":337},"/api/booking/**",[201,7921,347],{"class":330},[201,7923,341],{"class":330},[201,7925,456],{"class":330},[201,7927,1220],{"class":337},[201,7929,341],{"class":330},[201,7931,390],{"class":330},[201,7933,7934],{"class":210},"booking-service",[201,7936,347],{"class":330},[201,7938,1992],{"class":330},[201,7940,7941],{"class":203,"line":1276},[201,7942,403],{"class":330},[201,7944,7945],{"class":203,"line":1286},[201,7946,409],{"class":330},[201,7948,7949,7951],{"class":203,"line":1292},[201,7950,415],{"class":330},[201,7952,418],{"class":326},[190,7954,7956],{"className":305,"code":7955,"filename":7517,"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,7957,7958,7976,7990,7994,8006,8014,8022,8042,8051,8076,8100,8104,8110,8116],{"__ignoreMap":196},[201,7959,7960,7962,7964,7966,7968,7970,7972,7974],{"class":203,"line":204},[201,7961,453],{"class":315},[201,7963,456],{"class":330},[201,7965,1908],{"class":326},[201,7967,462],{"class":330},[201,7969,465],{"class":315},[201,7971,390],{"class":330},[201,7973,1892],{"class":210},[201,7975,473],{"class":330},[201,7977,7978,7980,7982,7984,7986,7988],{"class":203,"line":334},[201,7979,453],{"class":315},[201,7981,1925],{"class":326},[201,7983,1928],{"class":315},[201,7985,390],{"class":330},[201,7987,1933],{"class":210},[201,7989,473],{"class":330},[201,7991,7992],{"class":203,"line":361},[201,7993,479],{"emptyLinePlaceholder":478},[201,7995,7996,7998,8000,8002,8004],{"class":203,"line":372},[201,7997,316],{"class":315},[201,7999,319],{"class":315},[201,8001,1908],{"class":322},[201,8003,327],{"class":326},[201,8005,331],{"class":330},[201,8007,8008,8010,8012],{"class":203,"line":382},[201,8009,338],{"class":337},[201,8011,341],{"class":330},[201,8013,1960],{"class":326},[201,8015,8016,8018,8020],{"class":203,"line":400},[201,8017,1965],{"class":322},[201,8019,327],{"class":326},[201,8021,331],{"class":330},[201,8023,8024,8026,8028,8030,8032,8034,8036,8038,8040],{"class":203,"line":406},[201,8025,1974],{"class":337},[201,8027,341],{"class":330},[201,8029,456],{"class":330},[201,8031,1220],{"class":337},[201,8033,341],{"class":330},[201,8035,390],{"class":330},[201,8037,7845],{"class":210},[201,8039,347],{"class":330},[201,8041,1992],{"class":330},[201,8043,8044,8047,8049],{"class":203,"line":412},[201,8045,8046],{"class":337},"      routes",[201,8048,341],{"class":330},[201,8050,369],{"class":330},[201,8052,8053,8056,8058,8060,8062,8064,8066,8068,8070,8072,8074],{"class":203,"line":930},[201,8054,8055],{"class":330},"        '",[201,8057,3946],{"class":337},[201,8059,347],{"class":330},[201,8061,341],{"class":330},[201,8063,456],{"class":330},[201,8065,1220],{"class":337},[201,8067,341],{"class":330},[201,8069,390],{"class":330},[201,8071,3961],{"class":210},[201,8073,347],{"class":330},[201,8075,1992],{"class":330},[201,8077,8078,8080,8082,8084,8086,8088,8090,8092,8094,8096,8098],{"class":203,"line":1266},[201,8079,8055],{"class":330},[201,8081,7893],{"class":337},[201,8083,347],{"class":330},[201,8085,341],{"class":330},[201,8087,456],{"class":330},[201,8089,1220],{"class":337},[201,8091,341],{"class":330},[201,8093,390],{"class":330},[201,8095,7908],{"class":210},[201,8097,347],{"class":330},[201,8099,1992],{"class":330},[201,8101,8102],{"class":203,"line":1276},[201,8103,2861],{"class":330},[201,8105,8106,8108],{"class":203,"line":1286},[201,8107,1997],{"class":330},[201,8109,418],{"class":326},[201,8111,8112,8114],{"class":203,"line":1292},[201,8113,2004],{"class":326},[201,8115,358],{"class":330},[201,8117,8118,8120],{"class":203,"line":2832},[201,8119,415],{"class":330},[201,8121,418],{"class":326},[190,8123,8125],{"className":305,"code":8124,"filename":7643,"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,8126,8127,8145,8159,8163,8175,8183,8191,8211,8219,8243,8267,8271,8277,8283],{"__ignoreMap":196},[201,8128,8129,8131,8133,8135,8137,8139,8141,8143],{"class":203,"line":204},[201,8130,453],{"class":315},[201,8132,456],{"class":330},[201,8134,2176],{"class":326},[201,8136,462],{"class":330},[201,8138,465],{"class":315},[201,8140,390],{"class":330},[201,8142,2185],{"class":210},[201,8144,473],{"class":330},[201,8146,8147,8149,8151,8153,8155,8157],{"class":203,"line":334},[201,8148,453],{"class":315},[201,8150,1925],{"class":326},[201,8152,1928],{"class":315},[201,8154,390],{"class":330},[201,8156,2200],{"class":210},[201,8158,473],{"class":330},[201,8160,8161],{"class":203,"line":361},[201,8162,479],{"emptyLinePlaceholder":478},[201,8164,8165,8167,8169,8171,8173],{"class":203,"line":372},[201,8166,316],{"class":315},[201,8168,319],{"class":315},[201,8170,2176],{"class":322},[201,8172,327],{"class":326},[201,8174,331],{"class":330},[201,8176,8177,8179,8181],{"class":203,"line":382},[201,8178,338],{"class":337},[201,8180,341],{"class":330},[201,8182,1960],{"class":326},[201,8184,8185,8187,8189],{"class":203,"line":400},[201,8186,1965],{"class":322},[201,8188,327],{"class":326},[201,8190,331],{"class":330},[201,8192,8193,8195,8197,8199,8201,8203,8205,8207,8209],{"class":203,"line":406},[201,8194,1974],{"class":337},[201,8196,341],{"class":330},[201,8198,456],{"class":330},[201,8200,1220],{"class":337},[201,8202,341],{"class":330},[201,8204,390],{"class":330},[201,8206,7845],{"class":210},[201,8208,347],{"class":330},[201,8210,1992],{"class":330},[201,8212,8213,8215,8217],{"class":203,"line":412},[201,8214,8046],{"class":337},[201,8216,341],{"class":330},[201,8218,369],{"class":330},[201,8220,8221,8223,8225,8227,8229,8231,8233,8235,8237,8239,8241],{"class":203,"line":930},[201,8222,8055],{"class":330},[201,8224,3946],{"class":337},[201,8226,347],{"class":330},[201,8228,341],{"class":330},[201,8230,456],{"class":330},[201,8232,1220],{"class":337},[201,8234,341],{"class":330},[201,8236,390],{"class":330},[201,8238,3961],{"class":210},[201,8240,347],{"class":330},[201,8242,1992],{"class":330},[201,8244,8245,8247,8249,8251,8253,8255,8257,8259,8261,8263,8265],{"class":203,"line":1266},[201,8246,8055],{"class":330},[201,8248,7893],{"class":337},[201,8250,347],{"class":330},[201,8252,341],{"class":330},[201,8254,456],{"class":330},[201,8256,1220],{"class":337},[201,8258,341],{"class":330},[201,8260,390],{"class":330},[201,8262,7908],{"class":210},[201,8264,347],{"class":330},[201,8266,1992],{"class":330},[201,8268,8269],{"class":203,"line":1276},[201,8270,2861],{"class":330},[201,8272,8273,8275],{"class":203,"line":1286},[201,8274,1997],{"class":330},[201,8276,418],{"class":326},[201,8278,8279,8281],{"class":203,"line":1292},[201,8280,2004],{"class":326},[201,8282,358],{"class":330},[201,8284,8285,8287],{"class":203,"line":2832},[201,8286,415],{"class":330},[201,8288,418],{"class":326},[178,8290,8291,8292,8295,8296,291],{},"You can also override the service name per handler using ",[198,8293,8294],{},"useLogger(event, 'service-name')",". See ",[289,8297,8299],{"href":8298},"/getting-started/quick-start#service-identification","Quick Start - Service Identification",[259,8301,7315],{"id":8302},"sampling",[178,8304,8305],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[734,8307,8309],{"id":8308},"head-sampling-rates","Head Sampling (rates)",[178,8311,8312,8313,8316],{},"Random sampling based on log level, decided ",[2410,8314,8315],{},"before"," the request completes:",[187,8318,8319,8457,8593],{},[190,8320,8322],{"className":305,"code":8321,"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,8323,8324,8336,8354,8362,8371,8380,8394,8409,8424,8439,8443,8447,8451],{"__ignoreMap":196},[201,8325,8326,8328,8330,8332,8334],{"class":203,"line":204},[201,8327,316],{"class":315},[201,8329,319],{"class":315},[201,8331,323],{"class":322},[201,8333,327],{"class":326},[201,8335,331],{"class":330},[201,8337,8338,8340,8342,8344,8346,8348,8350,8352],{"class":203,"line":334},[201,8339,338],{"class":337},[201,8341,341],{"class":330},[201,8343,344],{"class":326},[201,8345,347],{"class":330},[201,8347,350],{"class":210},[201,8349,347],{"class":330},[201,8351,355],{"class":326},[201,8353,358],{"class":330},[201,8355,8356,8358,8360],{"class":203,"line":361},[201,8357,364],{"class":337},[201,8359,341],{"class":330},[201,8361,369],{"class":330},[201,8363,8364,8367,8369],{"class":203,"line":372},[201,8365,8366],{"class":337},"    sampling",[201,8368,341],{"class":330},[201,8370,369],{"class":330},[201,8372,8373,8376,8378],{"class":203,"line":382},[201,8374,8375],{"class":337},"      rates",[201,8377,341],{"class":330},[201,8379,369],{"class":330},[201,8381,8382,8385,8387,8389,8391],{"class":203,"line":400},[201,8383,8384],{"class":337},"        info",[201,8386,341],{"class":330},[201,8388,6873],{"class":3249},[201,8390,495],{"class":330},[201,8392,8393],{"class":654},"    // Keep 10% of info logs\n",[201,8395,8396,8399,8401,8404,8406],{"class":203,"line":406},[201,8397,8398],{"class":337},"        warn",[201,8400,341],{"class":330},[201,8402,8403],{"class":3249}," 50",[201,8405,495],{"class":330},[201,8407,8408],{"class":654},"    // Keep 50% of warning logs\n",[201,8410,8411,8414,8416,8419,8421],{"class":203,"line":412},[201,8412,8413],{"class":337},"        debug",[201,8415,341],{"class":330},[201,8417,8418],{"class":3249}," 5",[201,8420,495],{"class":330},[201,8422,8423],{"class":654},"    // Keep 5% of debug logs\n",[201,8425,8426,8429,8431,8434,8436],{"class":203,"line":930},[201,8427,8428],{"class":337},"        error",[201,8430,341],{"class":330},[201,8432,8433],{"class":3249}," 100",[201,8435,495],{"class":330},[201,8437,8438],{"class":654},"  // Always keep errors (default)\n",[201,8440,8441],{"class":203,"line":1266},[201,8442,2861],{"class":330},[201,8444,8445],{"class":203,"line":1276},[201,8446,403],{"class":330},[201,8448,8449],{"class":203,"line":1286},[201,8450,409],{"class":330},[201,8452,8453,8455],{"class":203,"line":1292},[201,8454,415],{"class":330},[201,8456,418],{"class":326},[190,8458,8460],{"className":305,"code":8459,"filename":7517,"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,8461,8462,8480,8494,8498,8510,8518,8526,8535,8571,8575,8581,8587],{"__ignoreMap":196},[201,8463,8464,8466,8468,8470,8472,8474,8476,8478],{"class":203,"line":204},[201,8465,453],{"class":315},[201,8467,456],{"class":330},[201,8469,1908],{"class":326},[201,8471,462],{"class":330},[201,8473,465],{"class":315},[201,8475,390],{"class":330},[201,8477,1892],{"class":210},[201,8479,473],{"class":330},[201,8481,8482,8484,8486,8488,8490,8492],{"class":203,"line":334},[201,8483,453],{"class":315},[201,8485,1925],{"class":326},[201,8487,1928],{"class":315},[201,8489,390],{"class":330},[201,8491,1933],{"class":210},[201,8493,473],{"class":330},[201,8495,8496],{"class":203,"line":361},[201,8497,479],{"emptyLinePlaceholder":478},[201,8499,8500,8502,8504,8506,8508],{"class":203,"line":372},[201,8501,316],{"class":315},[201,8503,319],{"class":315},[201,8505,1908],{"class":322},[201,8507,327],{"class":326},[201,8509,331],{"class":330},[201,8511,8512,8514,8516],{"class":203,"line":382},[201,8513,338],{"class":337},[201,8515,341],{"class":330},[201,8517,1960],{"class":326},[201,8519,8520,8522,8524],{"class":203,"line":400},[201,8521,1965],{"class":322},[201,8523,327],{"class":326},[201,8525,331],{"class":330},[201,8527,8528,8531,8533],{"class":203,"line":406},[201,8529,8530],{"class":337},"      sampling",[201,8532,341],{"class":330},[201,8534,369],{"class":330},[201,8536,8537,8540,8542,8544,8547,8549,8551,8553,8556,8558,8560,8562,8565,8567,8569],{"class":203,"line":412},[201,8538,8539],{"class":337},"        rates",[201,8541,341],{"class":330},[201,8543,456],{"class":330},[201,8545,8546],{"class":337}," info",[201,8548,341],{"class":330},[201,8550,6873],{"class":3249},[201,8552,495],{"class":330},[201,8554,8555],{"class":337}," warn",[201,8557,341],{"class":330},[201,8559,8403],{"class":3249},[201,8561,495],{"class":330},[201,8563,8564],{"class":337}," debug",[201,8566,341],{"class":330},[201,8568,8418],{"class":3249},[201,8570,1992],{"class":330},[201,8572,8573],{"class":203,"line":930},[201,8574,2861],{"class":330},[201,8576,8577,8579],{"class":203,"line":1266},[201,8578,1997],{"class":330},[201,8580,418],{"class":326},[201,8582,8583,8585],{"class":203,"line":1276},[201,8584,2004],{"class":326},[201,8586,358],{"class":330},[201,8588,8589,8591],{"class":203,"line":1286},[201,8590,415],{"class":330},[201,8592,418],{"class":326},[190,8594,8596],{"className":305,"code":8595,"filename":7643,"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,8597,8598,8616,8630,8634,8646,8654,8662,8670,8702,8706,8712,8718],{"__ignoreMap":196},[201,8599,8600,8602,8604,8606,8608,8610,8612,8614],{"class":203,"line":204},[201,8601,453],{"class":315},[201,8603,456],{"class":330},[201,8605,2176],{"class":326},[201,8607,462],{"class":330},[201,8609,465],{"class":315},[201,8611,390],{"class":330},[201,8613,2185],{"class":210},[201,8615,473],{"class":330},[201,8617,8618,8620,8622,8624,8626,8628],{"class":203,"line":334},[201,8619,453],{"class":315},[201,8621,1925],{"class":326},[201,8623,1928],{"class":315},[201,8625,390],{"class":330},[201,8627,2200],{"class":210},[201,8629,473],{"class":330},[201,8631,8632],{"class":203,"line":361},[201,8633,479],{"emptyLinePlaceholder":478},[201,8635,8636,8638,8640,8642,8644],{"class":203,"line":372},[201,8637,316],{"class":315},[201,8639,319],{"class":315},[201,8641,2176],{"class":322},[201,8643,327],{"class":326},[201,8645,331],{"class":330},[201,8647,8648,8650,8652],{"class":203,"line":382},[201,8649,338],{"class":337},[201,8651,341],{"class":330},[201,8653,1960],{"class":326},[201,8655,8656,8658,8660],{"class":203,"line":400},[201,8657,1965],{"class":322},[201,8659,327],{"class":326},[201,8661,331],{"class":330},[201,8663,8664,8666,8668],{"class":203,"line":406},[201,8665,8530],{"class":337},[201,8667,341],{"class":330},[201,8669,369],{"class":330},[201,8671,8672,8674,8676,8678,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700],{"class":203,"line":412},[201,8673,8539],{"class":337},[201,8675,341],{"class":330},[201,8677,456],{"class":330},[201,8679,8546],{"class":337},[201,8681,341],{"class":330},[201,8683,6873],{"class":3249},[201,8685,495],{"class":330},[201,8687,8555],{"class":337},[201,8689,341],{"class":330},[201,8691,8403],{"class":3249},[201,8693,495],{"class":330},[201,8695,8564],{"class":337},[201,8697,341],{"class":330},[201,8699,8418],{"class":3249},[201,8701,1992],{"class":330},[201,8703,8704],{"class":203,"line":930},[201,8705,2861],{"class":330},[201,8707,8708,8710],{"class":203,"line":1266},[201,8709,1997],{"class":330},[201,8711,418],{"class":326},[201,8713,8714,8716],{"class":203,"line":1276},[201,8715,2004],{"class":326},[201,8717,358],{"class":330},[201,8719,8720,8722],{"class":203,"line":1286},[201,8721,415],{"class":330},[201,8723,418],{"class":326},[936,8725,8727,8730,8731,8734,8735,663],{"color":8726,"icon":49},"success",[2410,8728,8729],{},"Errors are always logged by default."," Even if you don't specify ",[198,8732,8733],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[198,8736,8737],{},"error: 0",[734,8739,8741],{"id":8740},"tail-sampling-keep","Tail Sampling (keep)",[178,8743,8744,8745,8748],{},"Force-keep logs based on request outcome, evaluated ",[2410,8746,8747],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[190,8750,8752],{"className":305,"code":8751,"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,8753,8754,8759,8767,8784,8792,8811,8827,8847,8853],{"__ignoreMap":196},[201,8755,8756],{"class":203,"line":204},[201,8757,8758],{"class":654},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[201,8760,8761,8763,8765],{"class":203,"line":334},[201,8762,8302],{"class":207},[201,8764,341],{"class":330},[201,8766,369],{"class":330},[201,8768,8769,8772,8774,8776,8778,8780,8782],{"class":203,"line":361},[201,8770,8771],{"class":207},"  rates",[201,8773,341],{"class":330},[201,8775,456],{"class":330},[201,8777,8546],{"class":207},[201,8779,341],{"class":330},[201,8781,6873],{"class":3249},[201,8783,1992],{"class":330},[201,8785,8786,8788,8790],{"class":203,"line":372},[201,8787,4048],{"class":207},[201,8789,341],{"class":330},[201,8791,1960],{"class":337},[201,8793,8794,8797,8800,8802,8805,8808],{"class":203,"line":382},[201,8795,8796],{"class":330},"    {",[201,8798,8799],{"class":337}," duration",[201,8801,341],{"class":330},[201,8803,8804],{"class":3249}," 1000",[201,8806,8807],{"class":330}," },",[201,8809,8810],{"class":654},"           // Always keep if duration >= 1000ms\n",[201,8812,8813,8815,8817,8819,8822,8824],{"class":203,"line":400},[201,8814,8796],{"class":330},[201,8816,3244],{"class":337},[201,8818,341],{"class":330},[201,8820,8821],{"class":3249}," 400",[201,8823,8807],{"class":330},[201,8825,8826],{"class":654},"              // Always keep if status >= 400\n",[201,8828,8829,8831,8833,8835,8837,8840,8842,8844],{"class":203,"line":406},[201,8830,8796],{"class":330},[201,8832,6688],{"class":337},[201,8834,341],{"class":330},[201,8836,390],{"class":330},[201,8838,8839],{"class":210},"/api/critical/**",[201,8841,347],{"class":330},[201,8843,8807],{"class":330},[201,8845,8846],{"class":654}," // Always keep critical paths\n",[201,8848,8849,8851],{"class":203,"line":412},[201,8850,2004],{"class":337},[201,8852,358],{"class":330},[201,8854,8855],{"class":203,"line":930},[201,8856,1064],{"class":330},[178,8858,8859,8860,8863],{},"Conditions use ",[198,8861,8862],{},">="," comparison and follow OR logic (any match = keep).",[734,8865,8867],{"id":8866},"custom-tail-sampling","Custom Tail Sampling",[178,8869,8870,8871,8873,8874,8876],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[198,8872,1841],{}," hook (Nuxt/Nitro) or the ",[198,8875,1672],{}," callback (Next.js):",[187,8878,8879,9033],{},[190,8880,8883],{"className":305,"code":8881,"filename":8882,"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,8884,8885,8907,8942,8982,8986,9004,9017,9021,9027],{"__ignoreMap":196},[201,8886,8887,8889,8891,8894,8896,8898,8901,8903,8905],{"class":203,"line":204},[201,8888,316],{"class":315},[201,8890,319],{"class":315},[201,8892,8893],{"class":322}," defineNitroPlugin",[201,8895,327],{"class":326},[201,8897,327],{"class":330},[201,8899,8900],{"class":624},"nitroApp",[201,8902,632],{"class":330},[201,8904,635],{"class":486},[201,8906,369],{"class":330},[201,8908,8909,8912,8914,8917,8919,8922,8924,8926,8928,8930,8932,8934,8936,8938,8940],{"class":203,"line":334},[201,8910,8911],{"class":326},"  nitroApp",[201,8913,663],{"class":330},[201,8915,8916],{"class":326},"hooks",[201,8918,663],{"class":330},[201,8920,8921],{"class":322},"hook",[201,8923,327],{"class":337},[201,8925,347],{"class":330},[201,8927,1841],{"class":210},[201,8929,347],{"class":330},[201,8931,495],{"class":330},[201,8933,621],{"class":330},[201,8935,3994],{"class":624},[201,8937,632],{"class":330},[201,8939,635],{"class":486},[201,8941,369],{"class":330},[201,8943,8944,8946,8948,8950,8952,8954,8956,8958,8961,8963,8965,8968,8971,8974,8976,8979],{"class":203,"line":361},[201,8945,3161],{"class":486},[201,8947,674],{"class":326},[201,8949,513],{"class":330},[201,8951,4080],{"class":326},[201,8953,663],{"class":330},[201,8955,2761],{"class":326},[201,8957,663],{"class":330},[201,8959,8960],{"class":326},"user",[201,8962,2768],{"class":315},[201,8964,456],{"class":330},[201,8966,8967],{"class":337}," premium",[201,8969,8970],{"class":330},"?:",[201,8972,8973],{"class":207}," boolean",[201,8975,462],{"class":330},[201,8977,8978],{"class":330}," |",[201,8980,8981],{"class":207}," undefined\n",[201,8983,8984],{"class":203,"line":372},[201,8985,479],{"emptyLinePlaceholder":478},[201,8987,8988,8990,8992,8994,8997,9000,9002],{"class":203,"line":382},[201,8989,4065],{"class":315},[201,8991,621],{"class":337},[201,8993,8960],{"class":326},[201,8995,8996],{"class":330},"?.",[201,8998,8999],{"class":326},"premium",[201,9001,908],{"class":337},[201,9003,331],{"class":330},[201,9005,9006,9009,9011,9013,9015],{"class":203,"line":400},[201,9007,9008],{"class":326},"      ctx",[201,9010,663],{"class":330},[201,9012,4099],{"class":326},[201,9014,513],{"class":330},[201,9016,4104],{"class":721},[201,9018,9019],{"class":203,"line":406},[201,9020,3363],{"class":330},[201,9022,9023,9025],{"class":203,"line":412},[201,9024,5202],{"class":330},[201,9026,418],{"class":337},[201,9028,9029,9031],{"class":203,"line":930},[201,9030,415],{"class":330},[201,9032,418],{"class":326},[190,9034,9037],{"className":305,"code":9035,"filename":9036,"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,9038,9039,9057,9061,9086,9100,9109,9126,9159,9163,9179,9213,9237,9241],{"__ignoreMap":196},[201,9040,9041,9043,9045,9047,9049,9051,9053,9055],{"class":203,"line":204},[201,9042,453],{"class":315},[201,9044,456],{"class":330},[201,9046,459],{"class":326},[201,9048,462],{"class":330},[201,9050,465],{"class":315},[201,9052,390],{"class":330},[201,9054,470],{"class":210},[201,9056,473],{"class":330},[201,9058,9059],{"class":203,"line":334},[201,9060,479],{"emptyLinePlaceholder":478},[201,9062,9063,9065,9067,9069,9071,9073,9076,9078,9080,9082,9084],{"class":203,"line":361},[201,9064,316],{"class":315},[201,9066,487],{"class":486},[201,9068,456],{"class":330},[201,9070,492],{"class":326},[201,9072,495],{"class":330},[201,9074,9075],{"class":326}," useLogger ",[201,9077,415],{"class":330},[201,9079,513],{"class":330},[201,9081,459],{"class":322},[201,9083,327],{"class":326},[201,9085,331],{"class":330},[201,9087,9088,9090,9092,9094,9096,9098],{"class":203,"line":372},[201,9089,524],{"class":337},[201,9091,341],{"class":330},[201,9093,390],{"class":330},[201,9095,393],{"class":210},[201,9097,347],{"class":330},[201,9099,358],{"class":330},[201,9101,9102,9105,9107],{"class":203,"line":382},[201,9103,9104],{"class":337},"  sampling",[201,9106,341],{"class":330},[201,9108,369],{"class":330},[201,9110,9111,9114,9116,9118,9120,9122,9124],{"class":203,"line":400},[201,9112,9113],{"class":337},"    rates",[201,9115,341],{"class":330},[201,9117,456],{"class":330},[201,9119,8546],{"class":337},[201,9121,341],{"class":330},[201,9123,6873],{"class":3249},[201,9125,1992],{"class":330},[201,9127,9128,9131,9133,9135,9137,9139,9141,9143,9145,9147,9149,9151,9153,9155,9157],{"class":203,"line":406},[201,9129,9130],{"class":337},"    keep",[201,9132,341],{"class":330},[201,9134,344],{"class":326},[201,9136,671],{"class":330},[201,9138,3244],{"class":337},[201,9140,341],{"class":330},[201,9142,8821],{"class":3249},[201,9144,8807],{"class":330},[201,9146,456],{"class":330},[201,9148,8799],{"class":337},[201,9150,341],{"class":330},[201,9152,8804],{"class":3249},[201,9154,462],{"class":330},[201,9156,355],{"class":326},[201,9158,358],{"class":330},[201,9160,9161],{"class":203,"line":412},[201,9162,409],{"class":330},[201,9164,9165,9167,9169,9171,9173,9175,9177],{"class":203,"line":930},[201,9166,4048],{"class":322},[201,9168,341],{"class":330},[201,9170,621],{"class":330},[201,9172,3994],{"class":624},[201,9174,632],{"class":330},[201,9176,635],{"class":486},[201,9178,369],{"class":330},[201,9180,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209,9211],{"class":203,"line":1266},[201,9182,3161],{"class":486},[201,9184,674],{"class":326},[201,9186,513],{"class":330},[201,9188,4080],{"class":326},[201,9190,663],{"class":330},[201,9192,2761],{"class":326},[201,9194,663],{"class":330},[201,9196,8960],{"class":326},[201,9198,2768],{"class":315},[201,9200,456],{"class":330},[201,9202,8967],{"class":337},[201,9204,8970],{"class":330},[201,9206,8973],{"class":207},[201,9208,462],{"class":330},[201,9210,8978],{"class":330},[201,9212,8981],{"class":207},[201,9214,9215,9217,9219,9221,9223,9225,9227,9229,9231,9233,9235],{"class":203,"line":1276},[201,9216,4065],{"class":315},[201,9218,621],{"class":337},[201,9220,8960],{"class":326},[201,9222,8996],{"class":330},[201,9224,8999],{"class":326},[201,9226,908],{"class":337},[201,9228,3994],{"class":326},[201,9230,663],{"class":330},[201,9232,4099],{"class":326},[201,9234,513],{"class":330},[201,9236,4104],{"class":721},[201,9238,9239],{"class":203,"line":1286},[201,9240,409],{"class":330},[201,9242,9243,9245],{"class":203,"line":1292},[201,9244,415],{"class":330},[201,9246,418],{"class":326},[178,9248,9249,9250,9253,9254,425,9256,425,9258,425,9260,9262,9263,663],{},"The callback receives a ",[198,9251,9252],{},"TailSamplingContext"," with ",[198,9255,3278],{},[198,9257,4074],{},[198,9259,6614],{},[198,9261,6611],{},", and the full accumulated ",[198,9264,2761],{},[259,9266,9268],{"id":9267},"log-draining","Log Draining",[178,9270,9271,9272,9275],{},"Send logs to external services like Axiom, Loki, or custom endpoints. The drain is called in ",[2410,9273,9274],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[187,9277,9278,9459],{},[190,9279,9282],{"className":305,"code":9280,"filename":9281,"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,9283,9284,9304,9338,9358,9373,9413,9441,9447,9453],{"__ignoreMap":196},[201,9285,9286,9288,9290,9292,9294,9296,9298,9300,9302],{"class":203,"line":204},[201,9287,316],{"class":315},[201,9289,319],{"class":315},[201,9291,8893],{"class":322},[201,9293,327],{"class":326},[201,9295,327],{"class":330},[201,9297,8900],{"class":624},[201,9299,632],{"class":330},[201,9301,635],{"class":486},[201,9303,369],{"class":330},[201,9305,9306,9308,9310,9312,9314,9316,9318,9320,9322,9324,9326,9328,9330,9332,9334,9336],{"class":203,"line":334},[201,9307,8911],{"class":326},[201,9309,663],{"class":330},[201,9311,8916],{"class":326},[201,9313,663],{"class":330},[201,9315,8921],{"class":322},[201,9317,327],{"class":337},[201,9319,347],{"class":330},[201,9321,1797],{"class":210},[201,9323,347],{"class":330},[201,9325,495],{"class":330},[201,9327,2725],{"class":486},[201,9329,621],{"class":330},[201,9331,3994],{"class":624},[201,9333,632],{"class":330},[201,9335,635],{"class":486},[201,9337,369],{"class":330},[201,9339,9340,9343,9345,9347,9349,9352,9354,9356],{"class":203,"line":361},[201,9341,9342],{"class":315},"    await",[201,9344,3143],{"class":322},[201,9346,327],{"class":337},[201,9348,347],{"class":330},[201,9350,9351],{"class":210},"https://api.axiom.co/v1/datasets/logs/ingest",[201,9353,347],{"class":330},[201,9355,495],{"class":330},[201,9357,369],{"class":330},[201,9359,9360,9363,9365,9367,9369,9371],{"class":203,"line":372},[201,9361,9362],{"class":337},"      method",[201,9364,341],{"class":330},[201,9366,390],{"class":330},[201,9368,6681],{"class":210},[201,9370,347],{"class":330},[201,9372,358],{"class":330},[201,9374,9375,9378,9380,9382,9385,9387,9390,9393,9396,9399,9401,9403,9405,9408,9411],{"class":203,"line":382},[201,9376,9377],{"class":337},"      headers",[201,9379,341],{"class":330},[201,9381,456],{"class":330},[201,9383,9384],{"class":337}," Authorization",[201,9386,341],{"class":330},[201,9388,9389],{"class":330}," `",[201,9391,9392],{"class":210},"Bearer ",[201,9394,9395],{"class":330},"${",[201,9397,9398],{"class":326},"process",[201,9400,663],{"class":330},[201,9402,1521],{"class":326},[201,9404,663],{"class":330},[201,9406,9407],{"class":326},"AXIOM_TOKEN",[201,9409,9410],{"class":330},"}`",[201,9412,1992],{"class":330},[201,9414,9415,9418,9420,9423,9425,9427,9430,9432,9434,9436,9439],{"class":203,"line":400},[201,9416,9417],{"class":337},"      body",[201,9419,341],{"class":330},[201,9421,9422],{"class":326}," JSON",[201,9424,663],{"class":330},[201,9426,1695],{"class":322},[201,9428,9429],{"class":337},"([",[201,9431,3994],{"class":326},[201,9433,663],{"class":330},[201,9435,2082],{"class":326},[201,9437,9438],{"class":337},"])",[201,9440,358],{"class":330},[201,9442,9443,9445],{"class":203,"line":406},[201,9444,1997],{"class":330},[201,9446,418],{"class":337},[201,9448,9449,9451],{"class":203,"line":412},[201,9450,5202],{"class":330},[201,9452,418],{"class":337},[201,9454,9455,9457],{"class":203,"line":930},[201,9456,415],{"class":330},[201,9458,418],{"class":326},[190,9460,9462],{"className":305,"code":9461,"filename":9036,"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,9463,9464,9482,9500,9518,9522,9554,9558,9582,9596,9612,9628,9648,9657],{"__ignoreMap":196},[201,9465,9466,9468,9470,9472,9474,9476,9478,9480],{"class":203,"line":204},[201,9467,453],{"class":315},[201,9469,456],{"class":330},[201,9471,459],{"class":326},[201,9473,462],{"class":330},[201,9475,465],{"class":315},[201,9477,390],{"class":330},[201,9479,470],{"class":210},[201,9481,473],{"class":330},[201,9483,9484,9486,9488,9490,9492,9494,9496,9498],{"class":203,"line":334},[201,9485,453],{"class":315},[201,9487,456],{"class":330},[201,9489,3821],{"class":326},[201,9491,462],{"class":330},[201,9493,465],{"class":315},[201,9495,390],{"class":330},[201,9497,3830],{"class":210},[201,9499,473],{"class":330},[201,9501,9502,9504,9506,9508,9510,9512,9514,9516],{"class":203,"line":361},[201,9503,453],{"class":315},[201,9505,456],{"class":330},[201,9507,6821],{"class":326},[201,9509,462],{"class":330},[201,9511,465],{"class":315},[201,9513,390],{"class":330},[201,9515,6830],{"class":210},[201,9517,473],{"class":330},[201,9519,9520],{"class":203,"line":372},[201,9521,479],{"emptyLinePlaceholder":478},[201,9523,9524,9526,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552],{"class":203,"line":382},[201,9525,3597],{"class":486},[201,9527,6843],{"class":326},[201,9529,611],{"class":330},[201,9531,6821],{"class":322},[201,9533,327],{"class":326},[201,9535,671],{"class":330},[201,9537,6861],{"class":337},[201,9539,341],{"class":330},[201,9541,456],{"class":330},[201,9543,6868],{"class":337},[201,9545,341],{"class":330},[201,9547,8403],{"class":3249},[201,9549,462],{"class":330},[201,9551,462],{"class":330},[201,9553,418],{"class":326},[201,9555,9556],{"class":203,"line":400},[201,9557,479],{"emptyLinePlaceholder":478},[201,9559,9560,9562,9564,9566,9568,9570,9572,9574,9576,9578,9580],{"class":203,"line":406},[201,9561,316],{"class":315},[201,9563,487],{"class":486},[201,9565,456],{"class":330},[201,9567,492],{"class":326},[201,9569,495],{"class":330},[201,9571,9075],{"class":326},[201,9573,415],{"class":330},[201,9575,513],{"class":330},[201,9577,459],{"class":322},[201,9579,327],{"class":326},[201,9581,331],{"class":330},[201,9583,9584,9586,9588,9590,9592,9594],{"class":203,"line":412},[201,9585,524],{"class":337},[201,9587,341],{"class":330},[201,9589,390],{"class":330},[201,9591,393],{"class":210},[201,9593,347],{"class":330},[201,9595,358],{"class":330},[201,9597,9598,9600,9602,9604,9606,9608,9610],{"class":203,"line":930},[201,9599,3974],{"class":337},[201,9601,341],{"class":330},[201,9603,6891],{"class":322},[201,9605,327],{"class":326},[201,9607,6896],{"class":322},[201,9609,327],{"class":326},[201,9611,331],{"class":330},[201,9613,9614,9617,9619,9621,9624,9626],{"class":203,"line":1266},[201,9615,9616],{"class":337},"    dataset",[201,9618,341],{"class":330},[201,9620,390],{"class":330},[201,9622,9623],{"class":210},"logs",[201,9625,347],{"class":330},[201,9627,358],{"class":330},[201,9629,9630,9633,9635,9637,9639,9641,9643,9645],{"class":203,"line":1276},[201,9631,9632],{"class":337},"    token",[201,9634,341],{"class":330},[201,9636,4030],{"class":326},[201,9638,663],{"class":330},[201,9640,1521],{"class":326},[201,9642,663],{"class":330},[201,9644,9407],{"class":326},[201,9646,9647],{"class":330},"!,\n",[201,9649,9650,9652,9655],{"class":203,"line":1286},[201,9651,5202],{"class":330},[201,9653,9654],{"class":326},"))",[201,9656,358],{"class":330},[201,9658,9659,9661],{"class":203,"line":1292},[201,9660,415],{"class":330},[201,9662,418],{"class":326},[178,9664,9665,9666,9668],{},"The hook receives a ",[198,9667,6852],{}," with:",[3399,9670,9671,9680,9691],{},[3402,9672,9673,9675,9676,9679],{},[198,9674,2082],{},": The complete ",[198,9677,9678],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[3402,9681,9682,9684,9685,425,9687,425,9689,632],{},[198,9683,625],{},": Optional request metadata (",[198,9686,6611],{},[198,9688,6614],{},[198,9690,1073],{},[3402,9692,9693,9696],{},[198,9694,9695],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[936,9698,9699,9702,9703,425,9706,425,9709,425,9712,425,9715,425,9718,9721],{"color":8726,"icon":49},[2410,9700,9701],{},"Security:"," Sensitive headers (",[198,9704,9705],{},"authorization",[198,9707,9708],{},"cookie",[198,9710,9711],{},"set-cookie",[198,9713,9714],{},"x-api-key",[198,9716,9717],{},"x-auth-token",[198,9719,9720],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[734,9723,9725],{"id":9724},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[178,9727,3803,9728,9730],{},[198,9729,9695],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[190,9732,9735],{"className":305,"code":9733,"filename":9734,"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,9736,9737,9757,9771,9775,9807,9824,9828,9858,9886,9890,9905,9909,9923,9930,9946,9955,9968,9979,9983,9989,9995],{"__ignoreMap":196},[201,9738,9739,9741,9743,9745,9747,9749,9751,9753,9755],{"class":203,"line":204},[201,9740,316],{"class":315},[201,9742,319],{"class":315},[201,9744,8893],{"class":322},[201,9746,327],{"class":326},[201,9748,327],{"class":330},[201,9750,8900],{"class":624},[201,9752,632],{"class":330},[201,9754,635],{"class":486},[201,9756,369],{"class":330},[201,9758,9759,9761,9764,9766,9769],{"class":203,"line":334},[201,9760,642],{"class":486},[201,9762,9763],{"class":326}," posthog",[201,9765,513],{"class":330},[201,9767,9768],{"class":322}," usePostHog",[201,9770,829],{"class":337},[201,9772,9773],{"class":203,"line":361},[201,9774,479],{"emptyLinePlaceholder":478},[201,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805],{"class":203,"line":372},[201,9778,8911],{"class":326},[201,9780,663],{"class":330},[201,9782,8916],{"class":326},[201,9784,663],{"class":330},[201,9786,8921],{"class":322},[201,9788,327],{"class":337},[201,9790,347],{"class":330},[201,9792,1797],{"class":210},[201,9794,347],{"class":330},[201,9796,495],{"class":330},[201,9798,621],{"class":330},[201,9800,3994],{"class":624},[201,9802,632],{"class":330},[201,9804,635],{"class":486},[201,9806,369],{"class":330},[201,9808,9809,9811,9813,9816,9819,9821],{"class":203,"line":382},[201,9810,4065],{"class":315},[201,9812,621],{"class":337},[201,9814,9815],{"class":330},"!",[201,9817,9818],{"class":326},"posthog",[201,9820,908],{"class":337},[201,9822,9823],{"class":315},"return\n",[201,9825,9826],{"class":203,"line":400},[201,9827,479],{"emptyLinePlaceholder":478},[201,9829,9830,9832,9835,9837,9839,9841,9843,9845,9848,9850,9853,9855],{"class":203,"line":406},[201,9831,3161],{"class":486},[201,9833,9834],{"class":326}," sessionId",[201,9836,513],{"class":330},[201,9838,4080],{"class":326},[201,9840,663],{"class":330},[201,9842,9695],{"class":326},[201,9844,8996],{"class":330},[201,9846,9847],{"class":337},"[",[201,9849,347],{"class":330},[201,9851,9852],{"class":210},"x-posthog-session-id",[201,9854,347],{"class":330},[201,9856,9857],{"class":337},"]\n",[201,9859,9860,9862,9865,9867,9869,9871,9873,9875,9877,9879,9882,9884],{"class":203,"line":412},[201,9861,3161],{"class":486},[201,9863,9864],{"class":326}," distinctId",[201,9866,513],{"class":330},[201,9868,4080],{"class":326},[201,9870,663],{"class":330},[201,9872,9695],{"class":326},[201,9874,8996],{"class":330},[201,9876,9847],{"class":337},[201,9878,347],{"class":330},[201,9880,9881],{"class":210},"x-posthog-distinct-id",[201,9883,347],{"class":330},[201,9885,9857],{"class":337},[201,9887,9888],{"class":203,"line":930},[201,9889,479],{"emptyLinePlaceholder":478},[201,9891,9892,9894,9896,9898,9901,9903],{"class":203,"line":1266},[201,9893,4065],{"class":315},[201,9895,621],{"class":337},[201,9897,9815],{"class":330},[201,9899,9900],{"class":326},"distinctId",[201,9902,908],{"class":337},[201,9904,9823],{"class":315},[201,9906,9907],{"class":203,"line":1276},[201,9908,479],{"emptyLinePlaceholder":478},[201,9910,9911,9914,9916,9919,9921],{"class":203,"line":1286},[201,9912,9913],{"class":326},"    posthog",[201,9915,663],{"class":330},[201,9917,9918],{"class":322},"capture",[201,9920,327],{"class":337},[201,9922,331],{"class":330},[201,9924,9925,9928],{"class":203,"line":1292},[201,9926,9927],{"class":326},"      distinctId",[201,9929,358],{"class":330},[201,9931,9932,9935,9937,9939,9942,9944],{"class":203,"line":2832},[201,9933,9934],{"class":337},"      event",[201,9936,341],{"class":330},[201,9938,390],{"class":330},[201,9940,9941],{"class":210},"server_log",[201,9943,347],{"class":330},[201,9945,358],{"class":330},[201,9947,9948,9951,9953],{"class":203,"line":2858},[201,9949,9950],{"class":337},"      properties",[201,9952,341],{"class":330},[201,9954,369],{"class":330},[201,9956,9957,9960,9962,9964,9966],{"class":203,"line":2864},[201,9958,9959],{"class":330},"        ...",[201,9961,3994],{"class":326},[201,9963,663],{"class":330},[201,9965,2082],{"class":326},[201,9967,358],{"class":330},[201,9969,9970,9973,9975,9977],{"class":203,"line":2869},[201,9971,9972],{"class":337},"        $session_id",[201,9974,341],{"class":330},[201,9976,9834],{"class":326},[201,9978,358],{"class":330},[201,9980,9981],{"class":203,"line":2874},[201,9982,2861],{"class":330},[201,9984,9985,9987],{"class":203,"line":3351},[201,9986,1997],{"class":330},[201,9988,418],{"class":337},[201,9990,9991,9993],{"class":203,"line":3360},[201,9992,5202],{"class":330},[201,9994,418],{"class":337},[201,9996,9997,9999],{"class":203,"line":3366},[201,9998,415],{"class":330},[201,10000,418],{"class":326},[259,10002,10004],{"id":10003},"event-enrichment","Event Enrichment",[178,10006,10007],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[187,10009,10010,10214],{},[190,10011,10014],{"className":305,"code":10012,"filename":10013,"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,10015,10016,10022,10029,10036,10043,10050,10062,10066,10086,10097,10106,10115,10124,10133,10138,10142,10174,10202,10208],{"__ignoreMap":196},[201,10017,10018,10020],{"class":203,"line":204},[201,10019,453],{"class":315},[201,10021,369],{"class":330},[201,10023,10024,10027],{"class":203,"line":334},[201,10025,10026],{"class":326},"  createUserAgentEnricher",[201,10028,358],{"class":330},[201,10030,10031,10034],{"class":203,"line":361},[201,10032,10033],{"class":326},"  createGeoEnricher",[201,10035,358],{"class":330},[201,10037,10038,10041],{"class":203,"line":372},[201,10039,10040],{"class":326},"  createRequestSizeEnricher",[201,10042,358],{"class":330},[201,10044,10045,10048],{"class":203,"line":382},[201,10046,10047],{"class":326},"  createTraceContextEnricher",[201,10049,358],{"class":330},[201,10051,10052,10054,10056,10058,10060],{"class":203,"line":400},[201,10053,415],{"class":330},[201,10055,465],{"class":315},[201,10057,390],{"class":330},[201,10059,3850],{"class":210},[201,10061,473],{"class":330},[201,10063,10064],{"class":203,"line":406},[201,10065,479],{"emptyLinePlaceholder":478},[201,10067,10068,10070,10072,10074,10076,10078,10080,10082,10084],{"class":203,"line":412},[201,10069,316],{"class":315},[201,10071,319],{"class":315},[201,10073,8893],{"class":322},[201,10075,327],{"class":326},[201,10077,327],{"class":330},[201,10079,8900],{"class":624},[201,10081,632],{"class":330},[201,10083,635],{"class":486},[201,10085,369],{"class":330},[201,10087,10088,10090,10093,10095],{"class":203,"line":930},[201,10089,642],{"class":486},[201,10091,10092],{"class":326}," enrichers",[201,10094,513],{"class":330},[201,10096,1960],{"class":337},[201,10098,10099,10102,10104],{"class":203,"line":1266},[201,10100,10101],{"class":322},"    createUserAgentEnricher",[201,10103,1350],{"class":337},[201,10105,358],{"class":330},[201,10107,10108,10111,10113],{"class":203,"line":1276},[201,10109,10110],{"class":322},"    createGeoEnricher",[201,10112,1350],{"class":337},[201,10114,358],{"class":330},[201,10116,10117,10120,10122],{"class":203,"line":1286},[201,10118,10119],{"class":322},"    createRequestSizeEnricher",[201,10121,1350],{"class":337},[201,10123,358],{"class":330},[201,10125,10126,10129,10131],{"class":203,"line":1292},[201,10127,10128],{"class":322},"    createTraceContextEnricher",[201,10130,1350],{"class":337},[201,10132,358],{"class":330},[201,10134,10135],{"class":203,"line":2832},[201,10136,10137],{"class":337},"  ]\n",[201,10139,10140],{"class":203,"line":2858},[201,10141,479],{"emptyLinePlaceholder":478},[201,10143,10144,10146,10148,10150,10152,10154,10156,10158,10160,10162,10164,10166,10168,10170,10172],{"class":203,"line":2864},[201,10145,8911],{"class":326},[201,10147,663],{"class":330},[201,10149,8916],{"class":326},[201,10151,663],{"class":330},[201,10153,8921],{"class":322},[201,10155,327],{"class":337},[201,10157,347],{"class":330},[201,10159,1813],{"class":210},[201,10161,347],{"class":330},[201,10163,495],{"class":330},[201,10165,621],{"class":330},[201,10167,3994],{"class":624},[201,10169,632],{"class":330},[201,10171,635],{"class":486},[201,10173,369],{"class":330},[201,10175,10176,10179,10181,10183,10186,10189,10191,10193,10196,10198,10200],{"class":203,"line":2869},[201,10177,10178],{"class":315},"    for",[201,10180,621],{"class":337},[201,10182,3597],{"class":486},[201,10184,10185],{"class":326}," enricher",[201,10187,10188],{"class":330}," of",[201,10190,10092],{"class":326},[201,10192,908],{"class":337},[201,10194,10195],{"class":322},"enricher",[201,10197,327],{"class":337},[201,10199,3994],{"class":326},[201,10201,418],{"class":337},[201,10203,10204,10206],{"class":203,"line":2874},[201,10205,5202],{"class":330},[201,10207,418],{"class":337},[201,10209,10210,10212],{"class":203,"line":3351},[201,10211,415],{"class":330},[201,10213,418],{"class":326},[190,10215,10217],{"className":305,"code":10216,"filename":9036,"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,10218,10219,10237,10260,10264,10287,10291,10315,10329,10345,10369,10395,10399],{"__ignoreMap":196},[201,10220,10221,10223,10225,10227,10229,10231,10233,10235],{"class":203,"line":204},[201,10222,453],{"class":315},[201,10224,456],{"class":330},[201,10226,459],{"class":326},[201,10228,462],{"class":330},[201,10230,465],{"class":315},[201,10232,390],{"class":330},[201,10234,470],{"class":210},[201,10236,473],{"class":330},[201,10238,10239,10241,10243,10245,10247,10250,10252,10254,10256,10258],{"class":203,"line":334},[201,10240,453],{"class":315},[201,10242,456],{"class":330},[201,10244,3841],{"class":326},[201,10246,495],{"class":330},[201,10248,10249],{"class":326}," createGeoEnricher",[201,10251,462],{"class":330},[201,10253,465],{"class":315},[201,10255,390],{"class":330},[201,10257,3850],{"class":210},[201,10259,473],{"class":330},[201,10261,10262],{"class":203,"line":361},[201,10263,479],{"emptyLinePlaceholder":478},[201,10265,10266,10268,10271,10273,10275,10278,10280,10282,10284],{"class":203,"line":372},[201,10267,3597],{"class":486},[201,10269,10270],{"class":326}," enrichers ",[201,10272,611],{"class":330},[201,10274,344],{"class":326},[201,10276,10277],{"class":322},"createUserAgentEnricher",[201,10279,1350],{"class":326},[201,10281,495],{"class":330},[201,10283,10249],{"class":322},[201,10285,10286],{"class":326},"()]\n",[201,10288,10289],{"class":203,"line":382},[201,10290,479],{"emptyLinePlaceholder":478},[201,10292,10293,10295,10297,10299,10301,10303,10305,10307,10309,10311,10313],{"class":203,"line":400},[201,10294,316],{"class":315},[201,10296,487],{"class":486},[201,10298,456],{"class":330},[201,10300,492],{"class":326},[201,10302,495],{"class":330},[201,10304,9075],{"class":326},[201,10306,415],{"class":330},[201,10308,513],{"class":330},[201,10310,459],{"class":322},[201,10312,327],{"class":326},[201,10314,331],{"class":330},[201,10316,10317,10319,10321,10323,10325,10327],{"class":203,"line":406},[201,10318,524],{"class":337},[201,10320,341],{"class":330},[201,10322,390],{"class":330},[201,10324,393],{"class":210},[201,10326,347],{"class":330},[201,10328,358],{"class":330},[201,10330,10331,10333,10335,10337,10339,10341,10343],{"class":203,"line":412},[201,10332,3987],{"class":322},[201,10334,341],{"class":330},[201,10336,621],{"class":330},[201,10338,3994],{"class":624},[201,10340,632],{"class":330},[201,10342,635],{"class":486},[201,10344,369],{"class":330},[201,10346,10347,10349,10351,10353,10355,10357,10359,10361,10363,10365,10367],{"class":203,"line":930},[201,10348,10178],{"class":315},[201,10350,621],{"class":337},[201,10352,3597],{"class":486},[201,10354,10185],{"class":326},[201,10356,10188],{"class":330},[201,10358,10092],{"class":326},[201,10360,908],{"class":337},[201,10362,10195],{"class":322},[201,10364,327],{"class":337},[201,10366,3994],{"class":326},[201,10368,418],{"class":337},[201,10370,10371,10373,10375,10377,10379,10382,10384,10386,10388,10390,10392],{"class":203,"line":1266},[201,10372,4016],{"class":326},[201,10374,663],{"class":330},[201,10376,2082],{"class":326},[201,10378,663],{"class":330},[201,10380,10381],{"class":326},"deploymentId",[201,10383,513],{"class":330},[201,10385,4030],{"class":326},[201,10387,663],{"class":330},[201,10389,1521],{"class":326},[201,10391,663],{"class":330},[201,10393,10394],{"class":326},"VERCEL_DEPLOYMENT_ID\n",[201,10396,10397],{"class":203,"line":1276},[201,10398,409],{"class":330},[201,10400,10401,10403],{"class":203,"line":1286},[201,10402,415],{"class":330},[201,10404,418],{"class":326},[1433,10406,10407,10419],{},[1436,10408,10409],{},[1439,10410,10411,10414,10417],{},[1442,10412,10413],{},"Enricher",[1442,10415,10416],{},"Event Field",[1442,10418,1453],{},[1455,10420,10421,10436,10451,10466],{},[1439,10422,10423,10428,10433],{},[1460,10424,10425],{},[198,10426,10427],{},"createUserAgentEnricher()",[1460,10429,10430],{},[198,10431,10432],{},"userAgent",[1460,10434,10435],{},"Browser, OS, device type from User-Agent header",[1439,10437,10438,10443,10448],{},[1460,10439,10440],{},[198,10441,10442],{},"createGeoEnricher()",[1460,10444,10445],{},[198,10446,10447],{},"geo",[1460,10449,10450],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[1439,10452,10453,10458,10463],{},[1460,10454,10455],{},[198,10456,10457],{},"createRequestSizeEnricher()",[1460,10459,10460],{},[198,10461,10462],{},"requestSize",[1460,10464,10465],{},"Request/response payload sizes from Content-Length",[1439,10467,10468,10473,10478],{},[1460,10469,10470],{},[198,10471,10472],{},"createTraceContextEnricher()",[1460,10474,10475],{},[198,10476,10477],{},"traceContext",[1460,10479,10480],{},"W3C trace context (traceId, spanId) from traceparent header",[178,10482,10483],{},"You can also write custom enrichers to add any derived context:",[190,10485,10488],{"className":305,"code":10486,"filename":10487,"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,10489,10490,10510,10542,10567,10573],{"__ignoreMap":196},[201,10491,10492,10494,10496,10498,10500,10502,10504,10506,10508],{"class":203,"line":204},[201,10493,316],{"class":315},[201,10495,319],{"class":315},[201,10497,8893],{"class":322},[201,10499,327],{"class":326},[201,10501,327],{"class":330},[201,10503,8900],{"class":624},[201,10505,632],{"class":330},[201,10507,635],{"class":486},[201,10509,369],{"class":330},[201,10511,10512,10514,10516,10518,10520,10522,10524,10526,10528,10530,10532,10534,10536,10538,10540],{"class":203,"line":334},[201,10513,8911],{"class":326},[201,10515,663],{"class":330},[201,10517,8916],{"class":326},[201,10519,663],{"class":330},[201,10521,8921],{"class":322},[201,10523,327],{"class":337},[201,10525,347],{"class":330},[201,10527,1813],{"class":210},[201,10529,347],{"class":330},[201,10531,495],{"class":330},[201,10533,621],{"class":330},[201,10535,3994],{"class":624},[201,10537,632],{"class":330},[201,10539,635],{"class":486},[201,10541,369],{"class":330},[201,10543,10544,10546,10548,10550,10552,10554,10556,10558,10560,10562,10564],{"class":203,"line":361},[201,10545,4016],{"class":326},[201,10547,663],{"class":330},[201,10549,2082],{"class":326},[201,10551,663],{"class":330},[201,10553,10381],{"class":326},[201,10555,513],{"class":330},[201,10557,4030],{"class":326},[201,10559,663],{"class":330},[201,10561,1521],{"class":326},[201,10563,663],{"class":330},[201,10565,10566],{"class":326},"DEPLOYMENT_ID\n",[201,10568,10569,10571],{"class":203,"line":372},[201,10570,5202],{"class":330},[201,10572,418],{"class":337},[201,10574,10575,10577],{"class":203,"line":382},[201,10576,415],{"class":330},[201,10578,418],{"class":326},[178,10580,4127,10581,10584],{},[289,10582,10583],{"href":111},"Enrichers guide"," for full documentation.",[182,10586,7369],{"id":10587},"client-transport",[178,10589,10590,10591,425,10594,10597],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[198,10592,10593],{},"log.info()",[198,10595,10596],{},"log.error()",", etc. calls are automatically sent to the server.",[187,10599,10600,10697],{},[190,10601,10604],{"className":305,"code":10602,"filename":10603,"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,10605,10606,10618,10636,10644,10653,10664,10683,10687,10691],{"__ignoreMap":196},[201,10607,10608,10610,10612,10614,10616],{"class":203,"line":204},[201,10609,316],{"class":315},[201,10611,319],{"class":315},[201,10613,323],{"class":322},[201,10615,327],{"class":326},[201,10617,331],{"class":330},[201,10619,10620,10622,10624,10626,10628,10630,10632,10634],{"class":203,"line":334},[201,10621,338],{"class":337},[201,10623,341],{"class":330},[201,10625,344],{"class":326},[201,10627,347],{"class":330},[201,10629,350],{"class":210},[201,10631,347],{"class":330},[201,10633,355],{"class":326},[201,10635,358],{"class":330},[201,10637,10638,10640,10642],{"class":203,"line":361},[201,10639,364],{"class":337},[201,10641,341],{"class":330},[201,10643,369],{"class":330},[201,10645,10646,10649,10651],{"class":203,"line":372},[201,10647,10648],{"class":337},"    transport",[201,10650,341],{"class":330},[201,10652,369],{"class":330},[201,10654,10655,10658,10660,10662],{"class":203,"line":382},[201,10656,10657],{"class":337},"      enabled",[201,10659,341],{"class":330},[201,10661,722],{"class":721},[201,10663,358],{"class":330},[201,10665,10666,10669,10671,10673,10676,10678,10680],{"class":203,"line":400},[201,10667,10668],{"class":337},"      endpoint",[201,10670,341],{"class":330},[201,10672,390],{"class":330},[201,10674,10675],{"class":210},"/api/_evlog/ingest",[201,10677,347],{"class":330},[201,10679,495],{"class":330},[201,10681,10682],{"class":654},"  // default\n",[201,10684,10685],{"class":203,"line":406},[201,10686,403],{"class":330},[201,10688,10689],{"class":203,"line":412},[201,10690,409],{"class":330},[201,10692,10693,10695],{"class":203,"line":930},[201,10694,415],{"class":330},[201,10696,418],{"class":326},[190,10698,10700],{"className":1100,"code":1101,"filename":10699,"language":1103,"meta":196,"style":196},"app/layout.tsx (Next.js)",[198,10701,10702,10720,10724,10756,10762,10780,10788,10816,10824,10832,10840,10848,10852],{"__ignoreMap":196},[201,10703,10704,10706,10708,10710,10712,10714,10716,10718],{"class":203,"line":204},[201,10705,453],{"class":315},[201,10707,456],{"class":330},[201,10709,1114],{"class":326},[201,10711,462],{"class":330},[201,10713,465],{"class":315},[201,10715,390],{"class":330},[201,10717,1123],{"class":210},[201,10719,473],{"class":330},[201,10721,10722],{"class":203,"line":334},[201,10723,479],{"emptyLinePlaceholder":478},[201,10725,10726,10728,10730,10732,10734,10736,10738,10740,10742,10744,10746,10748,10750,10752,10754],{"class":203,"line":361},[201,10727,316],{"class":315},[201,10729,319],{"class":315},[201,10731,1138],{"class":486},[201,10733,1141],{"class":322},[201,10735,1144],{"class":330},[201,10737,1147],{"class":624},[201,10739,1150],{"class":330},[201,10741,456],{"class":330},[201,10743,1147],{"class":337},[201,10745,341],{"class":330},[201,10747,1159],{"class":207},[201,10749,663],{"class":330},[201,10751,1164],{"class":207},[201,10753,1167],{"class":330},[201,10755,369],{"class":330},[201,10757,10758,10760],{"class":203,"line":372},[201,10759,701],{"class":315},[201,10761,1176],{"class":337},[201,10763,10764,10766,10768,10770,10772,10774,10776,10778],{"class":203,"line":382},[201,10765,1181],{"class":330},[201,10767,1184],{"class":337},[201,10769,1187],{"class":486},[201,10771,611],{"class":330},[201,10773,1192],{"class":330},[201,10775,1195],{"class":210},[201,10777,1192],{"class":330},[201,10779,1200],{"class":330},[201,10781,10782,10784,10786],{"class":203,"line":400},[201,10783,1205],{"class":330},[201,10785,1208],{"class":337},[201,10787,1200],{"class":330},[201,10789,10790,10792,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814],{"class":203,"line":406},[201,10791,1215],{"class":330},[201,10793,1097],{"class":207},[201,10795,1220],{"class":486},[201,10797,611],{"class":330},[201,10799,1192],{"class":330},[201,10801,393],{"class":210},[201,10803,1192],{"class":330},[201,10805,1231],{"class":486},[201,10807,1234],{"class":330},[201,10809,1237],{"class":337},[201,10811,341],{"class":330},[201,10813,722],{"class":721},[201,10815,1244],{"class":330},[201,10817,10818,10820,10822],{"class":203,"line":412},[201,10819,1249],{"class":330},[201,10821,1252],{"class":326},[201,10823,1064],{"class":330},[201,10825,10826,10828,10830],{"class":203,"line":930},[201,10827,1259],{"class":330},[201,10829,1097],{"class":207},[201,10831,1200],{"class":330},[201,10833,10834,10836,10838],{"class":203,"line":1266},[201,10835,1269],{"class":330},[201,10837,1208],{"class":337},[201,10839,1200],{"class":330},[201,10841,10842,10844,10846],{"class":203,"line":1276},[201,10843,1279],{"class":330},[201,10845,1184],{"class":337},[201,10847,1200],{"class":330},[201,10849,10850],{"class":203,"line":1286},[201,10851,1289],{"class":337},[201,10853,10854],{"class":203,"line":1292},[201,10855,1064],{"class":330},[734,10857,10859],{"id":10858},"how-it-works","How it works",[10861,10862,10863,10869,10875,10878,10886],"ol",{},[3402,10864,10865,10866],{},"Client calls ",[198,10867,10868],{},"log.info({ action: 'click', button: 'submit' })",[3402,10870,10871,10872,10874],{},"Log is sent to ",[198,10873,10675],{}," via POST",[3402,10876,10877],{},"Server enriches with environment context (service, version, region, etc.)",[3402,10879,10880,10882,10883],{},[198,10881,1797],{}," hook is called with ",[198,10884,10885],{},"source: 'client'",[3402,10887,10888],{},"External services receive the log (Axiom, Loki, etc.)",[936,10890,10891,10892,425,10894,10897,10898,10901],{"color":938,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[198,10893,1464],{},[198,10895,10896],{},"environment",", or ",[198,10899,10900],{},"version"," from the client.",[178,10903,10904,10905,10907],{},"In your drain hook, you can identify client logs by the ",[198,10906,10885],{}," field:",[190,10909,10912],{"className":305,"code":10910,"filename":10911,"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,10913,10914,10934,10968,10998,11026,11030,11036],{"__ignoreMap":196},[201,10915,10916,10918,10920,10922,10924,10926,10928,10930,10932],{"class":203,"line":204},[201,10917,316],{"class":315},[201,10919,319],{"class":315},[201,10921,8893],{"class":322},[201,10923,327],{"class":326},[201,10925,327],{"class":330},[201,10927,8900],{"class":624},[201,10929,632],{"class":330},[201,10931,635],{"class":486},[201,10933,369],{"class":330},[201,10935,10936,10938,10940,10942,10944,10946,10948,10950,10952,10954,10956,10958,10960,10962,10964,10966],{"class":203,"line":334},[201,10937,8911],{"class":326},[201,10939,663],{"class":330},[201,10941,8916],{"class":326},[201,10943,663],{"class":330},[201,10945,8921],{"class":322},[201,10947,327],{"class":337},[201,10949,347],{"class":330},[201,10951,1797],{"class":210},[201,10953,347],{"class":330},[201,10955,495],{"class":330},[201,10957,2725],{"class":486},[201,10959,621],{"class":330},[201,10961,3994],{"class":624},[201,10963,632],{"class":330},[201,10965,635],{"class":486},[201,10967,369],{"class":330},[201,10969,10970,10972,10974,10976,10978,10980,10982,10984,10987,10989,10992,10994,10996],{"class":203,"line":361},[201,10971,4065],{"class":315},[201,10973,621],{"class":337},[201,10975,3994],{"class":326},[201,10977,663],{"class":330},[201,10979,2082],{"class":326},[201,10981,663],{"class":330},[201,10983,6546],{"class":326},[201,10985,10986],{"class":330}," ===",[201,10988,390],{"class":330},[201,10990,10991],{"class":210},"client",[201,10993,347],{"class":330},[201,10995,908],{"class":337},[201,10997,331],{"class":330},[201,10999,11000,11003,11005,11007,11009,11011,11014,11016,11018,11020,11022,11024],{"class":203,"line":372},[201,11001,11002],{"class":326},"      console",[201,11004,663],{"class":330},[201,11006,1300],{"class":322},[201,11008,327],{"class":337},[201,11010,347],{"class":330},[201,11012,11013],{"class":210},"[CLIENT]",[201,11015,347],{"class":330},[201,11017,495],{"class":330},[201,11019,4080],{"class":326},[201,11021,663],{"class":330},[201,11023,2082],{"class":326},[201,11025,418],{"class":337},[201,11027,11028],{"class":203,"line":382},[201,11029,3363],{"class":330},[201,11031,11032,11034],{"class":203,"line":400},[201,11033,5202],{"class":330},[201,11035,418],{"class":337},[201,11037,11038,11040],{"class":203,"line":406},[201,11039,415],{"class":330},[201,11041,418],{"class":326},[259,11043,11045],{"id":11044},"client-identity","Client Identity",[178,11047,11048,11049,11052],{},"Attach user identity to all client logs with ",[198,11050,11051],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[187,11054,11055,11156],{},[190,11056,11059],{"className":305,"code":11057,"filename":11058,"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,11060,11061,11066,11105,11109,11135,11140,11144,11149],{"__ignoreMap":196},[201,11062,11063],{"class":203,"line":204},[201,11064,11065],{"class":654},"// After login\n",[201,11067,11068,11071,11073,11075,11078,11080,11082,11085,11087,11089,11092,11094,11096,11099,11101,11103],{"class":203,"line":334},[201,11069,11070],{"class":322},"setIdentity",[201,11072,327],{"class":326},[201,11074,671],{"class":330},[201,11076,11077],{"class":337}," userId",[201,11079,341],{"class":330},[201,11081,390],{"class":330},[201,11083,11084],{"class":210},"usr_123",[201,11086,347],{"class":330},[201,11088,495],{"class":330},[201,11090,11091],{"class":337}," orgId",[201,11093,341],{"class":330},[201,11095,390],{"class":330},[201,11097,11098],{"class":210},"org_456",[201,11100,347],{"class":330},[201,11102,462],{"class":330},[201,11104,418],{"class":326},[201,11106,11107],{"class":203,"line":361},[201,11108,479],{"emptyLinePlaceholder":478},[201,11110,11111,11113,11115,11117,11119,11121,11123,11125,11127,11129,11131,11133],{"class":203,"line":372},[201,11112,1300],{"class":326},[201,11114,663],{"class":330},[201,11116,938],{"class":322},[201,11118,327],{"class":326},[201,11120,671],{"class":330},[201,11122,844],{"class":337},[201,11124,341],{"class":330},[201,11126,390],{"class":330},[201,11128,851],{"class":210},[201,11130,347],{"class":330},[201,11132,462],{"class":330},[201,11134,418],{"class":326},[201,11136,11137],{"class":203,"line":382},[201,11138,11139],{"class":654},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[201,11141,11142],{"class":203,"line":400},[201,11143,479],{"emptyLinePlaceholder":478},[201,11145,11146],{"class":203,"line":406},[201,11147,11148],{"class":654},"// After logout\n",[201,11150,11151,11154],{"class":203,"line":412},[201,11152,11153],{"class":322},"clearIdentity",[201,11155,829],{"class":326},[190,11157,11159],{"className":305,"code":11158,"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,11160,11161,11189,11193,11197,11231,11235,11261,11265,11269,11273],{"__ignoreMap":196},[201,11162,11163,11165,11167,11170,11172,11175,11177,11179,11181,11183,11185,11187],{"class":203,"line":204},[201,11164,453],{"class":315},[201,11166,456],{"class":330},[201,11168,11169],{"class":326}," setIdentity",[201,11171,495],{"class":330},[201,11173,11174],{"class":326}," clearIdentity",[201,11176,495],{"class":330},[201,11178,503],{"class":326},[201,11180,462],{"class":330},[201,11182,465],{"class":315},[201,11184,390],{"class":330},[201,11186,1123],{"class":210},[201,11188,473],{"class":330},[201,11190,11191],{"class":203,"line":334},[201,11192,479],{"emptyLinePlaceholder":478},[201,11194,11195],{"class":203,"line":361},[201,11196,11065],{"class":654},[201,11198,11199,11201,11203,11205,11207,11209,11211,11213,11215,11217,11219,11221,11223,11225,11227,11229],{"class":203,"line":372},[201,11200,11070],{"class":322},[201,11202,327],{"class":326},[201,11204,671],{"class":330},[201,11206,11077],{"class":337},[201,11208,341],{"class":330},[201,11210,390],{"class":330},[201,11212,11084],{"class":210},[201,11214,347],{"class":330},[201,11216,495],{"class":330},[201,11218,11091],{"class":337},[201,11220,341],{"class":330},[201,11222,390],{"class":330},[201,11224,11098],{"class":210},[201,11226,347],{"class":330},[201,11228,462],{"class":330},[201,11230,418],{"class":326},[201,11232,11233],{"class":203,"line":382},[201,11234,479],{"emptyLinePlaceholder":478},[201,11236,11237,11239,11241,11243,11245,11247,11249,11251,11253,11255,11257,11259],{"class":203,"line":400},[201,11238,1300],{"class":326},[201,11240,663],{"class":330},[201,11242,938],{"class":322},[201,11244,327],{"class":326},[201,11246,671],{"class":330},[201,11248,844],{"class":337},[201,11250,341],{"class":330},[201,11252,390],{"class":330},[201,11254,851],{"class":210},[201,11256,347],{"class":330},[201,11258,462],{"class":330},[201,11260,418],{"class":326},[201,11262,11263],{"class":203,"line":406},[201,11264,11139],{"class":654},[201,11266,11267],{"class":203,"line":412},[201,11268,479],{"emptyLinePlaceholder":478},[201,11270,11271],{"class":203,"line":930},[201,11272,11148],{"class":654},[201,11274,11275,11277],{"class":203,"line":1266},[201,11276,11153],{"class":322},[201,11278,829],{"class":326},[178,11280,11281,11282,949,11284,11286,11287,663],{},"In Nuxt, ",[198,11283,11070],{},[198,11285,11153],{}," are auto-imported. In Next.js, import them from ",[198,11288,1123],{},[178,11290,11291],{},"Per-event fields override identity fields, so you can always pass explicit values:",[190,11293,11295],{"className":305,"code":11294,"language":308,"meta":196,"style":196},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[198,11296,11297,11319,11346],{"__ignoreMap":196},[201,11298,11299,11301,11303,11305,11307,11309,11311,11313,11315,11317],{"class":203,"line":204},[201,11300,11070],{"class":322},[201,11302,327],{"class":326},[201,11304,671],{"class":330},[201,11306,11077],{"class":337},[201,11308,341],{"class":330},[201,11310,390],{"class":330},[201,11312,11084],{"class":210},[201,11314,347],{"class":330},[201,11316,462],{"class":330},[201,11318,418],{"class":326},[201,11320,11321,11323,11325,11327,11329,11331,11333,11335,11337,11340,11342,11344],{"class":203,"line":334},[201,11322,1300],{"class":326},[201,11324,663],{"class":330},[201,11326,938],{"class":322},[201,11328,327],{"class":326},[201,11330,671],{"class":330},[201,11332,11077],{"class":337},[201,11334,341],{"class":330},[201,11336,390],{"class":330},[201,11338,11339],{"class":210},"usr_admin_override",[201,11341,347],{"class":330},[201,11343,462],{"class":330},[201,11345,418],{"class":326},[201,11347,11348],{"class":203,"line":361},[201,11349,11350],{"class":654},"// -> { userId: 'usr_admin_override', ... }\n",[734,11352,11354],{"id":11353},"syncing-identity-with-auth","Syncing identity with auth",[178,11356,11357],{},"Use a global route middleware to automatically sync identity with your auth state:",[190,11359,11362],{"className":305,"code":11360,"filename":11361,"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,11363,11364,11381,11401,11405,11423,11468,11477,11484,11489],{"__ignoreMap":196},[201,11365,11366,11368,11370,11373,11375,11377,11379],{"class":203,"line":204},[201,11367,316],{"class":315},[201,11369,319],{"class":315},[201,11371,11372],{"class":322}," defineNuxtRouteMiddleware",[201,11374,327],{"class":326},[201,11376,1350],{"class":330},[201,11378,635],{"class":486},[201,11380,369],{"class":330},[201,11382,11383,11385,11387,11389,11391,11393,11396,11398],{"class":203,"line":334},[201,11384,642],{"class":486},[201,11386,456],{"class":330},[201,11388,674],{"class":326},[201,11390,462],{"class":330},[201,11392,513],{"class":330},[201,11394,11395],{"class":322}," useAuth",[201,11397,6599],{"class":337},[201,11399,11400],{"class":654},"// better-auth, supabase, clerk, etc.\n",[201,11402,11403],{"class":203,"line":361},[201,11404,479],{"emptyLinePlaceholder":478},[201,11406,11407,11410,11412,11414,11416,11419,11421],{"class":203,"line":372},[201,11408,11409],{"class":315},"  if",[201,11411,621],{"class":337},[201,11413,8960],{"class":326},[201,11415,663],{"class":330},[201,11417,11418],{"class":326},"value",[201,11420,908],{"class":337},[201,11422,331],{"class":330},[201,11424,11425,11428,11430,11432,11434,11436,11438,11440,11442,11444,11446,11448,11451,11453,11455,11457,11459,11461,11464,11466],{"class":203,"line":382},[201,11426,11427],{"class":322},"    setIdentity",[201,11429,327],{"class":337},[201,11431,671],{"class":330},[201,11433,11077],{"class":337},[201,11435,341],{"class":330},[201,11437,674],{"class":326},[201,11439,663],{"class":330},[201,11441,11418],{"class":326},[201,11443,663],{"class":330},[201,11445,6337],{"class":326},[201,11447,495],{"class":330},[201,11449,11450],{"class":337}," email",[201,11452,341],{"class":330},[201,11454,674],{"class":326},[201,11456,663],{"class":330},[201,11458,11418],{"class":326},[201,11460,663],{"class":330},[201,11462,11463],{"class":326},"email",[201,11465,462],{"class":330},[201,11467,418],{"class":337},[201,11469,11470,11472,11475],{"class":203,"line":400},[201,11471,5202],{"class":330},[201,11473,11474],{"class":315}," else",[201,11476,369],{"class":330},[201,11478,11479,11482],{"class":203,"line":406},[201,11480,11481],{"class":322},"    clearIdentity",[201,11483,829],{"class":337},[201,11485,11486],{"class":203,"line":412},[201,11487,11488],{"class":330},"  }\n",[201,11490,11491,11493],{"class":203,"line":930},[201,11492,415],{"class":330},[201,11494,418],{"class":326},[936,11496,11498,11508],{"color":938,"icon":11497},"i-lucide-lightbulb",[178,11499,11500,11503,11504,11507],{},[2410,11501,11502],{},"Tip:"," Use Nuxt's ",[198,11505,11506],{},"$production"," override to sample and suppress browser console output in production while keeping full visibility in development:",[190,11509,11511],{"className":305,"code":11510,"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,11512,11513,11525,11543,11551,11571,11575,11584,11592,11606,11614,11647,11680,11684,11688,11692],{"__ignoreMap":196},[201,11514,11515,11517,11519,11521,11523],{"class":203,"line":204},[201,11516,316],{"class":315},[201,11518,319],{"class":315},[201,11520,323],{"class":322},[201,11522,327],{"class":326},[201,11524,331],{"class":330},[201,11526,11527,11529,11531,11533,11535,11537,11539,11541],{"class":203,"line":334},[201,11528,338],{"class":337},[201,11530,341],{"class":330},[201,11532,344],{"class":326},[201,11534,347],{"class":330},[201,11536,350],{"class":210},[201,11538,347],{"class":330},[201,11540,355],{"class":326},[201,11542,358],{"class":330},[201,11544,11545,11547,11549],{"class":203,"line":361},[201,11546,364],{"class":337},[201,11548,341],{"class":330},[201,11550,369],{"class":330},[201,11552,11553,11555,11557,11559,11561,11563,11565,11567,11569],{"class":203,"line":372},[201,11554,375],{"class":337},[201,11556,341],{"class":330},[201,11558,456],{"class":330},[201,11560,1220],{"class":337},[201,11562,341],{"class":330},[201,11564,390],{"class":330},[201,11566,393],{"class":210},[201,11568,347],{"class":330},[201,11570,1992],{"class":330},[201,11572,11573],{"class":203,"line":382},[201,11574,409],{"class":330},[201,11576,11577,11580,11582],{"class":203,"line":400},[201,11578,11579],{"class":337},"  $production",[201,11581,341],{"class":330},[201,11583,369],{"class":330},[201,11585,11586,11588,11590],{"class":203,"line":406},[201,11587,1965],{"class":337},[201,11589,341],{"class":330},[201,11591,369],{"class":330},[201,11593,11594,11596,11598,11601,11603],{"class":203,"line":412},[201,11595,11002],{"class":337},[201,11597,341],{"class":330},[201,11599,11600],{"class":721}," false",[201,11602,495],{"class":330},[201,11604,11605],{"class":654}," // Suppress browser DevTools console, keep transport\n",[201,11607,11608,11610,11612],{"class":203,"line":930},[201,11609,8530],{"class":337},[201,11611,341],{"class":330},[201,11613,369],{"class":330},[201,11615,11616,11618,11620,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640,11642,11645],{"class":203,"line":1266},[201,11617,8539],{"class":337},[201,11619,341],{"class":330},[201,11621,456],{"class":330},[201,11623,8546],{"class":337},[201,11625,341],{"class":330},[201,11627,6873],{"class":3249},[201,11629,495],{"class":330},[201,11631,8555],{"class":337},[201,11633,341],{"class":330},[201,11635,8403],{"class":3249},[201,11637,495],{"class":330},[201,11639,8564],{"class":337},[201,11641,341],{"class":330},[201,11643,11644],{"class":3249}," 0",[201,11646,1992],{"class":330},[201,11648,11649,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678],{"class":203,"line":1276},[201,11650,11651],{"class":337},"        keep",[201,11653,341],{"class":330},[201,11655,344],{"class":326},[201,11657,671],{"class":330},[201,11659,8799],{"class":337},[201,11661,341],{"class":330},[201,11663,8804],{"class":3249},[201,11665,8807],{"class":330},[201,11667,456],{"class":330},[201,11669,3244],{"class":337},[201,11671,341],{"class":330},[201,11673,8821],{"class":3249},[201,11675,462],{"class":330},[201,11677,355],{"class":326},[201,11679,358],{"class":330},[201,11681,11682],{"class":203,"line":1286},[201,11683,2861],{"class":330},[201,11685,11686],{"class":203,"line":1292},[201,11687,403],{"class":330},[201,11689,11690],{"class":203,"line":2832},[201,11691,409],{"class":330},[201,11693,11694,11696],{"class":203,"line":2858},[201,11695,415],{"class":330},[201,11697,418],{"class":326},[182,11699,11701],{"id":11700},"typescript-configuration","TypeScript Configuration",[178,11703,11704],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[936,11706,11708],{"color":8726,"icon":11707},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[182,11710,11712],{"id":11711},"next-steps","Next Steps",[3399,11714,11715,11720],{},[3402,11716,11717,11719],{},[289,11718,20],{"href":21}," - Learn the core concepts and start using evlog",[3402,11721,11722,11725],{},[289,11723,11724],{"href":143},"Next.js Example"," - Full Next.js App Router example with enrichers, pipeline, and drain",[11727,11728,11729],"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":11731},[11732,11735,11748,11755,11758,11759],{"id":184,"depth":334,"text":185,"children":11733},[11734],{"id":261,"depth":361,"text":262},{"id":294,"depth":334,"text":295,"children":11736},[11737,11738,11739,11740,11741,11742,11743,11744,11745,11746,11747],{"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":6407,"depth":361,"text":6408},{"id":7122,"depth":334,"text":7123,"children":11749},[11750,11751,11752,11753,11754],{"id":7372,"depth":361,"text":7373},{"id":7777,"depth":361,"text":7778},{"id":8302,"depth":361,"text":7315},{"id":9267,"depth":361,"text":9268},{"id":10003,"depth":361,"text":10004},{"id":10587,"depth":334,"text":7369,"children":11756},[11757],{"id":11044,"depth":361,"text":11045},{"id":11700,"depth":334,"text":11701},{"id":11711,"depth":334,"text":11712},"Install evlog in your Nuxt, Next.js, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[11763],{"label":20,"icon":23,"to":21,"color":1876,"variant":11764},"subtle",{},{"title":15,"icon":18},{"title":173,"description":11760},"NkG_yRL7X2cFyiezB5FpWy_y0xdWoWapYmsMHypufKk",[11770,11772],{"title":10,"path":11,"stem":12,"description":11771,"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":11773,"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.",1772880293005]