[{"data":1,"prerenderedAt":13793},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":181,"-getting-started-installation-surround":13788},[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,171,176],{"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",{"title":172,"path":173,"stem":174,"icon":175},"NestJS","/examples/nestjs","6.examples/7.nestjs","i-simple-icons-nestjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","/examples/sveltekit","6.examples/7.sveltekit","i-simple-icons-svelte",{"id":182,"title":183,"body":184,"description":13779,"extension":13780,"links":13781,"meta":13784,"navigation":13785,"path":16,"seo":13786,"stem":17,"__hash__":13787},"docs/1.getting-started/2.installation.md","Install evlog",{"type":185,"value":186,"toc":13747},"minimark",[187,191,196,268,273,276,295,302,306,310,313,429,444,447,453,551,557,743,748,753,945,968,972,989,1075,1085,1098,1102,1108,1305,1312,1433,1437,1442,1717,1721,1884,1893,1897,1904,2023,2028,2163,2167,2173,2283,2287,2417,2440,2443,2456,2468,2599,2610,2889,2901,2918,3049,3055,3059,3062,3384,3387,3405,3408,3434,3444,3447,3454,3471,3811,3818,4126,4135,4142,4145,4159,4175,4427,4430,4706,4709,4969,4974,4977,4989,5005,5227,5230,5506,5513,5740,5745,5748,5759,5775,6037,6039,6317,6322,6413,6424,6429,6432,6446,6468,6475,6584,6587,6727,6732,6939,6942,7259,7269,7391,7399,7736,7741,7744,7765,7803,7807,7913,7918,8008,8013,8163,8168,8425,8430,8434,8437,8628,8641,8654,8741,8748,8752,8768,9137,9145,9149,9156,9381,9395,9399,9406,9787,9798,9802,9805,10310,10321,10324,10327,10331,10338,10745,10759,10763,10770,10878,10885,10889,10898,11268,11285,11289,11296,11682,11688,11716,11741,11745,11750,12020,12024,12027,12424,12500,12503,12598,12604,12607,12617,12875,12879,12908,12921,12927,13061,13065,13072,13298,13308,13311,13370,13374,13377,13513,13715,13719,13722,13726,13730,13743],[188,189,190],"p",{},"evlog supports multiple environments: Nuxt, Next.js, Nitro, Cloudflare Workers, and standalone TypeScript.",[192,193,195],"h2",{"id":194},"install","Install",[197,198,199,225,240,254],"code-group",{},[200,201,207],"pre",{"className":202,"code":203,"filename":204,"language":205,"meta":206,"style":206},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[208,209,210],"code",{"__ignoreMap":206},[211,212,215,218,222],"span",{"class":213,"line":214},"line",1,[211,216,204],{"class":217},"sBMFI",[211,219,221],{"class":220},"sfazB"," add",[211,223,224],{"class":220}," evlog\n",[200,226,229],{"className":202,"code":227,"filename":228,"language":205,"meta":206,"style":206},"npm install evlog\n","npm",[208,230,231],{"__ignoreMap":206},[211,232,233,235,238],{"class":213,"line":214},[211,234,228],{"class":217},[211,236,237],{"class":220}," install",[211,239,224],{"class":220},[200,241,244],{"className":202,"code":242,"filename":243,"language":205,"meta":206,"style":206},"yarn add evlog\n","yarn",[208,245,246],{"__ignoreMap":206},[211,247,248,250,252],{"class":213,"line":214},[211,249,243],{"class":217},[211,251,221],{"class":220},[211,253,224],{"class":220},[200,255,258],{"className":202,"code":256,"filename":257,"language":205,"meta":206,"style":206},"bun add evlog\n","bun",[208,259,260],{"__ignoreMap":206},[211,261,262,264,266],{"class":213,"line":214},[211,263,257],{"class":217},[211,265,221],{"class":220},[211,267,224],{"class":220},[269,270,272],"h3",{"id":271},"using-agent-skills","Using Agent Skills",[188,274,275],{},"If you use an AI assistant (Claude Code, Cursor, etc.), install the evlog skill for guided setup and code review:",[200,277,280],{"className":202,"code":278,"filename":279,"language":205,"meta":206,"style":206},"npx skills add hugorcd/evlog\n","Terminal",[208,281,282],{"__ignoreMap":206},[211,283,284,287,290,292],{"class":213,"line":214},[211,285,286],{"class":217},"npx",[211,288,289],{"class":220}," skills",[211,291,221],{"class":220},[211,293,294],{"class":220}," hugorcd/evlog\n",[188,296,297,298,301],{},"Your AI assistant can then help you set up evlog, review your logging patterns, and migrate existing code to wide events. See ",[299,300,25],"a",{"href":26}," for details.",[192,303,305],{"id":304},"setup","Setup",[269,307,309],{"id":308},"nuxt","Nuxt",[188,311,312],{},"Add evlog to your Nuxt config:",[200,314,319],{"className":315,"code":316,"filename":317,"language":318,"meta":206,"style":206},"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",[208,320,321,342,369,380,390,408,414,420],{"__ignoreMap":206},[211,322,323,327,330,334,338],{"class":213,"line":214},[211,324,326],{"class":325},"s7zQu","export",[211,328,329],{"class":325}," default",[211,331,333],{"class":332},"s2Zo4"," defineNuxtConfig",[211,335,337],{"class":336},"sTEyZ","(",[211,339,341],{"class":340},"sMK4o","{\n",[211,343,345,349,352,355,358,361,363,366],{"class":213,"line":344},2,[211,346,348],{"class":347},"swJcz","  modules",[211,350,351],{"class":340},":",[211,353,354],{"class":336}," [",[211,356,357],{"class":340},"'",[211,359,360],{"class":220},"evlog/nuxt",[211,362,357],{"class":340},[211,364,365],{"class":336},"]",[211,367,368],{"class":340},",\n",[211,370,372,375,377],{"class":213,"line":371},3,[211,373,374],{"class":347},"  evlog",[211,376,351],{"class":340},[211,378,379],{"class":340}," {\n",[211,381,383,386,388],{"class":213,"line":382},4,[211,384,385],{"class":347},"    env",[211,387,351],{"class":340},[211,389,379],{"class":340},[211,391,393,396,398,401,404,406],{"class":213,"line":392},5,[211,394,395],{"class":347},"      service",[211,397,351],{"class":340},[211,399,400],{"class":340}," '",[211,402,403],{"class":220},"my-app",[211,405,357],{"class":340},[211,407,368],{"class":340},[211,409,411],{"class":213,"line":410},6,[211,412,413],{"class":340},"    },\n",[211,415,417],{"class":213,"line":416},7,[211,418,419],{"class":340},"  },\n",[211,421,423,426],{"class":213,"line":422},8,[211,424,425],{"class":340},"}",[211,427,428],{"class":336},")\n",[188,430,431,432,435,436,439,440,443],{},"That's it. ",[208,433,434],{},"useLogger",", ",[208,437,438],{},"createError",", and ",[208,441,442],{},"parseError"," are auto-imported.",[269,445,142],{"id":446},"nextjs",[188,448,449,450,351],{},"Create a shared evlog instance with ",[208,451,452],{},"createEvlog()",[200,454,457],{"className":315,"code":455,"filename":456,"language":318,"meta":206,"style":206},"import { createEvlog } from 'evlog/next'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib/evlog.ts",[208,458,459,484,490,530,545],{"__ignoreMap":206},[211,460,461,464,467,470,473,476,478,481],{"class":213,"line":214},[211,462,463],{"class":325},"import",[211,465,466],{"class":340}," {",[211,468,469],{"class":336}," createEvlog",[211,471,472],{"class":340}," }",[211,474,475],{"class":325}," from",[211,477,400],{"class":340},[211,479,480],{"class":220},"evlog/next",[211,482,483],{"class":340},"'\n",[211,485,486],{"class":213,"line":344},[211,487,489],{"emptyLinePlaceholder":488},true,"\n",[211,491,492,494,498,500,503,506,509,511,514,516,519,521,524,526,528],{"class":213,"line":371},[211,493,326],{"class":325},[211,495,497],{"class":496},"spNyl"," const",[211,499,466],{"class":340},[211,501,502],{"class":336}," withEvlog",[211,504,505],{"class":340},",",[211,507,508],{"class":336}," useLogger",[211,510,505],{"class":340},[211,512,513],{"class":336}," log",[211,515,505],{"class":340},[211,517,518],{"class":336}," createError ",[211,520,425],{"class":340},[211,522,523],{"class":340}," =",[211,525,469],{"class":332},[211,527,337],{"class":336},[211,529,341],{"class":340},[211,531,532,535,537,539,541,543],{"class":213,"line":382},[211,533,534],{"class":347},"  service",[211,536,351],{"class":340},[211,538,400],{"class":340},[211,540,403],{"class":220},[211,542,357],{"class":340},[211,544,368],{"class":340},[211,546,547,549],{"class":213,"line":392},[211,548,425],{"class":340},[211,550,428],{"class":336},[188,552,553,554,351],{},"Wrap your route handlers with ",[208,555,556],{},"withEvlog()",[200,558,561],{"className":315,"code":559,"filename":560,"language":318,"meta":206,"style":206},"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",[208,562,563,583,606,610,648,666,707,737],{"__ignoreMap":206},[211,564,565,567,569,572,574,576,578,581],{"class":213,"line":214},[211,566,463],{"class":325},[211,568,466],{"class":340},[211,570,571],{"class":336}," NextRequest",[211,573,472],{"class":340},[211,575,475],{"class":325},[211,577,400],{"class":340},[211,579,580],{"class":220},"next/server",[211,582,483],{"class":340},[211,584,585,587,589,591,593,595,597,599,601,604],{"class":213,"line":344},[211,586,463],{"class":325},[211,588,466],{"class":340},[211,590,502],{"class":336},[211,592,505],{"class":340},[211,594,508],{"class":336},[211,596,472],{"class":340},[211,598,475],{"class":325},[211,600,400],{"class":340},[211,602,603],{"class":220},"@/lib/evlog",[211,605,483],{"class":340},[211,607,608],{"class":213,"line":371},[211,609,489],{"emptyLinePlaceholder":488},[211,611,612,614,616,619,622,624,626,629,632,636,638,640,643,646],{"class":213,"line":382},[211,613,326],{"class":325},[211,615,497],{"class":496},[211,617,618],{"class":336}," POST ",[211,620,621],{"class":340},"=",[211,623,502],{"class":332},[211,625,337],{"class":336},[211,627,628],{"class":496},"async",[211,630,631],{"class":340}," (",[211,633,635],{"class":634},"sHdIc","request",[211,637,351],{"class":340},[211,639,571],{"class":217},[211,641,642],{"class":340},")",[211,644,645],{"class":496}," =>",[211,647,379],{"class":340},[211,649,650,653,655,657,659,662],{"class":213,"line":392},[211,651,652],{"class":496},"  const",[211,654,513],{"class":336},[211,656,523],{"class":340},[211,658,508],{"class":332},[211,660,661],{"class":347},"()  ",[211,663,665],{"class":664},"sHwdD","// Zero arguments — AsyncLocalStorage\n",[211,667,668,671,674,677,679,682,685,687,689,692,694,696,699,701,703,705],{"class":213,"line":410},[211,669,670],{"class":336},"  log",[211,672,673],{"class":340},".",[211,675,676],{"class":332},"set",[211,678,337],{"class":347},[211,680,681],{"class":340},"{",[211,683,684],{"class":347}," user",[211,686,351],{"class":340},[211,688,466],{"class":340},[211,690,691],{"class":347}," id",[211,693,351],{"class":340},[211,695,400],{"class":340},[211,697,698],{"class":220},"123",[211,700,357],{"class":340},[211,702,472],{"class":340},[211,704,472],{"class":340},[211,706,428],{"class":347},[211,708,709,712,715,717,720,722,724,727,729,733,735],{"class":213,"line":416},[211,710,711],{"class":325},"  return",[211,713,714],{"class":336}," Response",[211,716,673],{"class":340},[211,718,719],{"class":332},"json",[211,721,337],{"class":347},[211,723,681],{"class":340},[211,725,726],{"class":347}," success",[211,728,351],{"class":340},[211,730,732],{"class":731},"sfNiH"," true",[211,734,472],{"class":340},[211,736,428],{"class":347},[211,738,739,741],{"class":213,"line":422},[211,740,425],{"class":340},[211,742,428],{"class":336},[744,745,747],"h4",{"id":746},"server-actions","Server Actions",[188,749,750,752],{},[208,751,556],{}," works with server actions — just wrap the function:",[200,754,757],{"className":315,"code":755,"filename":756,"language":318,"meta":206,"style":206},"'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",[208,758,759,768,790,794,827,840,882,923,938],{"__ignoreMap":206},[211,760,761,763,766],{"class":213,"line":214},[211,762,357],{"class":340},[211,764,765],{"class":220},"use server",[211,767,483],{"class":340},[211,769,770,772,774,776,778,780,782,784,786,788],{"class":213,"line":344},[211,771,463],{"class":325},[211,773,466],{"class":340},[211,775,502],{"class":336},[211,777,505],{"class":340},[211,779,508],{"class":336},[211,781,472],{"class":340},[211,783,475],{"class":325},[211,785,400],{"class":340},[211,787,603],{"class":220},[211,789,483],{"class":340},[211,791,792],{"class":213,"line":371},[211,793,489],{"emptyLinePlaceholder":488},[211,795,796,798,800,803,805,807,809,811,813,816,818,821,823,825],{"class":213,"line":382},[211,797,326],{"class":325},[211,799,497],{"class":496},[211,801,802],{"class":336}," checkout ",[211,804,621],{"class":340},[211,806,502],{"class":332},[211,808,337],{"class":336},[211,810,628],{"class":496},[211,812,631],{"class":340},[211,814,815],{"class":634},"formData",[211,817,351],{"class":340},[211,819,820],{"class":217}," FormData",[211,822,642],{"class":340},[211,824,645],{"class":496},[211,826,379],{"class":340},[211,828,829,831,833,835,837],{"class":213,"line":392},[211,830,652],{"class":496},[211,832,513],{"class":336},[211,834,523],{"class":340},[211,836,508],{"class":332},[211,838,839],{"class":347},"()\n",[211,841,842,844,846,848,850,852,855,857,859,862,864,866,869,871,873,876,878,880],{"class":213,"line":410},[211,843,670],{"class":336},[211,845,673],{"class":340},[211,847,676],{"class":332},[211,849,337],{"class":347},[211,851,681],{"class":340},[211,853,854],{"class":347}," action",[211,856,351],{"class":340},[211,858,400],{"class":340},[211,860,861],{"class":220},"checkout",[211,863,357],{"class":340},[211,865,505],{"class":340},[211,867,868],{"class":347}," source",[211,870,351],{"class":340},[211,872,400],{"class":340},[211,874,875],{"class":220},"server-action",[211,877,357],{"class":340},[211,879,472],{"class":340},[211,881,428],{"class":347},[211,883,884,886,888,890,892,894,897,899,902,904,907,909,911,914,916,919,921],{"class":213,"line":416},[211,885,670],{"class":336},[211,887,673],{"class":340},[211,889,676],{"class":332},[211,891,337],{"class":347},[211,893,681],{"class":340},[211,895,896],{"class":347}," item",[211,898,351],{"class":340},[211,900,901],{"class":336}," formData",[211,903,673],{"class":340},[211,905,906],{"class":332},"get",[211,908,337],{"class":347},[211,910,357],{"class":340},[211,912,913],{"class":220},"item",[211,915,357],{"class":340},[211,917,918],{"class":347},") ",[211,920,425],{"class":340},[211,922,428],{"class":347},[211,924,925,927,929,931,933,935],{"class":213,"line":422},[211,926,711],{"class":325},[211,928,466],{"class":340},[211,930,726],{"class":347},[211,932,351],{"class":340},[211,934,732],{"class":731},[211,936,937],{"class":340}," }\n",[211,939,941,943],{"class":213,"line":940},9,[211,942,425],{"class":340},[211,944,428],{"class":336},[946,947,949,950,435,953,955,956,959,960,963,964,967],"callout",{"color":948,"icon":13},"info","When the first argument is not a ",[208,951,952],{},"Request",[208,954,556],{}," still creates a logger but with ",[208,957,958],{},"method: 'UNKNOWN'"," and ",[208,961,962],{},"path: '/'",". Use ",[208,965,966],{},"log.set()"," to add context.",[744,969,971],{"id":970},"middleware","Middleware",[188,973,974,975,978,979,959,982,985,986,988],{},"The optional ",[208,976,977],{},"evlogMiddleware()"," sets ",[208,980,981],{},"x-request-id",[208,983,984],{},"x-evlog-start"," headers so ",[208,987,556],{}," can reuse them for consistent timing and request correlation across the middleware → handler chain.",[200,990,993],{"className":315,"code":991,"filename":992,"language":318,"meta":206,"style":206},"import { evlogMiddleware } from 'evlog/next'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['/api/:path*'],\n}\n","proxy.ts",[208,994,995,1014,1018,1033,1037,1050,1070],{"__ignoreMap":206},[211,996,997,999,1001,1004,1006,1008,1010,1012],{"class":213,"line":214},[211,998,463],{"class":325},[211,1000,466],{"class":340},[211,1002,1003],{"class":336}," evlogMiddleware",[211,1005,472],{"class":340},[211,1007,475],{"class":325},[211,1009,400],{"class":340},[211,1011,480],{"class":220},[211,1013,483],{"class":340},[211,1015,1016],{"class":213,"line":344},[211,1017,489],{"emptyLinePlaceholder":488},[211,1019,1020,1022,1024,1027,1029,1031],{"class":213,"line":371},[211,1021,326],{"class":325},[211,1023,497],{"class":496},[211,1025,1026],{"class":336}," proxy ",[211,1028,621],{"class":340},[211,1030,1003],{"class":332},[211,1032,839],{"class":336},[211,1034,1035],{"class":213,"line":382},[211,1036,489],{"emptyLinePlaceholder":488},[211,1038,1039,1041,1043,1046,1048],{"class":213,"line":392},[211,1040,326],{"class":325},[211,1042,497],{"class":496},[211,1044,1045],{"class":336}," config ",[211,1047,621],{"class":340},[211,1049,379],{"class":340},[211,1051,1052,1055,1057,1059,1061,1064,1066,1068],{"class":213,"line":410},[211,1053,1054],{"class":347},"  matcher",[211,1056,351],{"class":340},[211,1058,354],{"class":336},[211,1060,357],{"class":340},[211,1062,1063],{"class":220},"/api/:path*",[211,1065,357],{"class":340},[211,1067,365],{"class":336},[211,1069,368],{"class":340},[211,1071,1072],{"class":213,"line":416},[211,1073,1074],{"class":340},"}\n",[188,1076,1077,1078,1080,1081,1084],{},"Without the middleware, ",[208,1079,556],{}," generates its own ",[208,1082,1083],{},"requestId"," and measures timing internally.",[946,1086,1087,1088,1091,1092,1094,1095,1097],{"color":948,"icon":13},"Older versions of Next.js use ",[208,1089,1090],{},"middleware.ts"," instead of ",[208,1093,992],{},". The evlog middleware works with both — import from ",[208,1096,480],{}," regardless.",[744,1099,1101],{"id":1100},"client-provider","Client Provider",[188,1103,1104,1105,351],{},"For client-side logging, wrap your root layout with ",[208,1106,1107],{},"EvlogProvider",[200,1109,1114],{"className":1110,"code":1111,"filename":1112,"language":1113,"meta":206,"style":206},"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",[208,1115,1116,1136,1140,1180,1187,1211,1221,1255,1265,1274,1284,1294,1300],{"__ignoreMap":206},[211,1117,1118,1120,1122,1125,1127,1129,1131,1134],{"class":213,"line":214},[211,1119,463],{"class":325},[211,1121,466],{"class":340},[211,1123,1124],{"class":336}," EvlogProvider",[211,1126,472],{"class":340},[211,1128,475],{"class":325},[211,1130,400],{"class":340},[211,1132,1133],{"class":220},"evlog/next/client",[211,1135,483],{"class":340},[211,1137,1138],{"class":213,"line":344},[211,1139,489],{"emptyLinePlaceholder":488},[211,1141,1142,1144,1146,1149,1152,1155,1158,1161,1163,1165,1167,1170,1172,1175,1178],{"class":213,"line":371},[211,1143,326],{"class":325},[211,1145,329],{"class":325},[211,1147,1148],{"class":496}," function",[211,1150,1151],{"class":332}," Layout",[211,1153,1154],{"class":340},"({",[211,1156,1157],{"class":634}," children",[211,1159,1160],{"class":340}," }:",[211,1162,466],{"class":340},[211,1164,1157],{"class":347},[211,1166,351],{"class":340},[211,1168,1169],{"class":217}," React",[211,1171,673],{"class":340},[211,1173,1174],{"class":217},"ReactNode",[211,1176,1177],{"class":340}," })",[211,1179,379],{"class":340},[211,1181,1182,1184],{"class":213,"line":382},[211,1183,711],{"class":325},[211,1185,1186],{"class":347}," (\n",[211,1188,1189,1192,1195,1198,1200,1203,1206,1208],{"class":213,"line":392},[211,1190,1191],{"class":340},"    \u003C",[211,1193,1194],{"class":347},"html",[211,1196,1197],{"class":496}," lang",[211,1199,621],{"class":340},[211,1201,1202],{"class":340},"\"",[211,1204,1205],{"class":220},"en",[211,1207,1202],{"class":340},[211,1209,1210],{"class":340},">\n",[211,1212,1213,1216,1219],{"class":213,"line":410},[211,1214,1215],{"class":340},"      \u003C",[211,1217,1218],{"class":347},"body",[211,1220,1210],{"class":340},[211,1222,1223,1226,1228,1231,1233,1235,1237,1239,1242,1245,1248,1250,1252],{"class":213,"line":416},[211,1224,1225],{"class":340},"        \u003C",[211,1227,1107],{"class":217},[211,1229,1230],{"class":496}," service",[211,1232,621],{"class":340},[211,1234,1202],{"class":340},[211,1236,403],{"class":220},[211,1238,1202],{"class":340},[211,1240,1241],{"class":496}," transport",[211,1243,1244],{"class":340},"={{",[211,1246,1247],{"class":347}," enabled",[211,1249,351],{"class":340},[211,1251,732],{"class":731},[211,1253,1254],{"class":340}," }}>\n",[211,1256,1257,1260,1263],{"class":213,"line":422},[211,1258,1259],{"class":340},"          {",[211,1261,1262],{"class":336},"children",[211,1264,1074],{"class":340},[211,1266,1267,1270,1272],{"class":213,"line":940},[211,1268,1269],{"class":340},"        \u003C/",[211,1271,1107],{"class":217},[211,1273,1210],{"class":340},[211,1275,1277,1280,1282],{"class":213,"line":1276},10,[211,1278,1279],{"class":340},"      \u003C/",[211,1281,1218],{"class":347},[211,1283,1210],{"class":340},[211,1285,1287,1290,1292],{"class":213,"line":1286},11,[211,1288,1289],{"class":340},"    \u003C/",[211,1291,1194],{"class":347},[211,1293,1210],{"class":340},[211,1295,1297],{"class":213,"line":1296},12,[211,1298,1299],{"class":347},"  )\n",[211,1301,1303],{"class":213,"line":1302},13,[211,1304,1074],{"class":340},[188,1306,1307,1308,1311],{},"Then use ",[208,1309,1310],{},"log"," in any client component:",[200,1313,1316],{"className":1110,"code":1314,"filename":1315,"language":1113,"meta":206,"style":206},"'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",[208,1317,1318,1327,1345,1349,1363,1369,1412,1417,1425,1429],{"__ignoreMap":206},[211,1319,1320,1322,1325],{"class":213,"line":214},[211,1321,357],{"class":340},[211,1323,1324],{"class":220},"use client",[211,1326,483],{"class":340},[211,1328,1329,1331,1333,1335,1337,1339,1341,1343],{"class":213,"line":344},[211,1330,463],{"class":325},[211,1332,466],{"class":340},[211,1334,513],{"class":336},[211,1336,472],{"class":340},[211,1338,475],{"class":325},[211,1340,400],{"class":340},[211,1342,1133],{"class":220},[211,1344,483],{"class":340},[211,1346,1347],{"class":213,"line":371},[211,1348,489],{"emptyLinePlaceholder":488},[211,1350,1351,1353,1355,1358,1361],{"class":213,"line":382},[211,1352,326],{"class":325},[211,1354,1148],{"class":496},[211,1356,1357],{"class":332}," CheckoutButton",[211,1359,1360],{"class":340},"()",[211,1362,379],{"class":340},[211,1364,1365,1367],{"class":213,"line":392},[211,1366,711],{"class":325},[211,1368,1186],{"class":347},[211,1370,1371,1373,1376,1379,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1403,1405,1407,1409],{"class":213,"line":410},[211,1372,1191],{"class":340},[211,1374,1375],{"class":347},"button",[211,1377,1378],{"class":496}," onClick",[211,1380,1381],{"class":340},"={()",[211,1383,645],{"class":496},[211,1385,513],{"class":336},[211,1387,673],{"class":340},[211,1389,948],{"class":332},[211,1391,337],{"class":336},[211,1393,681],{"class":340},[211,1395,854],{"class":347},[211,1397,351],{"class":340},[211,1399,400],{"class":340},[211,1401,1402],{"class":220},"checkout_click",[211,1404,357],{"class":340},[211,1406,472],{"class":340},[211,1408,642],{"class":336},[211,1410,1411],{"class":340},"}>\n",[211,1413,1414],{"class":213,"line":416},[211,1415,1416],{"class":336},"      Checkout\n",[211,1418,1419,1421,1423],{"class":213,"line":422},[211,1420,1289],{"class":340},[211,1422,1375],{"class":347},[211,1424,1210],{"class":340},[211,1426,1427],{"class":213,"line":940},[211,1428,1299],{"class":347},[211,1430,1431],{"class":213,"line":1276},[211,1432,1074],{"class":340},[744,1434,1436],{"id":1435},"configuration-reference","Configuration Reference",[188,1438,1439,1440,351],{},"All options for ",[208,1441,452],{},[1443,1444,1445,1464],"table",{},[1446,1447,1448],"thead",{},[1449,1450,1451,1455,1458,1461],"tr",{},[1452,1453,1454],"th",{},"Option",[1452,1456,1457],{},"Type",[1452,1459,1460],{},"Default",[1452,1462,1463],{},"Description",[1465,1466,1467,1488,1508,1525,1543,1563,1582,1601,1619,1638,1657,1676,1699],"tbody",{},[1449,1468,1469,1475,1480,1485],{},[1470,1471,1472],"td",{},[208,1473,1474],{},"service",[1470,1476,1477],{},[208,1478,1479],{},"string",[1470,1481,1482],{},[208,1483,1484],{},"'app'",[1470,1486,1487],{},"Service name shown in logs",[1449,1489,1490,1495,1500,1505],{},[1470,1491,1492],{},[208,1493,1494],{},"enabled",[1470,1496,1497],{},[208,1498,1499],{},"boolean",[1470,1501,1502],{},[208,1503,1504],{},"true",[1470,1506,1507],{},"Globally enable/disable all logging",[1449,1509,1510,1515,1519,1522],{},[1470,1511,1512],{},[208,1513,1514],{},"pretty",[1470,1516,1517],{},[208,1518,1499],{},[1470,1520,1521],{},"Auto",[1470,1523,1524],{},"Pretty print (true in dev, false in prod)",[1449,1526,1527,1532,1537,1540],{},[1470,1528,1529],{},[208,1530,1531],{},"env",[1470,1533,1534],{},[208,1535,1536],{},"Partial\u003CEnvironmentContext>",[1470,1538,1539],{},"Auto-detected",[1470,1541,1542],{},"Environment, version, commitHash, region",[1449,1544,1545,1550,1555,1560],{},[1470,1546,1547],{},[208,1548,1549],{},"sampling.rates",[1470,1551,1552],{},[208,1553,1554],{},"SamplingRates",[1470,1556,1557],{},[208,1558,1559],{},"undefined",[1470,1561,1562],{},"Head sampling rates per level (0-100%)",[1449,1564,1565,1570,1575,1579],{},[1470,1566,1567],{},[208,1568,1569],{},"sampling.keep",[1470,1571,1572],{},[208,1573,1574],{},"TailSamplingCondition[]",[1470,1576,1577],{},[208,1578,1559],{},[1470,1580,1581],{},"Tail sampling conditions (OR logic)",[1449,1583,1584,1589,1594,1598],{},[1470,1585,1586],{},[208,1587,1588],{},"include",[1470,1590,1591],{},[208,1592,1593],{},"string[]",[1470,1595,1596],{},[208,1597,1559],{},[1470,1599,1600],{},"Route patterns to log (glob)",[1449,1602,1603,1608,1612,1616],{},[1470,1604,1605],{},[208,1606,1607],{},"exclude",[1470,1609,1610],{},[208,1611,1593],{},[1470,1613,1614],{},[208,1615,1559],{},[1470,1617,1618],{},"Route patterns to exclude (glob, takes precedence)",[1449,1620,1621,1626,1631,1635],{},[1470,1622,1623],{},[208,1624,1625],{},"routes",[1470,1627,1628],{},[208,1629,1630],{},"Record\u003Cstring, RouteConfig>",[1470,1632,1633],{},[208,1634,1559],{},[1470,1636,1637],{},"Route-specific service names",[1449,1639,1640,1645,1650,1654],{},[1470,1641,1642],{},[208,1643,1644],{},"drain",[1470,1646,1647],{},[208,1648,1649],{},"(ctx: DrainContext) => void",[1470,1651,1652],{},[208,1653,1559],{},[1470,1655,1656],{},"Drain callback for external services",[1449,1658,1659,1664,1669,1673],{},[1470,1660,1661],{},[208,1662,1663],{},"enrich",[1470,1665,1666],{},[208,1667,1668],{},"(ctx: EnrichContext) => void",[1470,1670,1671],{},[208,1672,1559],{},[1470,1674,1675],{},"Enrich callback for derived context",[1449,1677,1678,1683,1688,1692],{},[1470,1679,1680],{},[208,1681,1682],{},"keep",[1470,1684,1685],{},[208,1686,1687],{},"(ctx: TailSamplingContext) => void",[1470,1689,1690],{},[208,1691,1559],{},[1470,1693,1694,1695,1698],{},"Custom tail sampling callback. Set ",[208,1696,1697],{},"ctx.shouldKeep = true"," to force-keep",[1449,1700,1701,1706,1710,1714],{},[1470,1702,1703],{},[208,1704,1705],{},"stringify",[1470,1707,1708],{},[208,1709,1499],{},[1470,1711,1712],{},[208,1713,1504],{},[1470,1715,1716],{},"JSON stringify output (false for raw objects)",[744,1718,1720],{"id":1719},"comparison-with-nuxt","Comparison with Nuxt",[1443,1722,1723,1740],{},[1446,1724,1725],{},[1449,1726,1727,1730,1735],{},[1452,1728,1729],{},"Feature",[1452,1731,1732,1733,642],{},"Nuxt (",[208,1734,360],{},[1452,1736,1737,1738,642],{},"Next.js (",[208,1739,480],{},[1465,1741,1742,1756,1772,1785,1798,1814,1828,1842,1856,1869],{},[1449,1743,1744,1746,1751],{},[1470,1745,305],{},[1470,1747,1748],{},[208,1749,1750],{},"modules: ['evlog/nuxt']",[1470,1752,1753,1755],{},[208,1754,452],{}," factory",[1449,1757,1758,1761,1766],{},[1470,1759,1760],{},"Logger",[1470,1762,1763],{},[208,1764,1765],{},"useLogger(event)",[1470,1767,1768,1771],{},[208,1769,1770],{},"useLogger()"," (zero args)",[1449,1773,1774,1777,1780],{},[1470,1775,1776],{},"Auto-import",[1470,1778,1779],{},"Yes",[1470,1781,1782,1783,642],{},"No (import from ",[208,1784,603],{},[1449,1786,1787,1790,1793],{},[1470,1788,1789],{},"Request scoping",[1470,1791,1792],{},"Nitro hooks",[1470,1794,1795],{},[208,1796,1797],{},"AsyncLocalStorage",[1449,1799,1800,1803,1809],{},[1470,1801,1802],{},"Drain",[1470,1804,1805,1808],{},[208,1806,1807],{},"evlog:drain"," hook",[1470,1810,1811,1813],{},[208,1812,1644],{}," callback",[1449,1815,1816,1819,1824],{},[1470,1817,1818],{},"Enrich",[1470,1820,1821,1808],{},[208,1822,1823],{},"evlog:enrich",[1470,1825,1826,1813],{},[208,1827,1663],{},[1449,1829,1830,1833,1838],{},[1470,1831,1832],{},"Tail sampling (rules)",[1470,1834,1835,1837],{},[208,1836,1569],{}," conditions",[1470,1839,1840,1837],{},[208,1841,1569],{},[1449,1843,1844,1847,1852],{},[1470,1845,1846],{},"Tail sampling (custom)",[1470,1848,1849,1808],{},[208,1850,1851],{},"evlog:emit:keep",[1470,1853,1854,1813],{},[208,1855,1682],{},[1449,1857,1858,1861,1864],{},[1470,1859,1860],{},"Client",[1470,1862,1863],{},"Auto-configured Vue plugin",[1470,1865,1866,1868],{},[208,1867,1107],{}," React component",[1449,1870,1871,1874,1877],{},[1470,1872,1873],{},"Emit",[1470,1875,1876],{},"Automatic (afterResponse hook)",[1470,1878,1879,1880,1883],{},"Automatic (",[208,1881,1882],{},"withEvlog"," wrapper)",[946,1885,1888,1889,1892],{"color":1886,"icon":1887},"neutral","i-lucide-arrow-right","See a full working ",[299,1890,1891],{"href":143},"Next.js example"," with enrichers, pipeline, drain, tail sampling, and client provider.",[269,1894,1896],{"id":1895},"nitro-v3","Nitro v3",[188,1898,1899,1900,1903],{},"Register evlog as a Nitro module using the ",[208,1901,1902],{},"nitro"," package:",[200,1905,1908],{"className":315,"code":1906,"filename":1907,"language":318,"meta":206,"style":206},"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",[208,1909,1910,1929,1946,1950,1962,1971,1980,2003,2010,2017],{"__ignoreMap":206},[211,1911,1912,1914,1916,1919,1921,1923,1925,1927],{"class":213,"line":214},[211,1913,463],{"class":325},[211,1915,466],{"class":340},[211,1917,1918],{"class":336}," defineConfig",[211,1920,472],{"class":340},[211,1922,475],{"class":325},[211,1924,400],{"class":340},[211,1926,1902],{"class":220},[211,1928,483],{"class":340},[211,1930,1931,1933,1936,1939,1941,1944],{"class":213,"line":344},[211,1932,463],{"class":325},[211,1934,1935],{"class":336}," evlog ",[211,1937,1938],{"class":325},"from",[211,1940,400],{"class":340},[211,1942,1943],{"class":220},"evlog/nitro/v3",[211,1945,483],{"class":340},[211,1947,1948],{"class":213,"line":371},[211,1949,489],{"emptyLinePlaceholder":488},[211,1951,1952,1954,1956,1958,1960],{"class":213,"line":382},[211,1953,326],{"class":325},[211,1955,329],{"class":325},[211,1957,1918],{"class":332},[211,1959,337],{"class":336},[211,1961,341],{"class":340},[211,1963,1964,1966,1968],{"class":213,"line":392},[211,1965,348],{"class":347},[211,1967,351],{"class":340},[211,1969,1970],{"class":336}," [\n",[211,1972,1973,1976,1978],{"class":213,"line":410},[211,1974,1975],{"class":332},"    evlog",[211,1977,337],{"class":336},[211,1979,341],{"class":340},[211,1981,1982,1985,1987,1989,1991,1993,1995,1998,2000],{"class":213,"line":416},[211,1983,1984],{"class":347},"      env",[211,1986,351],{"class":340},[211,1988,466],{"class":340},[211,1990,1230],{"class":347},[211,1992,351],{"class":340},[211,1994,400],{"class":340},[211,1996,1997],{"class":220},"my-api",[211,1999,357],{"class":340},[211,2001,2002],{"class":340}," },\n",[211,2004,2005,2008],{"class":213,"line":422},[211,2006,2007],{"class":340},"    }",[211,2009,428],{"class":336},[211,2011,2012,2015],{"class":213,"line":940},[211,2013,2014],{"class":336},"  ]",[211,2016,368],{"class":340},[211,2018,2019,2021],{"class":213,"line":1276},[211,2020,425],{"class":340},[211,2022,428],{"class":336},[188,2024,1307,2025,2027],{},[208,2026,434],{}," in your routes:",[200,2029,2032],{"className":315,"code":2030,"filename":2031,"language":318,"meta":206,"style":206},"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",[208,2033,2034,2054,2072,2076,2099,2115,2142,2157],{"__ignoreMap":206},[211,2035,2036,2038,2040,2043,2045,2047,2049,2052],{"class":213,"line":214},[211,2037,463],{"class":325},[211,2039,466],{"class":340},[211,2041,2042],{"class":336}," defineHandler",[211,2044,472],{"class":340},[211,2046,475],{"class":325},[211,2048,400],{"class":340},[211,2050,2051],{"class":220},"nitro/h3",[211,2053,483],{"class":340},[211,2055,2056,2058,2060,2062,2064,2066,2068,2070],{"class":213,"line":344},[211,2057,463],{"class":325},[211,2059,466],{"class":340},[211,2061,508],{"class":336},[211,2063,472],{"class":340},[211,2065,475],{"class":325},[211,2067,400],{"class":340},[211,2069,1943],{"class":220},[211,2071,483],{"class":340},[211,2073,2074],{"class":213,"line":371},[211,2075,489],{"emptyLinePlaceholder":488},[211,2077,2078,2080,2082,2084,2086,2088,2090,2093,2095,2097],{"class":213,"line":382},[211,2079,326],{"class":325},[211,2081,329],{"class":325},[211,2083,2042],{"class":332},[211,2085,337],{"class":336},[211,2087,628],{"class":496},[211,2089,631],{"class":340},[211,2091,2092],{"class":634},"event",[211,2094,642],{"class":340},[211,2096,645],{"class":496},[211,2098,379],{"class":340},[211,2100,2101,2103,2105,2107,2109,2111,2113],{"class":213,"line":392},[211,2102,652],{"class":496},[211,2104,513],{"class":336},[211,2106,523],{"class":340},[211,2108,508],{"class":332},[211,2110,337],{"class":347},[211,2112,2092],{"class":336},[211,2114,428],{"class":347},[211,2116,2117,2119,2121,2123,2125,2127,2129,2131,2133,2136,2138,2140],{"class":213,"line":410},[211,2118,670],{"class":336},[211,2120,673],{"class":340},[211,2122,676],{"class":332},[211,2124,337],{"class":347},[211,2126,681],{"class":340},[211,2128,854],{"class":347},[211,2130,351],{"class":340},[211,2132,400],{"class":340},[211,2134,2135],{"class":220},"hello",[211,2137,357],{"class":340},[211,2139,472],{"class":340},[211,2141,428],{"class":347},[211,2143,2144,2146,2148,2151,2153,2155],{"class":213,"line":416},[211,2145,711],{"class":325},[211,2147,466],{"class":340},[211,2149,2150],{"class":347}," ok",[211,2152,351],{"class":340},[211,2154,732],{"class":731},[211,2156,937],{"class":340},[211,2158,2159,2161],{"class":213,"line":422},[211,2160,425],{"class":340},[211,2162,428],{"class":336},[269,2164,2166],{"id":2165},"nitro-v2","Nitro v2",[188,2168,2169,2170,351],{},"Same approach with ",[208,2171,2172],{},"nitropack",[200,2174,2176],{"className":315,"code":2175,"filename":1907,"language":318,"meta":206,"style":206},"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",[208,2177,2178,2198,2213,2217,2229,2237,2245,2265,2271,2277],{"__ignoreMap":206},[211,2179,2180,2182,2184,2187,2189,2191,2193,2196],{"class":213,"line":214},[211,2181,463],{"class":325},[211,2183,466],{"class":340},[211,2185,2186],{"class":336}," defineNitroConfig",[211,2188,472],{"class":340},[211,2190,475],{"class":325},[211,2192,400],{"class":340},[211,2194,2195],{"class":220},"nitropack/config",[211,2197,483],{"class":340},[211,2199,2200,2202,2204,2206,2208,2211],{"class":213,"line":344},[211,2201,463],{"class":325},[211,2203,1935],{"class":336},[211,2205,1938],{"class":325},[211,2207,400],{"class":340},[211,2209,2210],{"class":220},"evlog/nitro",[211,2212,483],{"class":340},[211,2214,2215],{"class":213,"line":371},[211,2216,489],{"emptyLinePlaceholder":488},[211,2218,2219,2221,2223,2225,2227],{"class":213,"line":382},[211,2220,326],{"class":325},[211,2222,329],{"class":325},[211,2224,2186],{"class":332},[211,2226,337],{"class":336},[211,2228,341],{"class":340},[211,2230,2231,2233,2235],{"class":213,"line":392},[211,2232,348],{"class":347},[211,2234,351],{"class":340},[211,2236,1970],{"class":336},[211,2238,2239,2241,2243],{"class":213,"line":410},[211,2240,1975],{"class":332},[211,2242,337],{"class":336},[211,2244,341],{"class":340},[211,2246,2247,2249,2251,2253,2255,2257,2259,2261,2263],{"class":213,"line":416},[211,2248,1984],{"class":347},[211,2250,351],{"class":340},[211,2252,466],{"class":340},[211,2254,1230],{"class":347},[211,2256,351],{"class":340},[211,2258,400],{"class":340},[211,2260,1997],{"class":220},[211,2262,357],{"class":340},[211,2264,2002],{"class":340},[211,2266,2267,2269],{"class":213,"line":422},[211,2268,2007],{"class":340},[211,2270,428],{"class":336},[211,2272,2273,2275],{"class":213,"line":940},[211,2274,2014],{"class":336},[211,2276,368],{"class":340},[211,2278,2279,2281],{"class":213,"line":1276},[211,2280,425],{"class":340},[211,2282,428],{"class":336},[188,2284,1307,2285,2027],{},[208,2286,434],{},[200,2288,2290],{"className":315,"code":2289,"filename":2031,"language":318,"meta":206,"style":206},"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",[208,2291,2292,2311,2329,2333,2355,2371,2397,2411],{"__ignoreMap":206},[211,2293,2294,2296,2298,2301,2303,2305,2307,2309],{"class":213,"line":214},[211,2295,463],{"class":325},[211,2297,466],{"class":340},[211,2299,2300],{"class":336}," defineEventHandler",[211,2302,472],{"class":340},[211,2304,475],{"class":325},[211,2306,400],{"class":340},[211,2308,269],{"class":220},[211,2310,483],{"class":340},[211,2312,2313,2315,2317,2319,2321,2323,2325,2327],{"class":213,"line":344},[211,2314,463],{"class":325},[211,2316,466],{"class":340},[211,2318,508],{"class":336},[211,2320,472],{"class":340},[211,2322,475],{"class":325},[211,2324,400],{"class":340},[211,2326,2210],{"class":220},[211,2328,483],{"class":340},[211,2330,2331],{"class":213,"line":371},[211,2332,489],{"emptyLinePlaceholder":488},[211,2334,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353],{"class":213,"line":382},[211,2336,326],{"class":325},[211,2338,329],{"class":325},[211,2340,2300],{"class":332},[211,2342,337],{"class":336},[211,2344,628],{"class":496},[211,2346,631],{"class":340},[211,2348,2092],{"class":634},[211,2350,642],{"class":340},[211,2352,645],{"class":496},[211,2354,379],{"class":340},[211,2356,2357,2359,2361,2363,2365,2367,2369],{"class":213,"line":392},[211,2358,652],{"class":496},[211,2360,513],{"class":336},[211,2362,523],{"class":340},[211,2364,508],{"class":332},[211,2366,337],{"class":347},[211,2368,2092],{"class":336},[211,2370,428],{"class":347},[211,2372,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395],{"class":213,"line":410},[211,2374,670],{"class":336},[211,2376,673],{"class":340},[211,2378,676],{"class":332},[211,2380,337],{"class":347},[211,2382,681],{"class":340},[211,2384,854],{"class":347},[211,2386,351],{"class":340},[211,2388,400],{"class":340},[211,2390,2135],{"class":220},[211,2392,357],{"class":340},[211,2394,472],{"class":340},[211,2396,428],{"class":347},[211,2398,2399,2401,2403,2405,2407,2409],{"class":213,"line":416},[211,2400,711],{"class":325},[211,2402,466],{"class":340},[211,2404,2150],{"class":347},[211,2406,351],{"class":340},[211,2408,732],{"class":731},[211,2410,937],{"class":340},[211,2412,2413,2415],{"class":213,"line":422},[211,2414,425],{"class":340},[211,2416,428],{"class":336},[946,2418,2419,2423,2424,2426,2427,2430,2431,2433,2434,2436,2437,2439],{"color":948,"icon":13},[2420,2421,2422],"strong",{},"Note:"," ",[208,2425,438],{}," is always imported from ",[208,2428,2429],{},"evlog"," regardless of Nitro version. Only the module and ",[208,2432,434],{}," imports differ: ",[208,2435,1943],{}," for v3, ",[208,2438,2210],{}," for v2.",[269,2441,147],{"id":2442},"tanstack-start",[188,2444,2445,2446,2449,2450,2453,2454,351],{},"TanStack Start uses Nitro v3 under the hood. A project created with ",[208,2447,2448],{},"npm create @tanstack/start@latest"," already includes the ",[208,2451,2452],{},"nitro()"," Vite plugin — just install evlog and add a ",[208,2455,1907],{},[200,2457,2458],{"className":202,"code":227,"language":205,"meta":206,"style":206},[208,2459,2460],{"__ignoreMap":206},[211,2461,2462,2464,2466],{"class":213,"line":214},[211,2463,228],{"class":217},[211,2465,237],{"class":220},[211,2467,224],{"class":220},[200,2469,2471],{"className":315,"code":2470,"filename":1907,"language":318,"meta":206,"style":206},"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",[208,2472,2473,2491,2505,2509,2521,2530,2541,2545,2553,2561,2581,2587,2593],{"__ignoreMap":206},[211,2474,2475,2477,2479,2481,2483,2485,2487,2489],{"class":213,"line":214},[211,2476,463],{"class":325},[211,2478,466],{"class":340},[211,2480,1918],{"class":336},[211,2482,472],{"class":340},[211,2484,475],{"class":325},[211,2486,400],{"class":340},[211,2488,1902],{"class":220},[211,2490,483],{"class":340},[211,2492,2493,2495,2497,2499,2501,2503],{"class":213,"line":344},[211,2494,463],{"class":325},[211,2496,1935],{"class":336},[211,2498,1938],{"class":325},[211,2500,400],{"class":340},[211,2502,1943],{"class":220},[211,2504,483],{"class":340},[211,2506,2507],{"class":213,"line":371},[211,2508,489],{"emptyLinePlaceholder":488},[211,2510,2511,2513,2515,2517,2519],{"class":213,"line":382},[211,2512,326],{"class":325},[211,2514,329],{"class":325},[211,2516,1918],{"class":332},[211,2518,337],{"class":336},[211,2520,341],{"class":340},[211,2522,2523,2526,2528],{"class":213,"line":392},[211,2524,2525],{"class":347},"  experimental",[211,2527,351],{"class":340},[211,2529,379],{"class":340},[211,2531,2532,2535,2537,2539],{"class":213,"line":410},[211,2533,2534],{"class":347},"    asyncContext",[211,2536,351],{"class":340},[211,2538,732],{"class":731},[211,2540,368],{"class":340},[211,2542,2543],{"class":213,"line":416},[211,2544,419],{"class":340},[211,2546,2547,2549,2551],{"class":213,"line":422},[211,2548,348],{"class":347},[211,2550,351],{"class":340},[211,2552,1970],{"class":336},[211,2554,2555,2557,2559],{"class":213,"line":940},[211,2556,1975],{"class":332},[211,2558,337],{"class":336},[211,2560,341],{"class":340},[211,2562,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":213,"line":1276},[211,2564,1984],{"class":347},[211,2566,351],{"class":340},[211,2568,466],{"class":340},[211,2570,1230],{"class":347},[211,2572,351],{"class":340},[211,2574,400],{"class":340},[211,2576,403],{"class":220},[211,2578,357],{"class":340},[211,2580,2002],{"class":340},[211,2582,2583,2585],{"class":213,"line":1286},[211,2584,2007],{"class":340},[211,2586,428],{"class":336},[211,2588,2589,2591],{"class":213,"line":1296},[211,2590,2014],{"class":336},[211,2592,368],{"class":340},[211,2594,2595,2597],{"class":213,"line":1302},[211,2596,425],{"class":340},[211,2598,428],{"class":336},[188,2600,2601,2602,2605,2606,2609],{},"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 ",[208,2603,2604],{},"useRequest()"," from ",[208,2607,2608],{},"nitro/context"," to access the request-scoped logger:",[200,2611,2614],{"className":315,"code":2612,"filename":2613,"language":318,"meta":206,"style":206},"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",[208,2615,2616,2636,2655,2677,2681,2708,2717,2726,2743,2757,2782,2786,2836,2840,2866,2872,2877,2882],{"__ignoreMap":206},[211,2617,2618,2620,2622,2625,2627,2629,2631,2634],{"class":213,"line":214},[211,2619,463],{"class":325},[211,2621,466],{"class":340},[211,2623,2624],{"class":336}," createFileRoute",[211,2626,472],{"class":340},[211,2628,475],{"class":325},[211,2630,400],{"class":340},[211,2632,2633],{"class":220},"@tanstack/react-router",[211,2635,483],{"class":340},[211,2637,2638,2640,2642,2645,2647,2649,2651,2653],{"class":213,"line":344},[211,2639,463],{"class":325},[211,2641,466],{"class":340},[211,2643,2644],{"class":336}," useRequest",[211,2646,472],{"class":340},[211,2648,475],{"class":325},[211,2650,400],{"class":340},[211,2652,2608],{"class":220},[211,2654,483],{"class":340},[211,2656,2657,2659,2662,2664,2667,2669,2671,2673,2675],{"class":213,"line":371},[211,2658,463],{"class":325},[211,2660,2661],{"class":325}," type",[211,2663,466],{"class":340},[211,2665,2666],{"class":336}," RequestLogger",[211,2668,472],{"class":340},[211,2670,475],{"class":325},[211,2672,400],{"class":340},[211,2674,2429],{"class":220},[211,2676,483],{"class":340},[211,2678,2679],{"class":213,"line":382},[211,2680,489],{"emptyLinePlaceholder":488},[211,2682,2683,2685,2687,2690,2692,2694,2696,2698,2701,2703,2706],{"class":213,"line":392},[211,2684,326],{"class":325},[211,2686,497],{"class":496},[211,2688,2689],{"class":336}," Route ",[211,2691,621],{"class":340},[211,2693,2624],{"class":332},[211,2695,337],{"class":336},[211,2697,357],{"class":340},[211,2699,2700],{"class":220},"/api/hello",[211,2702,357],{"class":340},[211,2704,2705],{"class":336},")(",[211,2707,341],{"class":340},[211,2709,2710,2713,2715],{"class":213,"line":410},[211,2711,2712],{"class":347},"  server",[211,2714,351],{"class":340},[211,2716,379],{"class":340},[211,2718,2719,2722,2724],{"class":213,"line":416},[211,2720,2721],{"class":347},"    handlers",[211,2723,351],{"class":340},[211,2725,379],{"class":340},[211,2727,2728,2731,2733,2736,2739,2741],{"class":213,"line":422},[211,2729,2730],{"class":332},"      GET",[211,2732,351],{"class":340},[211,2734,2735],{"class":496}," async",[211,2737,2738],{"class":340}," ()",[211,2740,645],{"class":496},[211,2742,379],{"class":340},[211,2744,2745,2748,2751,2753,2755],{"class":213,"line":940},[211,2746,2747],{"class":496},"        const",[211,2749,2750],{"class":336}," req",[211,2752,523],{"class":340},[211,2754,2644],{"class":332},[211,2756,839],{"class":347},[211,2758,2759,2761,2763,2765,2767,2769,2772,2774,2776,2779],{"class":213,"line":1276},[211,2760,2747],{"class":496},[211,2762,513],{"class":336},[211,2764,523],{"class":340},[211,2766,2750],{"class":336},[211,2768,673],{"class":340},[211,2770,2771],{"class":336},"context",[211,2773,673],{"class":340},[211,2775,1310],{"class":336},[211,2777,2778],{"class":325}," as",[211,2780,2781],{"class":217}," RequestLogger\n",[211,2783,2784],{"class":213,"line":1286},[211,2785,489],{"emptyLinePlaceholder":488},[211,2787,2788,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2814,2816,2818,2821,2823,2825,2828,2830,2832,2834],{"class":213,"line":1296},[211,2789,2790],{"class":336},"        log",[211,2792,673],{"class":340},[211,2794,676],{"class":332},[211,2796,337],{"class":347},[211,2798,681],{"class":340},[211,2800,684],{"class":347},[211,2802,351],{"class":340},[211,2804,466],{"class":340},[211,2806,691],{"class":347},[211,2808,351],{"class":340},[211,2810,400],{"class":340},[211,2812,2813],{"class":220},"user_123",[211,2815,357],{"class":340},[211,2817,505],{"class":340},[211,2819,2820],{"class":347}," plan",[211,2822,351],{"class":340},[211,2824,400],{"class":340},[211,2826,2827],{"class":220},"pro",[211,2829,357],{"class":340},[211,2831,472],{"class":340},[211,2833,472],{"class":340},[211,2835,428],{"class":347},[211,2837,2838],{"class":213,"line":1302},[211,2839,489],{"emptyLinePlaceholder":488},[211,2841,2843,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864],{"class":213,"line":2842},14,[211,2844,2845],{"class":325},"        return",[211,2847,714],{"class":336},[211,2849,673],{"class":340},[211,2851,719],{"class":332},[211,2853,337],{"class":347},[211,2855,681],{"class":340},[211,2857,2150],{"class":347},[211,2859,351],{"class":340},[211,2861,732],{"class":731},[211,2863,472],{"class":340},[211,2865,428],{"class":347},[211,2867,2869],{"class":213,"line":2868},15,[211,2870,2871],{"class":340},"      },\n",[211,2873,2875],{"class":213,"line":2874},16,[211,2876,413],{"class":340},[211,2878,2880],{"class":213,"line":2879},17,[211,2881,419],{"class":340},[211,2883,2885,2887],{"class":213,"line":2884},18,[211,2886,425],{"class":340},[211,2888,428],{"class":336},[946,2890,2891,2893,2894,2896,2897,2900],{"color":948,"icon":13},[208,2892,2604],{}," is an experimental Nitro v3 feature that uses ",[208,2895,1797],{}," to access the current request from anywhere in the call stack. It requires ",[208,2898,2899],{},"experimental.asyncContext: true"," and works on Node.js and Bun runtimes.",[188,2902,2903,2904,2907,2908,435,2911,439,2914,2917],{},"For ",[208,2905,2906],{},"throw createError()"," to return structured JSON with ",[208,2909,2910],{},"why",[208,2912,2913],{},"fix",[208,2915,2916],{},"link",", add the error handling middleware to your root route:",[200,2919,2922],{"className":315,"code":2920,"filename":2921,"language":318,"meta":206,"style":206},"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",[208,2923,2924,2943,2963,2982,2986,3002,3010,3034,3038,3043],{"__ignoreMap":206},[211,2925,2926,2928,2930,2933,2935,2937,2939,2941],{"class":213,"line":214},[211,2927,463],{"class":325},[211,2929,466],{"class":340},[211,2931,2932],{"class":336}," createRootRoute",[211,2934,472],{"class":340},[211,2936,475],{"class":325},[211,2938,400],{"class":340},[211,2940,2633],{"class":220},[211,2942,483],{"class":340},[211,2944,2945,2947,2949,2952,2954,2956,2958,2961],{"class":213,"line":344},[211,2946,463],{"class":325},[211,2948,466],{"class":340},[211,2950,2951],{"class":336}," createMiddleware",[211,2953,472],{"class":340},[211,2955,475],{"class":325},[211,2957,400],{"class":340},[211,2959,2960],{"class":220},"@tanstack/react-start",[211,2962,483],{"class":340},[211,2964,2965,2967,2969,2972,2974,2976,2978,2980],{"class":213,"line":371},[211,2966,463],{"class":325},[211,2968,466],{"class":340},[211,2970,2971],{"class":336}," evlogErrorHandler",[211,2973,472],{"class":340},[211,2975,475],{"class":325},[211,2977,400],{"class":340},[211,2979,1943],{"class":220},[211,2981,483],{"class":340},[211,2983,2984],{"class":213,"line":382},[211,2985,489],{"emptyLinePlaceholder":488},[211,2987,2988,2990,2992,2994,2996,2998,3000],{"class":213,"line":392},[211,2989,326],{"class":325},[211,2991,497],{"class":496},[211,2993,2689],{"class":336},[211,2995,621],{"class":340},[211,2997,2932],{"class":332},[211,2999,337],{"class":336},[211,3001,341],{"class":340},[211,3003,3004,3006,3008],{"class":213,"line":410},[211,3005,2712],{"class":347},[211,3007,351],{"class":340},[211,3009,379],{"class":340},[211,3011,3012,3015,3017,3019,3022,3024,3026,3029,3032],{"class":213,"line":416},[211,3013,3014],{"class":347},"    middleware",[211,3016,351],{"class":340},[211,3018,354],{"class":336},[211,3020,3021],{"class":332},"createMiddleware",[211,3023,1360],{"class":336},[211,3025,673],{"class":340},[211,3027,3028],{"class":332},"server",[211,3030,3031],{"class":336},"(evlogErrorHandler)]",[211,3033,368],{"class":340},[211,3035,3036],{"class":213,"line":422},[211,3037,419],{"class":340},[211,3039,3040],{"class":213,"line":940},[211,3041,3042],{"class":664},"  // ... head, shellComponent, etc.\n",[211,3044,3045,3047],{"class":213,"line":1276},[211,3046,425],{"class":340},[211,3048,428],{"class":336},[946,3050,1888,3051,3054],{"color":1886,"icon":1887},[299,3052,3053],{"href":148},"TanStack Start example"," with API routes, structured errors, and wide event logging.",[269,3056,3058],{"id":3057},"cloudflare-workers","Cloudflare Workers",[188,3060,3061],{},"Use the Workers adapter for structured logs and correct platform severity.",[200,3063,3066],{"className":315,"code":3064,"filename":3065,"language":318,"meta":206,"style":206},"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",[208,3067,3068,3093,3097,3106,3128,3134,3138,3146,3167,3184,3188,3195,3224,3265,3293,3301,3317,3336,3359,3368,3374,3379],{"__ignoreMap":206},[211,3069,3070,3072,3074,3077,3079,3082,3084,3086,3088,3091],{"class":213,"line":214},[211,3071,463],{"class":325},[211,3073,466],{"class":340},[211,3075,3076],{"class":336}," initWorkersLogger",[211,3078,505],{"class":340},[211,3080,3081],{"class":336}," createWorkersLogger",[211,3083,472],{"class":340},[211,3085,475],{"class":325},[211,3087,400],{"class":340},[211,3089,3090],{"class":220},"evlog/workers",[211,3092,483],{"class":340},[211,3094,3095],{"class":213,"line":344},[211,3096,489],{"emptyLinePlaceholder":488},[211,3098,3099,3102,3104],{"class":213,"line":371},[211,3100,3101],{"class":332},"initWorkersLogger",[211,3103,337],{"class":336},[211,3105,341],{"class":340},[211,3107,3108,3111,3113,3115,3117,3119,3121,3124,3126],{"class":213,"line":382},[211,3109,3110],{"class":347},"  env",[211,3112,351],{"class":340},[211,3114,466],{"class":340},[211,3116,1230],{"class":347},[211,3118,351],{"class":340},[211,3120,400],{"class":340},[211,3122,3123],{"class":220},"edge-api",[211,3125,357],{"class":340},[211,3127,2002],{"class":340},[211,3129,3130,3132],{"class":213,"line":392},[211,3131,425],{"class":340},[211,3133,428],{"class":336},[211,3135,3136],{"class":213,"line":410},[211,3137,489],{"emptyLinePlaceholder":488},[211,3139,3140,3142,3144],{"class":213,"line":416},[211,3141,326],{"class":325},[211,3143,329],{"class":325},[211,3145,379],{"class":340},[211,3147,3148,3151,3154,3156,3158,3160,3163,3165],{"class":213,"line":422},[211,3149,3150],{"class":496},"  async",[211,3152,3153],{"class":347}," fetch",[211,3155,337],{"class":340},[211,3157,635],{"class":634},[211,3159,351],{"class":340},[211,3161,3162],{"class":217}," Request",[211,3164,642],{"class":340},[211,3166,379],{"class":340},[211,3168,3169,3172,3174,3176,3178,3180,3182],{"class":213,"line":940},[211,3170,3171],{"class":496},"    const",[211,3173,513],{"class":336},[211,3175,523],{"class":340},[211,3177,3081],{"class":332},[211,3179,337],{"class":347},[211,3181,635],{"class":336},[211,3183,428],{"class":347},[211,3185,3186],{"class":213,"line":1276},[211,3187,489],{"emptyLinePlaceholder":488},[211,3189,3190,3193],{"class":213,"line":1286},[211,3191,3192],{"class":325},"    try",[211,3194,379],{"class":340},[211,3196,3197,3200,3202,3204,3206,3208,3211,3213,3215,3218,3220,3222],{"class":213,"line":1296},[211,3198,3199],{"class":336},"      log",[211,3201,673],{"class":340},[211,3203,676],{"class":332},[211,3205,337],{"class":347},[211,3207,681],{"class":340},[211,3209,3210],{"class":347}," route",[211,3212,351],{"class":340},[211,3214,400],{"class":340},[211,3216,3217],{"class":220},"health",[211,3219,357],{"class":340},[211,3221,472],{"class":340},[211,3223,428],{"class":347},[211,3225,3226,3229,3232,3234,3237,3239,3241,3243,3246,3248,3250,3252,3255,3257,3261,3263],{"class":213,"line":1302},[211,3227,3228],{"class":496},"      const",[211,3230,3231],{"class":336}," response",[211,3233,523],{"class":340},[211,3235,3236],{"class":340}," new",[211,3238,714],{"class":332},[211,3240,337],{"class":347},[211,3242,357],{"class":340},[211,3244,3245],{"class":220},"ok",[211,3247,357],{"class":340},[211,3249,505],{"class":340},[211,3251,466],{"class":340},[211,3253,3254],{"class":347}," status",[211,3256,351],{"class":340},[211,3258,3260],{"class":3259},"sbssI"," 200",[211,3262,472],{"class":340},[211,3264,428],{"class":347},[211,3266,3267,3269,3271,3274,3276,3278,3280,3282,3284,3286,3289,3291],{"class":213,"line":2842},[211,3268,3199],{"class":336},[211,3270,673],{"class":340},[211,3272,3273],{"class":332},"emit",[211,3275,337],{"class":347},[211,3277,681],{"class":340},[211,3279,3254],{"class":347},[211,3281,351],{"class":340},[211,3283,3231],{"class":336},[211,3285,673],{"class":340},[211,3287,3288],{"class":336},"status",[211,3290,472],{"class":340},[211,3292,428],{"class":347},[211,3294,3295,3298],{"class":213,"line":2868},[211,3296,3297],{"class":325},"      return",[211,3299,3300],{"class":336}," response\n",[211,3302,3303,3305,3308,3310,3313,3315],{"class":213,"line":2874},[211,3304,2007],{"class":340},[211,3306,3307],{"class":325}," catch",[211,3309,631],{"class":347},[211,3311,3312],{"class":336},"error",[211,3314,918],{"class":347},[211,3316,341],{"class":340},[211,3318,3319,3321,3323,3325,3327,3329,3331,3334],{"class":213,"line":2879},[211,3320,3199],{"class":336},[211,3322,673],{"class":340},[211,3324,3312],{"class":332},[211,3326,337],{"class":347},[211,3328,3312],{"class":336},[211,3330,2778],{"class":325},[211,3332,3333],{"class":217}," Error",[211,3335,428],{"class":347},[211,3337,3338,3340,3342,3344,3346,3348,3350,3352,3355,3357],{"class":213,"line":2884},[211,3339,3199],{"class":336},[211,3341,673],{"class":340},[211,3343,3273],{"class":332},[211,3345,337],{"class":347},[211,3347,681],{"class":340},[211,3349,3254],{"class":347},[211,3351,351],{"class":340},[211,3353,3354],{"class":3259}," 500",[211,3356,472],{"class":340},[211,3358,428],{"class":347},[211,3360,3362,3365],{"class":213,"line":3361},19,[211,3363,3364],{"class":325},"      throw",[211,3366,3367],{"class":336}," error\n",[211,3369,3371],{"class":213,"line":3370},20,[211,3372,3373],{"class":340},"    }\n",[211,3375,3377],{"class":213,"line":3376},21,[211,3378,419],{"class":340},[211,3380,3382],{"class":213,"line":3381},22,[211,3383,1074],{"class":340},[188,3385,3386],{},"Disable invocation logs to avoid duplicate request logs:",[200,3388,3393],{"className":3389,"code":3390,"filename":3391,"language":3392,"meta":206,"style":206},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[208,3394,3395,3400],{"__ignoreMap":206},[211,3396,3397],{"class":213,"line":214},[211,3398,3399],{},"[observability.logs]\n",[211,3401,3402],{"class":213,"line":344},[211,3403,3404],{},"invocation_logs = false\n",[188,3406,3407],{},"Notes:",[3409,3410,3411,3421,3427],"ul",{},[3412,3413,3414,3416,3417,3420],"li",{},[208,3415,1083],{}," defaults to ",[208,3418,3419],{},"cf-ray"," when available",[3412,3422,3423,3426],{},[208,3424,3425],{},"request.cf"," is included (colo, country, asn) unless disabled",[3412,3428,3429,3430,3433],{},"Use ",[208,3431,3432],{},"headerAllowlist"," to avoid logging sensitive headers",[946,3435,3436,3437,3443],{"color":1886,"icon":1887},"See the full ",[299,3438,3442],{"href":3439,"rel":3440},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[3441],"nofollow","workers example"," for a complete working project.",[269,3445,152],{"id":3446},"hono",[188,3448,3449,3450,3453],{},"evlog provides a first-class Hono middleware at ",[208,3451,3452],{},"evlog/hono",". It auto-creates a request-scoped logger and emits a wide event on response.",[200,3455,3457],{"className":202,"code":3456,"language":205,"meta":206,"style":206},"bun add evlog hono\n",[208,3458,3459],{"__ignoreMap":206},[211,3460,3461,3463,3465,3468],{"class":213,"line":214},[211,3462,257],{"class":217},[211,3464,221],{"class":220},[211,3466,3467],{"class":220}," evlog",[211,3469,3470],{"class":220}," hono\n",[200,3472,3474],{"className":315,"code":3473,"filename":3065,"language":318,"meta":206,"style":206},"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",[208,3475,3476,3496,3515,3534,3559,3563,3572,3593,3599,3603,3628,3632,3649,3653,3683,3708,3741,3766,3772,3776],{"__ignoreMap":206},[211,3477,3478,3480,3482,3485,3487,3489,3491,3494],{"class":213,"line":214},[211,3479,463],{"class":325},[211,3481,466],{"class":340},[211,3483,3484],{"class":336}," serve",[211,3486,472],{"class":340},[211,3488,475],{"class":325},[211,3490,400],{"class":340},[211,3492,3493],{"class":220},"@hono/node-server",[211,3495,483],{"class":340},[211,3497,3498,3500,3502,3505,3507,3509,3511,3513],{"class":213,"line":344},[211,3499,463],{"class":325},[211,3501,466],{"class":340},[211,3503,3504],{"class":336}," Hono",[211,3506,472],{"class":340},[211,3508,475],{"class":325},[211,3510,400],{"class":340},[211,3512,3446],{"class":220},[211,3514,483],{"class":340},[211,3516,3517,3519,3521,3524,3526,3528,3530,3532],{"class":213,"line":371},[211,3518,463],{"class":325},[211,3520,466],{"class":340},[211,3522,3523],{"class":336}," initLogger",[211,3525,472],{"class":340},[211,3527,475],{"class":325},[211,3529,400],{"class":340},[211,3531,2429],{"class":220},[211,3533,483],{"class":340},[211,3535,3536,3538,3540,3542,3544,3546,3549,3551,3553,3555,3557],{"class":213,"line":382},[211,3537,463],{"class":325},[211,3539,466],{"class":340},[211,3541,3467],{"class":336},[211,3543,505],{"class":340},[211,3545,2661],{"class":325},[211,3547,3548],{"class":336}," EvlogVariables",[211,3550,472],{"class":340},[211,3552,475],{"class":325},[211,3554,400],{"class":340},[211,3556,3452],{"class":220},[211,3558,483],{"class":340},[211,3560,3561],{"class":213,"line":392},[211,3562,489],{"emptyLinePlaceholder":488},[211,3564,3565,3568,3570],{"class":213,"line":410},[211,3566,3567],{"class":332},"initLogger",[211,3569,337],{"class":336},[211,3571,341],{"class":340},[211,3573,3574,3576,3578,3580,3582,3584,3586,3589,3591],{"class":213,"line":416},[211,3575,3110],{"class":347},[211,3577,351],{"class":340},[211,3579,466],{"class":340},[211,3581,1230],{"class":347},[211,3583,351],{"class":340},[211,3585,400],{"class":340},[211,3587,3588],{"class":220},"hono-api",[211,3590,357],{"class":340},[211,3592,2002],{"class":340},[211,3594,3595,3597],{"class":213,"line":422},[211,3596,425],{"class":340},[211,3598,428],{"class":336},[211,3600,3601],{"class":213,"line":940},[211,3602,489],{"emptyLinePlaceholder":488},[211,3604,3605,3608,3611,3613,3615,3617,3620,3623,3626],{"class":213,"line":1276},[211,3606,3607],{"class":496},"const",[211,3609,3610],{"class":336}," app ",[211,3612,621],{"class":340},[211,3614,3236],{"class":340},[211,3616,3504],{"class":332},[211,3618,3619],{"class":340},"\u003C",[211,3621,3622],{"class":217},"EvlogVariables",[211,3624,3625],{"class":340},">",[211,3627,839],{"class":336},[211,3629,3630],{"class":213,"line":1286},[211,3631,489],{"emptyLinePlaceholder":488},[211,3633,3634,3637,3639,3642,3644,3646],{"class":213,"line":1296},[211,3635,3636],{"class":336},"app",[211,3638,673],{"class":340},[211,3640,3641],{"class":332},"use",[211,3643,337],{"class":336},[211,3645,2429],{"class":332},[211,3647,3648],{"class":336},"())\n",[211,3650,3651],{"class":213,"line":1302},[211,3652,489],{"emptyLinePlaceholder":488},[211,3654,3655,3657,3659,3661,3663,3665,3668,3670,3672,3674,3677,3679,3681],{"class":213,"line":2842},[211,3656,3636],{"class":336},[211,3658,673],{"class":340},[211,3660,906],{"class":332},[211,3662,337],{"class":336},[211,3664,357],{"class":340},[211,3666,3667],{"class":220},"/api/users",[211,3669,357],{"class":340},[211,3671,505],{"class":340},[211,3673,631],{"class":340},[211,3675,3676],{"class":634},"c",[211,3678,642],{"class":340},[211,3680,645],{"class":496},[211,3682,379],{"class":340},[211,3684,3685,3687,3689,3691,3694,3696,3698,3700,3702,3704,3706],{"class":213,"line":2868},[211,3686,652],{"class":496},[211,3688,513],{"class":336},[211,3690,523],{"class":340},[211,3692,3693],{"class":336}," c",[211,3695,673],{"class":340},[211,3697,906],{"class":332},[211,3699,337],{"class":347},[211,3701,357],{"class":340},[211,3703,1310],{"class":220},[211,3705,357],{"class":340},[211,3707,428],{"class":347},[211,3709,3710,3712,3714,3716,3718,3720,3723,3725,3727,3730,3732,3735,3737,3739],{"class":213,"line":2874},[211,3711,670],{"class":336},[211,3713,673],{"class":340},[211,3715,676],{"class":332},[211,3717,337],{"class":347},[211,3719,681],{"class":340},[211,3721,3722],{"class":347}," users",[211,3724,351],{"class":340},[211,3726,466],{"class":340},[211,3728,3729],{"class":347}," count",[211,3731,351],{"class":340},[211,3733,3734],{"class":3259}," 42",[211,3736,472],{"class":340},[211,3738,472],{"class":340},[211,3740,428],{"class":347},[211,3742,3743,3745,3747,3749,3751,3753,3755,3757,3759,3762,3764],{"class":213,"line":2879},[211,3744,711],{"class":325},[211,3746,3693],{"class":336},[211,3748,673],{"class":340},[211,3750,719],{"class":332},[211,3752,337],{"class":347},[211,3754,681],{"class":340},[211,3756,3722],{"class":347},[211,3758,351],{"class":340},[211,3760,3761],{"class":347}," [] ",[211,3763,425],{"class":340},[211,3765,428],{"class":347},[211,3767,3768,3770],{"class":213,"line":2884},[211,3769,425],{"class":340},[211,3771,428],{"class":336},[211,3773,3774],{"class":213,"line":3361},[211,3775,489],{"emptyLinePlaceholder":488},[211,3777,3778,3781,3783,3785,3787,3789,3792,3794,3797,3799,3802,3804,3807,3809],{"class":213,"line":3370},[211,3779,3780],{"class":332},"serve",[211,3782,337],{"class":336},[211,3784,681],{"class":340},[211,3786,3153],{"class":347},[211,3788,351],{"class":340},[211,3790,3791],{"class":336}," app",[211,3793,673],{"class":340},[211,3795,3796],{"class":336},"fetch",[211,3798,505],{"class":340},[211,3800,3801],{"class":347}," port",[211,3803,351],{"class":340},[211,3805,3806],{"class":3259}," 3000",[211,3808,472],{"class":340},[211,3810,428],{"class":336},[188,3812,3813,3814,3817],{},"The ",[208,3815,3816],{},"evlog()"," middleware supports the same features as Nuxt/Next.js — drain adapters, enrichers, and tail sampling:",[200,3819,3821],{"className":315,"code":3820,"language":318,"meta":206,"style":206},"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",[208,3822,3823,3843,3863,3867,3880,3884,3900,3920,3940,3949,3976,3980,3993,4011,4022,4050,4054,4071,4115,4119],{"__ignoreMap":206},[211,3824,3825,3827,3829,3832,3834,3836,3838,3841],{"class":213,"line":214},[211,3826,463],{"class":325},[211,3828,466],{"class":340},[211,3830,3831],{"class":336}," createAxiomDrain",[211,3833,472],{"class":340},[211,3835,475],{"class":325},[211,3837,400],{"class":340},[211,3839,3840],{"class":220},"evlog/axiom",[211,3842,483],{"class":340},[211,3844,3845,3847,3849,3852,3854,3856,3858,3861],{"class":213,"line":344},[211,3846,463],{"class":325},[211,3848,466],{"class":340},[211,3850,3851],{"class":336}," createUserAgentEnricher",[211,3853,472],{"class":340},[211,3855,475],{"class":325},[211,3857,400],{"class":340},[211,3859,3860],{"class":220},"evlog/enrichers",[211,3862,483],{"class":340},[211,3864,3865],{"class":213,"line":371},[211,3866,489],{"emptyLinePlaceholder":488},[211,3868,3869,3871,3874,3876,3878],{"class":213,"line":382},[211,3870,3607],{"class":496},[211,3872,3873],{"class":336}," userAgent ",[211,3875,621],{"class":340},[211,3877,3851],{"class":332},[211,3879,839],{"class":336},[211,3881,3882],{"class":213,"line":392},[211,3883,489],{"emptyLinePlaceholder":488},[211,3885,3886,3888,3890,3892,3894,3896,3898],{"class":213,"line":410},[211,3887,3636],{"class":336},[211,3889,673],{"class":340},[211,3891,3641],{"class":332},[211,3893,337],{"class":336},[211,3895,2429],{"class":332},[211,3897,337],{"class":336},[211,3899,341],{"class":340},[211,3901,3902,3905,3907,3909,3911,3914,3916,3918],{"class":213,"line":416},[211,3903,3904],{"class":347},"  include",[211,3906,351],{"class":340},[211,3908,354],{"class":336},[211,3910,357],{"class":340},[211,3912,3913],{"class":220},"/api/**",[211,3915,357],{"class":340},[211,3917,365],{"class":336},[211,3919,368],{"class":340},[211,3921,3922,3925,3927,3929,3931,3934,3936,3938],{"class":213,"line":422},[211,3923,3924],{"class":347},"  exclude",[211,3926,351],{"class":340},[211,3928,354],{"class":336},[211,3930,357],{"class":340},[211,3932,3933],{"class":220},"/_internal/**",[211,3935,357],{"class":340},[211,3937,365],{"class":336},[211,3939,368],{"class":340},[211,3941,3942,3945,3947],{"class":213,"line":940},[211,3943,3944],{"class":347},"  routes",[211,3946,351],{"class":340},[211,3948,379],{"class":340},[211,3950,3951,3954,3957,3959,3961,3963,3965,3967,3969,3972,3974],{"class":213,"line":1276},[211,3952,3953],{"class":340},"    '",[211,3955,3956],{"class":347},"/api/auth/**",[211,3958,357],{"class":340},[211,3960,351],{"class":340},[211,3962,466],{"class":340},[211,3964,1230],{"class":347},[211,3966,351],{"class":340},[211,3968,400],{"class":340},[211,3970,3971],{"class":220},"auth-service",[211,3973,357],{"class":340},[211,3975,2002],{"class":340},[211,3977,3978],{"class":213,"line":1286},[211,3979,419],{"class":340},[211,3981,3982,3985,3987,3989,3991],{"class":213,"line":1296},[211,3983,3984],{"class":347},"  drain",[211,3986,351],{"class":340},[211,3988,3831],{"class":332},[211,3990,1360],{"class":336},[211,3992,368],{"class":340},[211,3994,3995,3998,4000,4002,4005,4007,4009],{"class":213,"line":1302},[211,3996,3997],{"class":332},"  enrich",[211,3999,351],{"class":340},[211,4001,631],{"class":340},[211,4003,4004],{"class":634},"ctx",[211,4006,642],{"class":340},[211,4008,645],{"class":496},[211,4010,379],{"class":340},[211,4012,4013,4016,4018,4020],{"class":213,"line":2842},[211,4014,4015],{"class":332},"    userAgent",[211,4017,337],{"class":347},[211,4019,4004],{"class":336},[211,4021,428],{"class":347},[211,4023,4024,4027,4029,4031,4033,4036,4038,4041,4043,4045,4047],{"class":213,"line":2868},[211,4025,4026],{"class":336},"    ctx",[211,4028,673],{"class":340},[211,4030,2092],{"class":336},[211,4032,673],{"class":340},[211,4034,4035],{"class":336},"region",[211,4037,523],{"class":340},[211,4039,4040],{"class":336}," process",[211,4042,673],{"class":340},[211,4044,1531],{"class":336},[211,4046,673],{"class":340},[211,4048,4049],{"class":336},"FLY_REGION\n",[211,4051,4052],{"class":213,"line":2874},[211,4053,419],{"class":340},[211,4055,4056,4059,4061,4063,4065,4067,4069],{"class":213,"line":2879},[211,4057,4058],{"class":332},"  keep",[211,4060,351],{"class":340},[211,4062,631],{"class":340},[211,4064,4004],{"class":634},[211,4066,642],{"class":340},[211,4068,645],{"class":496},[211,4070,379],{"class":340},[211,4072,4073,4076,4078,4080,4082,4085,4088,4091,4093,4095,4098,4101,4103,4105,4107,4110,4112],{"class":213,"line":2884},[211,4074,4075],{"class":325},"    if",[211,4077,631],{"class":347},[211,4079,4004],{"class":336},[211,4081,673],{"class":340},[211,4083,4084],{"class":336},"duration",[211,4086,4087],{"class":340}," &&",[211,4089,4090],{"class":336}," ctx",[211,4092,673],{"class":340},[211,4094,4084],{"class":336},[211,4096,4097],{"class":340}," >",[211,4099,4100],{"class":3259}," 2000",[211,4102,918],{"class":347},[211,4104,4004],{"class":336},[211,4106,673],{"class":340},[211,4108,4109],{"class":336},"shouldKeep",[211,4111,523],{"class":340},[211,4113,4114],{"class":731}," true\n",[211,4116,4117],{"class":213,"line":3361},[211,4118,419],{"class":340},[211,4120,4121,4123],{"class":213,"line":3370},[211,4122,425],{"class":340},[211,4124,4125],{"class":336},"))\n",[188,4127,4128,4129,4131,4132,673],{},"Use the ",[208,4130,3622],{}," type to get typed access to ",[208,4133,4134],{},"c.get('log')",[946,4136,4137,4138,4141],{"color":1886,"icon":1887},"See the ",[299,4139,4140],{"href":153},"Hono example"," for a complete guide with drain, enrichers, tail sampling, and error handling.",[269,4143,157],{"id":4144},"express",[188,4146,4147,4148,4151,4152,4155,4156,4158],{},"evlog provides Express middleware at ",[208,4149,4150],{},"evlog/express",". It auto-creates a request-scoped logger accessible via ",[208,4153,4154],{},"req.log"," or ",[208,4157,1770],{}," and emits a wide event when the response finishes.",[200,4160,4162],{"className":202,"code":4161,"language":205,"meta":206,"style":206},"npm install evlog express\n",[208,4163,4164],{"__ignoreMap":206},[211,4165,4166,4168,4170,4172],{"class":213,"line":214},[211,4167,228],{"class":217},[211,4169,237],{"class":220},[211,4171,3467],{"class":220},[211,4173,4174],{"class":220}," express\n",[200,4176,4178],{"className":315,"code":4177,"filename":3065,"language":318,"meta":206,"style":206},"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",[208,4179,4180,4195,4213,4231,4235,4243,4264,4270,4274,4287,4291,4305,4309,4343,4378,4401,4407,4411],{"__ignoreMap":206},[211,4181,4182,4184,4187,4189,4191,4193],{"class":213,"line":214},[211,4183,463],{"class":325},[211,4185,4186],{"class":336}," express ",[211,4188,1938],{"class":325},[211,4190,400],{"class":340},[211,4192,4144],{"class":220},[211,4194,483],{"class":340},[211,4196,4197,4199,4201,4203,4205,4207,4209,4211],{"class":213,"line":344},[211,4198,463],{"class":325},[211,4200,466],{"class":340},[211,4202,3523],{"class":336},[211,4204,472],{"class":340},[211,4206,475],{"class":325},[211,4208,400],{"class":340},[211,4210,2429],{"class":220},[211,4212,483],{"class":340},[211,4214,4215,4217,4219,4221,4223,4225,4227,4229],{"class":213,"line":371},[211,4216,463],{"class":325},[211,4218,466],{"class":340},[211,4220,3467],{"class":336},[211,4222,472],{"class":340},[211,4224,475],{"class":325},[211,4226,400],{"class":340},[211,4228,4150],{"class":220},[211,4230,483],{"class":340},[211,4232,4233],{"class":213,"line":382},[211,4234,489],{"emptyLinePlaceholder":488},[211,4236,4237,4239,4241],{"class":213,"line":392},[211,4238,3567],{"class":332},[211,4240,337],{"class":336},[211,4242,341],{"class":340},[211,4244,4245,4247,4249,4251,4253,4255,4257,4260,4262],{"class":213,"line":410},[211,4246,3110],{"class":347},[211,4248,351],{"class":340},[211,4250,466],{"class":340},[211,4252,1230],{"class":347},[211,4254,351],{"class":340},[211,4256,400],{"class":340},[211,4258,4259],{"class":220},"express-api",[211,4261,357],{"class":340},[211,4263,2002],{"class":340},[211,4265,4266,4268],{"class":213,"line":416},[211,4267,425],{"class":340},[211,4269,428],{"class":336},[211,4271,4272],{"class":213,"line":422},[211,4273,489],{"emptyLinePlaceholder":488},[211,4275,4276,4278,4280,4282,4285],{"class":213,"line":940},[211,4277,3607],{"class":496},[211,4279,3610],{"class":336},[211,4281,621],{"class":340},[211,4283,4284],{"class":332}," express",[211,4286,839],{"class":336},[211,4288,4289],{"class":213,"line":1276},[211,4290,489],{"emptyLinePlaceholder":488},[211,4292,4293,4295,4297,4299,4301,4303],{"class":213,"line":1286},[211,4294,3636],{"class":336},[211,4296,673],{"class":340},[211,4298,3641],{"class":332},[211,4300,337],{"class":336},[211,4302,2429],{"class":332},[211,4304,3648],{"class":336},[211,4306,4307],{"class":213,"line":1296},[211,4308,489],{"emptyLinePlaceholder":488},[211,4310,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329,4332,4334,4337,4339,4341],{"class":213,"line":1302},[211,4312,3636],{"class":336},[211,4314,673],{"class":340},[211,4316,906],{"class":332},[211,4318,337],{"class":336},[211,4320,357],{"class":340},[211,4322,3667],{"class":220},[211,4324,357],{"class":340},[211,4326,505],{"class":340},[211,4328,631],{"class":340},[211,4330,4331],{"class":634},"req",[211,4333,505],{"class":340},[211,4335,4336],{"class":634}," res",[211,4338,642],{"class":340},[211,4340,645],{"class":496},[211,4342,379],{"class":340},[211,4344,4345,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376],{"class":213,"line":2842},[211,4346,4347],{"class":336},"  req",[211,4349,673],{"class":340},[211,4351,1310],{"class":336},[211,4353,673],{"class":340},[211,4355,676],{"class":332},[211,4357,337],{"class":347},[211,4359,681],{"class":340},[211,4361,3722],{"class":347},[211,4363,351],{"class":340},[211,4365,466],{"class":340},[211,4367,3729],{"class":347},[211,4369,351],{"class":340},[211,4371,3734],{"class":3259},[211,4373,472],{"class":340},[211,4375,472],{"class":340},[211,4377,428],{"class":347},[211,4379,4380,4383,4385,4387,4389,4391,4393,4395,4397,4399],{"class":213,"line":2868},[211,4381,4382],{"class":336},"  res",[211,4384,673],{"class":340},[211,4386,719],{"class":332},[211,4388,337],{"class":347},[211,4390,681],{"class":340},[211,4392,3722],{"class":347},[211,4394,351],{"class":340},[211,4396,3761],{"class":347},[211,4398,425],{"class":340},[211,4400,428],{"class":347},[211,4402,4403,4405],{"class":213,"line":2874},[211,4404,425],{"class":340},[211,4406,428],{"class":336},[211,4408,4409],{"class":213,"line":2879},[211,4410,489],{"emptyLinePlaceholder":488},[211,4412,4413,4415,4417,4420,4422,4425],{"class":213,"line":2884},[211,4414,3636],{"class":336},[211,4416,673],{"class":340},[211,4418,4419],{"class":332},"listen",[211,4421,337],{"class":336},[211,4423,4424],{"class":3259},"3000",[211,4426,428],{"class":336},[188,4428,4429],{},"The middleware supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,4431,4432],{"className":315,"code":3820,"language":318,"meta":206,"style":206},[208,4433,4434,4452,4470,4474,4486,4490,4506,4524,4542,4550,4574,4578,4590,4606,4616,4640,4644,4660,4696,4700],{"__ignoreMap":206},[211,4435,4436,4438,4440,4442,4444,4446,4448,4450],{"class":213,"line":214},[211,4437,463],{"class":325},[211,4439,466],{"class":340},[211,4441,3831],{"class":336},[211,4443,472],{"class":340},[211,4445,475],{"class":325},[211,4447,400],{"class":340},[211,4449,3840],{"class":220},[211,4451,483],{"class":340},[211,4453,4454,4456,4458,4460,4462,4464,4466,4468],{"class":213,"line":344},[211,4455,463],{"class":325},[211,4457,466],{"class":340},[211,4459,3851],{"class":336},[211,4461,472],{"class":340},[211,4463,475],{"class":325},[211,4465,400],{"class":340},[211,4467,3860],{"class":220},[211,4469,483],{"class":340},[211,4471,4472],{"class":213,"line":371},[211,4473,489],{"emptyLinePlaceholder":488},[211,4475,4476,4478,4480,4482,4484],{"class":213,"line":382},[211,4477,3607],{"class":496},[211,4479,3873],{"class":336},[211,4481,621],{"class":340},[211,4483,3851],{"class":332},[211,4485,839],{"class":336},[211,4487,4488],{"class":213,"line":392},[211,4489,489],{"emptyLinePlaceholder":488},[211,4491,4492,4494,4496,4498,4500,4502,4504],{"class":213,"line":410},[211,4493,3636],{"class":336},[211,4495,673],{"class":340},[211,4497,3641],{"class":332},[211,4499,337],{"class":336},[211,4501,2429],{"class":332},[211,4503,337],{"class":336},[211,4505,341],{"class":340},[211,4507,4508,4510,4512,4514,4516,4518,4520,4522],{"class":213,"line":416},[211,4509,3904],{"class":347},[211,4511,351],{"class":340},[211,4513,354],{"class":336},[211,4515,357],{"class":340},[211,4517,3913],{"class":220},[211,4519,357],{"class":340},[211,4521,365],{"class":336},[211,4523,368],{"class":340},[211,4525,4526,4528,4530,4532,4534,4536,4538,4540],{"class":213,"line":422},[211,4527,3924],{"class":347},[211,4529,351],{"class":340},[211,4531,354],{"class":336},[211,4533,357],{"class":340},[211,4535,3933],{"class":220},[211,4537,357],{"class":340},[211,4539,365],{"class":336},[211,4541,368],{"class":340},[211,4543,4544,4546,4548],{"class":213,"line":940},[211,4545,3944],{"class":347},[211,4547,351],{"class":340},[211,4549,379],{"class":340},[211,4551,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572],{"class":213,"line":1276},[211,4553,3953],{"class":340},[211,4555,3956],{"class":347},[211,4557,357],{"class":340},[211,4559,351],{"class":340},[211,4561,466],{"class":340},[211,4563,1230],{"class":347},[211,4565,351],{"class":340},[211,4567,400],{"class":340},[211,4569,3971],{"class":220},[211,4571,357],{"class":340},[211,4573,2002],{"class":340},[211,4575,4576],{"class":213,"line":1286},[211,4577,419],{"class":340},[211,4579,4580,4582,4584,4586,4588],{"class":213,"line":1296},[211,4581,3984],{"class":347},[211,4583,351],{"class":340},[211,4585,3831],{"class":332},[211,4587,1360],{"class":336},[211,4589,368],{"class":340},[211,4591,4592,4594,4596,4598,4600,4602,4604],{"class":213,"line":1302},[211,4593,3997],{"class":332},[211,4595,351],{"class":340},[211,4597,631],{"class":340},[211,4599,4004],{"class":634},[211,4601,642],{"class":340},[211,4603,645],{"class":496},[211,4605,379],{"class":340},[211,4607,4608,4610,4612,4614],{"class":213,"line":2842},[211,4609,4015],{"class":332},[211,4611,337],{"class":347},[211,4613,4004],{"class":336},[211,4615,428],{"class":347},[211,4617,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636,4638],{"class":213,"line":2868},[211,4619,4026],{"class":336},[211,4621,673],{"class":340},[211,4623,2092],{"class":336},[211,4625,673],{"class":340},[211,4627,4035],{"class":336},[211,4629,523],{"class":340},[211,4631,4040],{"class":336},[211,4633,673],{"class":340},[211,4635,1531],{"class":336},[211,4637,673],{"class":340},[211,4639,4049],{"class":336},[211,4641,4642],{"class":213,"line":2874},[211,4643,419],{"class":340},[211,4645,4646,4648,4650,4652,4654,4656,4658],{"class":213,"line":2879},[211,4647,4058],{"class":332},[211,4649,351],{"class":340},[211,4651,631],{"class":340},[211,4653,4004],{"class":634},[211,4655,642],{"class":340},[211,4657,645],{"class":496},[211,4659,379],{"class":340},[211,4661,4662,4664,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694],{"class":213,"line":2884},[211,4663,4075],{"class":325},[211,4665,631],{"class":347},[211,4667,4004],{"class":336},[211,4669,673],{"class":340},[211,4671,4084],{"class":336},[211,4673,4087],{"class":340},[211,4675,4090],{"class":336},[211,4677,673],{"class":340},[211,4679,4084],{"class":336},[211,4681,4097],{"class":340},[211,4683,4100],{"class":3259},[211,4685,918],{"class":347},[211,4687,4004],{"class":336},[211,4689,673],{"class":340},[211,4691,4109],{"class":336},[211,4693,523],{"class":340},[211,4695,4114],{"class":731},[211,4697,4698],{"class":213,"line":3361},[211,4699,419],{"class":340},[211,4701,4702,4704],{"class":213,"line":3370},[211,4703,425],{"class":340},[211,4705,4125],{"class":336},[188,4707,4708],{},"Handle errors with Express's error handler middleware:",[200,4710,4712],{"className":315,"code":4711,"language":318,"meta":206,"style":206},"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",[208,4713,4714,4738,4742,4767,4817,4823,4827,4861,4879,4896,4963],{"__ignoreMap":206},[211,4715,4716,4718,4720,4723,4725,4728,4730,4732,4734,4736],{"class":213,"line":214},[211,4717,463],{"class":325},[211,4719,466],{"class":340},[211,4721,4722],{"class":336}," createError",[211,4724,505],{"class":340},[211,4726,4727],{"class":336}," parseError",[211,4729,472],{"class":340},[211,4731,475],{"class":325},[211,4733,400],{"class":340},[211,4735,2429],{"class":220},[211,4737,483],{"class":340},[211,4739,4740],{"class":213,"line":344},[211,4741,489],{"emptyLinePlaceholder":488},[211,4743,4744,4746,4748,4750,4752,4754,4757,4759,4761,4763,4765],{"class":213,"line":371},[211,4745,3636],{"class":336},[211,4747,673],{"class":340},[211,4749,906],{"class":332},[211,4751,337],{"class":336},[211,4753,357],{"class":340},[211,4755,4756],{"class":220},"/checkout",[211,4758,357],{"class":340},[211,4760,505],{"class":340},[211,4762,2738],{"class":340},[211,4764,645],{"class":496},[211,4766,379],{"class":340},[211,4768,4769,4772,4774,4776,4778,4781,4783,4785,4788,4790,4792,4794,4796,4799,4801,4804,4806,4808,4811,4813,4815],{"class":213,"line":382},[211,4770,4771],{"class":325},"  throw",[211,4773,4722],{"class":332},[211,4775,337],{"class":347},[211,4777,681],{"class":340},[211,4779,4780],{"class":347}," message",[211,4782,351],{"class":340},[211,4784,400],{"class":340},[211,4786,4787],{"class":220},"Payment failed",[211,4789,357],{"class":340},[211,4791,505],{"class":340},[211,4793,3254],{"class":347},[211,4795,351],{"class":340},[211,4797,4798],{"class":3259}," 402",[211,4800,505],{"class":340},[211,4802,4803],{"class":347}," why",[211,4805,351],{"class":340},[211,4807,400],{"class":340},[211,4809,4810],{"class":220},"Card declined",[211,4812,357],{"class":340},[211,4814,472],{"class":340},[211,4816,428],{"class":347},[211,4818,4819,4821],{"class":213,"line":392},[211,4820,425],{"class":340},[211,4822,428],{"class":336},[211,4824,4825],{"class":213,"line":410},[211,4826,489],{"emptyLinePlaceholder":488},[211,4828,4829,4831,4833,4835,4837,4839,4842,4844,4846,4848,4850,4852,4855,4857,4859],{"class":213,"line":416},[211,4830,3636],{"class":336},[211,4832,673],{"class":340},[211,4834,3641],{"class":332},[211,4836,337],{"class":336},[211,4838,337],{"class":340},[211,4840,4841],{"class":634},"err",[211,4843,505],{"class":340},[211,4845,2750],{"class":634},[211,4847,505],{"class":340},[211,4849,4336],{"class":634},[211,4851,505],{"class":340},[211,4853,4854],{"class":634}," next",[211,4856,642],{"class":340},[211,4858,645],{"class":496},[211,4860,379],{"class":340},[211,4862,4863,4865,4867,4869,4871,4873,4875,4877],{"class":213,"line":422},[211,4864,4347],{"class":336},[211,4866,673],{"class":340},[211,4868,1310],{"class":336},[211,4870,673],{"class":340},[211,4872,3312],{"class":332},[211,4874,337],{"class":347},[211,4876,4841],{"class":336},[211,4878,428],{"class":347},[211,4880,4881,4883,4886,4888,4890,4892,4894],{"class":213,"line":940},[211,4882,652],{"class":496},[211,4884,4885],{"class":336}," parsed",[211,4887,523],{"class":340},[211,4889,4727],{"class":332},[211,4891,337],{"class":347},[211,4893,4841],{"class":336},[211,4895,428],{"class":347},[211,4897,4898,4900,4902,4904,4906,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4934,4936,4938,4940,4942,4944,4946,4948,4951,4953,4955,4957,4959,4961],{"class":213,"line":1276},[211,4899,4382],{"class":336},[211,4901,673],{"class":340},[211,4903,3288],{"class":332},[211,4905,337],{"class":347},[211,4907,4908],{"class":336},"parsed",[211,4910,673],{"class":340},[211,4912,3288],{"class":336},[211,4914,642],{"class":347},[211,4916,673],{"class":340},[211,4918,719],{"class":332},[211,4920,337],{"class":347},[211,4922,681],{"class":340},[211,4924,4780],{"class":347},[211,4926,351],{"class":340},[211,4928,4885],{"class":336},[211,4930,673],{"class":340},[211,4932,4933],{"class":336},"message",[211,4935,505],{"class":340},[211,4937,4803],{"class":347},[211,4939,351],{"class":340},[211,4941,4885],{"class":336},[211,4943,673],{"class":340},[211,4945,2910],{"class":336},[211,4947,505],{"class":340},[211,4949,4950],{"class":347}," fix",[211,4952,351],{"class":340},[211,4954,4885],{"class":336},[211,4956,673],{"class":340},[211,4958,2913],{"class":336},[211,4960,472],{"class":340},[211,4962,428],{"class":347},[211,4964,4965,4967],{"class":213,"line":1286},[211,4966,425],{"class":340},[211,4968,428],{"class":336},[946,4970,4137,4971,4141],{"color":1886,"icon":1887},[299,4972,4973],{"href":158},"Express example",[269,4975,162],{"id":4976},"elysia",[188,4978,4979,4980,4151,4983,4985,4986,4988],{},"evlog provides an Elysia plugin at ",[208,4981,4982],{},"evlog/elysia",[208,4984,1310],{}," in route context or ",[208,4987,1770],{}," and emits a wide event when the response completes.",[200,4990,4992],{"className":202,"code":4991,"language":205,"meta":206,"style":206},"bun add evlog elysia\n",[208,4993,4994],{"__ignoreMap":206},[211,4995,4996,4998,5000,5002],{"class":213,"line":214},[211,4997,257],{"class":217},[211,4999,221],{"class":220},[211,5001,3467],{"class":220},[211,5003,5004],{"class":220}," elysia\n",[200,5006,5008],{"className":315,"code":5007,"filename":3065,"language":318,"meta":206,"style":206},"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",[208,5009,5010,5029,5047,5065,5069,5077,5098,5104,5108,5122,5135,5162,5193,5208,5215],{"__ignoreMap":206},[211,5011,5012,5014,5016,5019,5021,5023,5025,5027],{"class":213,"line":214},[211,5013,463],{"class":325},[211,5015,466],{"class":340},[211,5017,5018],{"class":336}," Elysia",[211,5020,472],{"class":340},[211,5022,475],{"class":325},[211,5024,400],{"class":340},[211,5026,4976],{"class":220},[211,5028,483],{"class":340},[211,5030,5031,5033,5035,5037,5039,5041,5043,5045],{"class":213,"line":344},[211,5032,463],{"class":325},[211,5034,466],{"class":340},[211,5036,3523],{"class":336},[211,5038,472],{"class":340},[211,5040,475],{"class":325},[211,5042,400],{"class":340},[211,5044,2429],{"class":220},[211,5046,483],{"class":340},[211,5048,5049,5051,5053,5055,5057,5059,5061,5063],{"class":213,"line":371},[211,5050,463],{"class":325},[211,5052,466],{"class":340},[211,5054,3467],{"class":336},[211,5056,472],{"class":340},[211,5058,475],{"class":325},[211,5060,400],{"class":340},[211,5062,4982],{"class":220},[211,5064,483],{"class":340},[211,5066,5067],{"class":213,"line":382},[211,5068,489],{"emptyLinePlaceholder":488},[211,5070,5071,5073,5075],{"class":213,"line":392},[211,5072,3567],{"class":332},[211,5074,337],{"class":336},[211,5076,341],{"class":340},[211,5078,5079,5081,5083,5085,5087,5089,5091,5094,5096],{"class":213,"line":410},[211,5080,3110],{"class":347},[211,5082,351],{"class":340},[211,5084,466],{"class":340},[211,5086,1230],{"class":347},[211,5088,351],{"class":340},[211,5090,400],{"class":340},[211,5092,5093],{"class":220},"elysia-api",[211,5095,357],{"class":340},[211,5097,2002],{"class":340},[211,5099,5100,5102],{"class":213,"line":416},[211,5101,425],{"class":340},[211,5103,428],{"class":336},[211,5105,5106],{"class":213,"line":422},[211,5107,489],{"emptyLinePlaceholder":488},[211,5109,5110,5112,5114,5116,5118,5120],{"class":213,"line":940},[211,5111,3607],{"class":496},[211,5113,3610],{"class":336},[211,5115,621],{"class":340},[211,5117,3236],{"class":340},[211,5119,5018],{"class":332},[211,5121,839],{"class":336},[211,5123,5124,5127,5129,5131,5133],{"class":213,"line":1276},[211,5125,5126],{"class":340},"  .",[211,5128,3641],{"class":332},[211,5130,337],{"class":336},[211,5132,2429],{"class":332},[211,5134,3648],{"class":336},[211,5136,5137,5139,5141,5143,5145,5147,5149,5151,5154,5156,5158,5160],{"class":213,"line":1286},[211,5138,5126],{"class":340},[211,5140,906],{"class":332},[211,5142,337],{"class":336},[211,5144,357],{"class":340},[211,5146,3667],{"class":220},[211,5148,357],{"class":340},[211,5150,505],{"class":340},[211,5152,5153],{"class":340}," ({",[211,5155,513],{"class":634},[211,5157,1177],{"class":340},[211,5159,645],{"class":496},[211,5161,379],{"class":340},[211,5163,5164,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189,5191],{"class":213,"line":1296},[211,5165,5166],{"class":336},"    log",[211,5168,673],{"class":340},[211,5170,676],{"class":332},[211,5172,337],{"class":347},[211,5174,681],{"class":340},[211,5176,3722],{"class":347},[211,5178,351],{"class":340},[211,5180,466],{"class":340},[211,5182,3729],{"class":347},[211,5184,351],{"class":340},[211,5186,3734],{"class":3259},[211,5188,472],{"class":340},[211,5190,472],{"class":340},[211,5192,428],{"class":347},[211,5194,5195,5198,5200,5202,5204,5206],{"class":213,"line":1302},[211,5196,5197],{"class":325},"    return",[211,5199,466],{"class":340},[211,5201,3722],{"class":347},[211,5203,351],{"class":340},[211,5205,3761],{"class":347},[211,5207,1074],{"class":340},[211,5209,5210,5213],{"class":213,"line":2842},[211,5211,5212],{"class":340},"  }",[211,5214,428],{"class":336},[211,5216,5217,5219,5221,5223,5225],{"class":213,"line":2868},[211,5218,5126],{"class":340},[211,5220,4419],{"class":332},[211,5222,337],{"class":336},[211,5224,4424],{"class":3259},[211,5226,428],{"class":336},[188,5228,5229],{},"The plugin supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,5231,5232],{"className":315,"code":3820,"language":318,"meta":206,"style":206},[208,5233,5234,5252,5270,5274,5286,5290,5306,5324,5342,5350,5374,5378,5390,5406,5416,5440,5444,5460,5496,5500],{"__ignoreMap":206},[211,5235,5236,5238,5240,5242,5244,5246,5248,5250],{"class":213,"line":214},[211,5237,463],{"class":325},[211,5239,466],{"class":340},[211,5241,3831],{"class":336},[211,5243,472],{"class":340},[211,5245,475],{"class":325},[211,5247,400],{"class":340},[211,5249,3840],{"class":220},[211,5251,483],{"class":340},[211,5253,5254,5256,5258,5260,5262,5264,5266,5268],{"class":213,"line":344},[211,5255,463],{"class":325},[211,5257,466],{"class":340},[211,5259,3851],{"class":336},[211,5261,472],{"class":340},[211,5263,475],{"class":325},[211,5265,400],{"class":340},[211,5267,3860],{"class":220},[211,5269,483],{"class":340},[211,5271,5272],{"class":213,"line":371},[211,5273,489],{"emptyLinePlaceholder":488},[211,5275,5276,5278,5280,5282,5284],{"class":213,"line":382},[211,5277,3607],{"class":496},[211,5279,3873],{"class":336},[211,5281,621],{"class":340},[211,5283,3851],{"class":332},[211,5285,839],{"class":336},[211,5287,5288],{"class":213,"line":392},[211,5289,489],{"emptyLinePlaceholder":488},[211,5291,5292,5294,5296,5298,5300,5302,5304],{"class":213,"line":410},[211,5293,3636],{"class":336},[211,5295,673],{"class":340},[211,5297,3641],{"class":332},[211,5299,337],{"class":336},[211,5301,2429],{"class":332},[211,5303,337],{"class":336},[211,5305,341],{"class":340},[211,5307,5308,5310,5312,5314,5316,5318,5320,5322],{"class":213,"line":416},[211,5309,3904],{"class":347},[211,5311,351],{"class":340},[211,5313,354],{"class":336},[211,5315,357],{"class":340},[211,5317,3913],{"class":220},[211,5319,357],{"class":340},[211,5321,365],{"class":336},[211,5323,368],{"class":340},[211,5325,5326,5328,5330,5332,5334,5336,5338,5340],{"class":213,"line":422},[211,5327,3924],{"class":347},[211,5329,351],{"class":340},[211,5331,354],{"class":336},[211,5333,357],{"class":340},[211,5335,3933],{"class":220},[211,5337,357],{"class":340},[211,5339,365],{"class":336},[211,5341,368],{"class":340},[211,5343,5344,5346,5348],{"class":213,"line":940},[211,5345,3944],{"class":347},[211,5347,351],{"class":340},[211,5349,379],{"class":340},[211,5351,5352,5354,5356,5358,5360,5362,5364,5366,5368,5370,5372],{"class":213,"line":1276},[211,5353,3953],{"class":340},[211,5355,3956],{"class":347},[211,5357,357],{"class":340},[211,5359,351],{"class":340},[211,5361,466],{"class":340},[211,5363,1230],{"class":347},[211,5365,351],{"class":340},[211,5367,400],{"class":340},[211,5369,3971],{"class":220},[211,5371,357],{"class":340},[211,5373,2002],{"class":340},[211,5375,5376],{"class":213,"line":1286},[211,5377,419],{"class":340},[211,5379,5380,5382,5384,5386,5388],{"class":213,"line":1296},[211,5381,3984],{"class":347},[211,5383,351],{"class":340},[211,5385,3831],{"class":332},[211,5387,1360],{"class":336},[211,5389,368],{"class":340},[211,5391,5392,5394,5396,5398,5400,5402,5404],{"class":213,"line":1302},[211,5393,3997],{"class":332},[211,5395,351],{"class":340},[211,5397,631],{"class":340},[211,5399,4004],{"class":634},[211,5401,642],{"class":340},[211,5403,645],{"class":496},[211,5405,379],{"class":340},[211,5407,5408,5410,5412,5414],{"class":213,"line":2842},[211,5409,4015],{"class":332},[211,5411,337],{"class":347},[211,5413,4004],{"class":336},[211,5415,428],{"class":347},[211,5417,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436,5438],{"class":213,"line":2868},[211,5419,4026],{"class":336},[211,5421,673],{"class":340},[211,5423,2092],{"class":336},[211,5425,673],{"class":340},[211,5427,4035],{"class":336},[211,5429,523],{"class":340},[211,5431,4040],{"class":336},[211,5433,673],{"class":340},[211,5435,1531],{"class":336},[211,5437,673],{"class":340},[211,5439,4049],{"class":336},[211,5441,5442],{"class":213,"line":2874},[211,5443,419],{"class":340},[211,5445,5446,5448,5450,5452,5454,5456,5458],{"class":213,"line":2879},[211,5447,4058],{"class":332},[211,5449,351],{"class":340},[211,5451,631],{"class":340},[211,5453,4004],{"class":634},[211,5455,642],{"class":340},[211,5457,645],{"class":496},[211,5459,379],{"class":340},[211,5461,5462,5464,5466,5468,5470,5472,5474,5476,5478,5480,5482,5484,5486,5488,5490,5492,5494],{"class":213,"line":2884},[211,5463,4075],{"class":325},[211,5465,631],{"class":347},[211,5467,4004],{"class":336},[211,5469,673],{"class":340},[211,5471,4084],{"class":336},[211,5473,4087],{"class":340},[211,5475,4090],{"class":336},[211,5477,673],{"class":340},[211,5479,4084],{"class":336},[211,5481,4097],{"class":340},[211,5483,4100],{"class":3259},[211,5485,918],{"class":347},[211,5487,4004],{"class":336},[211,5489,673],{"class":340},[211,5491,4109],{"class":336},[211,5493,523],{"class":340},[211,5495,4114],{"class":731},[211,5497,5498],{"class":213,"line":3361},[211,5499,419],{"class":340},[211,5501,5502,5504],{"class":213,"line":3370},[211,5503,425],{"class":340},[211,5505,4125],{"class":336},[188,5507,5508,5509,5512],{},"Handle errors with Elysia's ",[208,5510,5511],{},"onError"," hook (evlog captures them automatically):",[200,5514,5516],{"className":315,"code":5515,"language":318,"meta":206,"style":206},"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",[208,5517,5518,5540,5544,5549,5561,5583,5628,5634,5658,5674,5692,5734],{"__ignoreMap":206},[211,5519,5520,5522,5524,5526,5528,5530,5532,5534,5536,5538],{"class":213,"line":214},[211,5521,463],{"class":325},[211,5523,466],{"class":340},[211,5525,4722],{"class":336},[211,5527,505],{"class":340},[211,5529,4727],{"class":336},[211,5531,472],{"class":340},[211,5533,475],{"class":325},[211,5535,400],{"class":340},[211,5537,2429],{"class":220},[211,5539,483],{"class":340},[211,5541,5542],{"class":213,"line":344},[211,5543,489],{"emptyLinePlaceholder":488},[211,5545,5546],{"class":213,"line":371},[211,5547,5548],{"class":336},"app\n",[211,5550,5551,5553,5555,5557,5559],{"class":213,"line":382},[211,5552,5126],{"class":340},[211,5554,3641],{"class":332},[211,5556,337],{"class":336},[211,5558,2429],{"class":332},[211,5560,3648],{"class":336},[211,5562,5563,5565,5567,5569,5571,5573,5575,5577,5579,5581],{"class":213,"line":392},[211,5564,5126],{"class":340},[211,5566,906],{"class":332},[211,5568,337],{"class":336},[211,5570,357],{"class":340},[211,5572,4756],{"class":220},[211,5574,357],{"class":340},[211,5576,505],{"class":340},[211,5578,2738],{"class":340},[211,5580,645],{"class":496},[211,5582,379],{"class":340},[211,5584,5585,5588,5590,5592,5594,5596,5598,5600,5602,5604,5606,5608,5610,5612,5614,5616,5618,5620,5622,5624,5626],{"class":213,"line":410},[211,5586,5587],{"class":325},"    throw",[211,5589,4722],{"class":332},[211,5591,337],{"class":347},[211,5593,681],{"class":340},[211,5595,4780],{"class":347},[211,5597,351],{"class":340},[211,5599,400],{"class":340},[211,5601,4787],{"class":220},[211,5603,357],{"class":340},[211,5605,505],{"class":340},[211,5607,3254],{"class":347},[211,5609,351],{"class":340},[211,5611,4798],{"class":3259},[211,5613,505],{"class":340},[211,5615,4803],{"class":347},[211,5617,351],{"class":340},[211,5619,400],{"class":340},[211,5621,4810],{"class":220},[211,5623,357],{"class":340},[211,5625,472],{"class":340},[211,5627,428],{"class":347},[211,5629,5630,5632],{"class":213,"line":416},[211,5631,5212],{"class":340},[211,5633,428],{"class":336},[211,5635,5636,5638,5640,5642,5644,5647,5649,5652,5654,5656],{"class":213,"line":422},[211,5637,5126],{"class":340},[211,5639,5511],{"class":332},[211,5641,337],{"class":336},[211,5643,1154],{"class":340},[211,5645,5646],{"class":634}," error",[211,5648,505],{"class":340},[211,5650,5651],{"class":634}," set",[211,5653,1177],{"class":340},[211,5655,645],{"class":496},[211,5657,379],{"class":340},[211,5659,5660,5662,5664,5666,5668,5670,5672],{"class":213,"line":940},[211,5661,3171],{"class":496},[211,5663,4885],{"class":336},[211,5665,523],{"class":340},[211,5667,4727],{"class":332},[211,5669,337],{"class":347},[211,5671,3312],{"class":336},[211,5673,428],{"class":347},[211,5675,5676,5679,5681,5683,5685,5687,5689],{"class":213,"line":1276},[211,5677,5678],{"class":336},"    set",[211,5680,673],{"class":340},[211,5682,3288],{"class":336},[211,5684,523],{"class":340},[211,5686,4885],{"class":336},[211,5688,673],{"class":340},[211,5690,5691],{"class":336},"status\n",[211,5693,5694,5696,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718,5720,5722,5724,5726,5728,5730,5732],{"class":213,"line":1286},[211,5695,5197],{"class":325},[211,5697,466],{"class":340},[211,5699,4780],{"class":347},[211,5701,351],{"class":340},[211,5703,4885],{"class":336},[211,5705,673],{"class":340},[211,5707,4933],{"class":336},[211,5709,505],{"class":340},[211,5711,4803],{"class":347},[211,5713,351],{"class":340},[211,5715,4885],{"class":336},[211,5717,673],{"class":340},[211,5719,2910],{"class":336},[211,5721,505],{"class":340},[211,5723,4950],{"class":347},[211,5725,351],{"class":340},[211,5727,4885],{"class":336},[211,5729,673],{"class":340},[211,5731,2913],{"class":336},[211,5733,937],{"class":340},[211,5735,5736,5738],{"class":213,"line":1296},[211,5737,5212],{"class":340},[211,5739,428],{"class":336},[946,5741,4137,5742,4141],{"color":1886,"icon":1887},[299,5743,5744],{"href":163},"Elysia example",[269,5746,167],{"id":5747},"fastify",[188,5749,5750,5751,4151,5754,4155,5757,4158],{},"evlog provides a Fastify plugin at ",[208,5752,5753],{},"evlog/fastify",[208,5755,5756],{},"request.log",[208,5758,1770],{},[200,5760,5762],{"className":202,"code":5761,"language":205,"meta":206,"style":206},"npm install evlog fastify\n",[208,5763,5764],{"__ignoreMap":206},[211,5765,5766,5768,5770,5772],{"class":213,"line":214},[211,5767,228],{"class":217},[211,5769,237],{"class":220},[211,5771,3467],{"class":220},[211,5773,5774],{"class":220}," fastify\n",[200,5776,5778],{"className":315,"code":5777,"filename":3065,"language":318,"meta":206,"style":206},"import Fastify from 'fastify'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog/fastify'\n\ninitLogger({\n  env: { service: 'fastify-api' },\n})\n\nconst app = Fastify({ logger: false })\n\nawait app.register(evlog)\n\napp.get('/api/users', async (request) => {\n  request.log.set({ users: { count: 42 } })\n  return { users: [] }\n})\n\nawait app.listen({ port: 3000 })\n",[208,5779,5780,5795,5813,5831,5835,5843,5864,5870,5874,5901,5905,5920,5924,5954,5989,6003,6009,6013],{"__ignoreMap":206},[211,5781,5782,5784,5787,5789,5791,5793],{"class":213,"line":214},[211,5783,463],{"class":325},[211,5785,5786],{"class":336}," Fastify ",[211,5788,1938],{"class":325},[211,5790,400],{"class":340},[211,5792,5747],{"class":220},[211,5794,483],{"class":340},[211,5796,5797,5799,5801,5803,5805,5807,5809,5811],{"class":213,"line":344},[211,5798,463],{"class":325},[211,5800,466],{"class":340},[211,5802,3523],{"class":336},[211,5804,472],{"class":340},[211,5806,475],{"class":325},[211,5808,400],{"class":340},[211,5810,2429],{"class":220},[211,5812,483],{"class":340},[211,5814,5815,5817,5819,5821,5823,5825,5827,5829],{"class":213,"line":371},[211,5816,463],{"class":325},[211,5818,466],{"class":340},[211,5820,3467],{"class":336},[211,5822,472],{"class":340},[211,5824,475],{"class":325},[211,5826,400],{"class":340},[211,5828,5753],{"class":220},[211,5830,483],{"class":340},[211,5832,5833],{"class":213,"line":382},[211,5834,489],{"emptyLinePlaceholder":488},[211,5836,5837,5839,5841],{"class":213,"line":392},[211,5838,3567],{"class":332},[211,5840,337],{"class":336},[211,5842,341],{"class":340},[211,5844,5845,5847,5849,5851,5853,5855,5857,5860,5862],{"class":213,"line":410},[211,5846,3110],{"class":347},[211,5848,351],{"class":340},[211,5850,466],{"class":340},[211,5852,1230],{"class":347},[211,5854,351],{"class":340},[211,5856,400],{"class":340},[211,5858,5859],{"class":220},"fastify-api",[211,5861,357],{"class":340},[211,5863,2002],{"class":340},[211,5865,5866,5868],{"class":213,"line":416},[211,5867,425],{"class":340},[211,5869,428],{"class":336},[211,5871,5872],{"class":213,"line":422},[211,5873,489],{"emptyLinePlaceholder":488},[211,5875,5876,5878,5880,5882,5885,5887,5889,5892,5894,5897,5899],{"class":213,"line":940},[211,5877,3607],{"class":496},[211,5879,3610],{"class":336},[211,5881,621],{"class":340},[211,5883,5884],{"class":332}," Fastify",[211,5886,337],{"class":336},[211,5888,681],{"class":340},[211,5890,5891],{"class":347}," logger",[211,5893,351],{"class":340},[211,5895,5896],{"class":731}," false",[211,5898,472],{"class":340},[211,5900,428],{"class":336},[211,5902,5903],{"class":213,"line":1276},[211,5904,489],{"emptyLinePlaceholder":488},[211,5906,5907,5910,5912,5914,5917],{"class":213,"line":1286},[211,5908,5909],{"class":325},"await",[211,5911,3791],{"class":336},[211,5913,673],{"class":340},[211,5915,5916],{"class":332},"register",[211,5918,5919],{"class":336},"(evlog)\n",[211,5921,5922],{"class":213,"line":1296},[211,5923,489],{"emptyLinePlaceholder":488},[211,5925,5926,5928,5930,5932,5934,5936,5938,5940,5942,5944,5946,5948,5950,5952],{"class":213,"line":1302},[211,5927,3636],{"class":336},[211,5929,673],{"class":340},[211,5931,906],{"class":332},[211,5933,337],{"class":336},[211,5935,357],{"class":340},[211,5937,3667],{"class":220},[211,5939,357],{"class":340},[211,5941,505],{"class":340},[211,5943,2735],{"class":496},[211,5945,631],{"class":340},[211,5947,635],{"class":634},[211,5949,642],{"class":340},[211,5951,645],{"class":496},[211,5953,379],{"class":340},[211,5955,5956,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987],{"class":213,"line":2842},[211,5957,5958],{"class":336},"  request",[211,5960,673],{"class":340},[211,5962,1310],{"class":336},[211,5964,673],{"class":340},[211,5966,676],{"class":332},[211,5968,337],{"class":347},[211,5970,681],{"class":340},[211,5972,3722],{"class":347},[211,5974,351],{"class":340},[211,5976,466],{"class":340},[211,5978,3729],{"class":347},[211,5980,351],{"class":340},[211,5982,3734],{"class":3259},[211,5984,472],{"class":340},[211,5986,472],{"class":340},[211,5988,428],{"class":347},[211,5990,5991,5993,5995,5997,5999,6001],{"class":213,"line":2868},[211,5992,711],{"class":325},[211,5994,466],{"class":340},[211,5996,3722],{"class":347},[211,5998,351],{"class":340},[211,6000,3761],{"class":347},[211,6002,1074],{"class":340},[211,6004,6005,6007],{"class":213,"line":2874},[211,6006,425],{"class":340},[211,6008,428],{"class":336},[211,6010,6011],{"class":213,"line":2879},[211,6012,489],{"emptyLinePlaceholder":488},[211,6014,6015,6017,6019,6021,6023,6025,6027,6029,6031,6033,6035],{"class":213,"line":2884},[211,6016,5909],{"class":325},[211,6018,3791],{"class":336},[211,6020,673],{"class":340},[211,6022,4419],{"class":332},[211,6024,337],{"class":336},[211,6026,681],{"class":340},[211,6028,3801],{"class":347},[211,6030,351],{"class":340},[211,6032,3806],{"class":3259},[211,6034,472],{"class":340},[211,6036,428],{"class":336},[188,6038,5229],{},[200,6040,6042],{"className":315,"code":6041,"language":318,"meta":206,"style":206},"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",[208,6043,6044,6062,6080,6084,6096,6100,6117,6135,6153,6161,6185,6189,6201,6217,6227,6251,6255,6271,6307,6311],{"__ignoreMap":206},[211,6045,6046,6048,6050,6052,6054,6056,6058,6060],{"class":213,"line":214},[211,6047,463],{"class":325},[211,6049,466],{"class":340},[211,6051,3831],{"class":336},[211,6053,472],{"class":340},[211,6055,475],{"class":325},[211,6057,400],{"class":340},[211,6059,3840],{"class":220},[211,6061,483],{"class":340},[211,6063,6064,6066,6068,6070,6072,6074,6076,6078],{"class":213,"line":344},[211,6065,463],{"class":325},[211,6067,466],{"class":340},[211,6069,3851],{"class":336},[211,6071,472],{"class":340},[211,6073,475],{"class":325},[211,6075,400],{"class":340},[211,6077,3860],{"class":220},[211,6079,483],{"class":340},[211,6081,6082],{"class":213,"line":371},[211,6083,489],{"emptyLinePlaceholder":488},[211,6085,6086,6088,6090,6092,6094],{"class":213,"line":382},[211,6087,3607],{"class":496},[211,6089,3873],{"class":336},[211,6091,621],{"class":340},[211,6093,3851],{"class":332},[211,6095,839],{"class":336},[211,6097,6098],{"class":213,"line":392},[211,6099,489],{"emptyLinePlaceholder":488},[211,6101,6102,6104,6106,6108,6110,6113,6115],{"class":213,"line":410},[211,6103,5909],{"class":325},[211,6105,3791],{"class":336},[211,6107,673],{"class":340},[211,6109,5916],{"class":332},[211,6111,6112],{"class":336},"(evlog",[211,6114,505],{"class":340},[211,6116,379],{"class":340},[211,6118,6119,6121,6123,6125,6127,6129,6131,6133],{"class":213,"line":416},[211,6120,3904],{"class":347},[211,6122,351],{"class":340},[211,6124,354],{"class":336},[211,6126,357],{"class":340},[211,6128,3913],{"class":220},[211,6130,357],{"class":340},[211,6132,365],{"class":336},[211,6134,368],{"class":340},[211,6136,6137,6139,6141,6143,6145,6147,6149,6151],{"class":213,"line":422},[211,6138,3924],{"class":347},[211,6140,351],{"class":340},[211,6142,354],{"class":336},[211,6144,357],{"class":340},[211,6146,3933],{"class":220},[211,6148,357],{"class":340},[211,6150,365],{"class":336},[211,6152,368],{"class":340},[211,6154,6155,6157,6159],{"class":213,"line":940},[211,6156,3944],{"class":347},[211,6158,351],{"class":340},[211,6160,379],{"class":340},[211,6162,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183],{"class":213,"line":1276},[211,6164,3953],{"class":340},[211,6166,3956],{"class":347},[211,6168,357],{"class":340},[211,6170,351],{"class":340},[211,6172,466],{"class":340},[211,6174,1230],{"class":347},[211,6176,351],{"class":340},[211,6178,400],{"class":340},[211,6180,3971],{"class":220},[211,6182,357],{"class":340},[211,6184,2002],{"class":340},[211,6186,6187],{"class":213,"line":1286},[211,6188,419],{"class":340},[211,6190,6191,6193,6195,6197,6199],{"class":213,"line":1296},[211,6192,3984],{"class":347},[211,6194,351],{"class":340},[211,6196,3831],{"class":332},[211,6198,1360],{"class":336},[211,6200,368],{"class":340},[211,6202,6203,6205,6207,6209,6211,6213,6215],{"class":213,"line":1302},[211,6204,3997],{"class":332},[211,6206,351],{"class":340},[211,6208,631],{"class":340},[211,6210,4004],{"class":634},[211,6212,642],{"class":340},[211,6214,645],{"class":496},[211,6216,379],{"class":340},[211,6218,6219,6221,6223,6225],{"class":213,"line":2842},[211,6220,4015],{"class":332},[211,6222,337],{"class":347},[211,6224,4004],{"class":336},[211,6226,428],{"class":347},[211,6228,6229,6231,6233,6235,6237,6239,6241,6243,6245,6247,6249],{"class":213,"line":2868},[211,6230,4026],{"class":336},[211,6232,673],{"class":340},[211,6234,2092],{"class":336},[211,6236,673],{"class":340},[211,6238,4035],{"class":336},[211,6240,523],{"class":340},[211,6242,4040],{"class":336},[211,6244,673],{"class":340},[211,6246,1531],{"class":336},[211,6248,673],{"class":340},[211,6250,4049],{"class":336},[211,6252,6253],{"class":213,"line":2874},[211,6254,419],{"class":340},[211,6256,6257,6259,6261,6263,6265,6267,6269],{"class":213,"line":2879},[211,6258,4058],{"class":332},[211,6260,351],{"class":340},[211,6262,631],{"class":340},[211,6264,4004],{"class":634},[211,6266,642],{"class":340},[211,6268,645],{"class":496},[211,6270,379],{"class":340},[211,6272,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295,6297,6299,6301,6303,6305],{"class":213,"line":2884},[211,6274,4075],{"class":325},[211,6276,631],{"class":347},[211,6278,4004],{"class":336},[211,6280,673],{"class":340},[211,6282,4084],{"class":336},[211,6284,4087],{"class":340},[211,6286,4090],{"class":336},[211,6288,673],{"class":340},[211,6290,4084],{"class":336},[211,6292,4097],{"class":340},[211,6294,4100],{"class":3259},[211,6296,918],{"class":347},[211,6298,4004],{"class":336},[211,6300,673],{"class":340},[211,6302,4109],{"class":336},[211,6304,523],{"class":340},[211,6306,4114],{"class":731},[211,6308,6309],{"class":213,"line":3361},[211,6310,419],{"class":340},[211,6312,6313,6315],{"class":213,"line":3370},[211,6314,425],{"class":340},[211,6316,428],{"class":336},[188,6318,3429,6319,6321],{},[208,6320,1770],{}," to access the logger from anywhere in the call stack:",[200,6323,6325],{"className":315,"code":6324,"language":318,"meta":206,"style":206},"import { useLogger } from 'evlog/fastify'\n\nfunction findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n}\n",[208,6326,6327,6345,6349,6371,6383,6409],{"__ignoreMap":206},[211,6328,6329,6331,6333,6335,6337,6339,6341,6343],{"class":213,"line":214},[211,6330,463],{"class":325},[211,6332,466],{"class":340},[211,6334,508],{"class":336},[211,6336,472],{"class":340},[211,6338,475],{"class":325},[211,6340,400],{"class":340},[211,6342,5753],{"class":220},[211,6344,483],{"class":340},[211,6346,6347],{"class":213,"line":344},[211,6348,489],{"emptyLinePlaceholder":488},[211,6350,6351,6354,6357,6359,6362,6364,6367,6369],{"class":213,"line":371},[211,6352,6353],{"class":496},"function",[211,6355,6356],{"class":332}," findUser",[211,6358,337],{"class":340},[211,6360,6361],{"class":634},"id",[211,6363,351],{"class":340},[211,6365,6366],{"class":217}," string",[211,6368,642],{"class":340},[211,6370,379],{"class":340},[211,6372,6373,6375,6377,6379,6381],{"class":213,"line":382},[211,6374,652],{"class":496},[211,6376,513],{"class":336},[211,6378,523],{"class":340},[211,6380,508],{"class":332},[211,6382,839],{"class":347},[211,6384,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403,6405,6407],{"class":213,"line":392},[211,6386,670],{"class":336},[211,6388,673],{"class":340},[211,6390,676],{"class":332},[211,6392,337],{"class":347},[211,6394,681],{"class":340},[211,6396,684],{"class":347},[211,6398,351],{"class":340},[211,6400,466],{"class":340},[211,6402,691],{"class":336},[211,6404,472],{"class":340},[211,6406,472],{"class":340},[211,6408,428],{"class":347},[211,6410,6411],{"class":213,"line":410},[211,6412,1074],{"class":340},[946,6414,6415,2423,6417,6419,6420,6423],{"color":948,"icon":13},[2420,6416,2422],{},[208,6418,5756],{}," is the evlog wide-event logger (shadows Fastify's built-in pino logger on the request). Fastify's pino logger remains accessible via ",[208,6421,6422],{},"fastify.log"," for server-level structured logging.",[946,6425,4137,6426,4141],{"color":1886,"icon":1887},[299,6427,6428],{"href":168},"Fastify example",[269,6430,172],{"id":6431},"nestjs",[188,6433,6434,6435,6438,6439,4151,6442,4155,6444,4158],{},"evlog provides a NestJS module at ",[208,6436,6437],{},"evlog/nestjs"," with ",[208,6440,6441],{},"EvlogModule.forRoot()",[208,6443,4154],{},[208,6445,1770],{},[200,6447,6449],{"className":202,"code":6448,"language":205,"meta":206,"style":206},"npm install evlog @nestjs/common @nestjs/core @nestjs/platform-express\n",[208,6450,6451],{"__ignoreMap":206},[211,6452,6453,6455,6457,6459,6462,6465],{"class":213,"line":214},[211,6454,228],{"class":217},[211,6456,237],{"class":220},[211,6458,3467],{"class":220},[211,6460,6461],{"class":220}," @nestjs/common",[211,6463,6464],{"class":220}," @nestjs/core",[211,6466,6467],{"class":220}," @nestjs/platform-express\n",[188,6469,6470,6471,6474],{},"Register ",[208,6472,6473],{},"EvlogModule"," in your app module:",[200,6476,6479],{"className":315,"code":6477,"filename":6478,"language":318,"meta":206,"style":206},"import { Module } from '@nestjs/common'\nimport { EvlogModule } from 'evlog/nestjs'\n\n@Module({\n  imports: [\n    EvlogModule.forRoot(),\n  ],\n})\nexport class AppModule {}\n","src/app.module.ts",[208,6480,6481,6501,6520,6524,6536,6545,6559,6565,6571],{"__ignoreMap":206},[211,6482,6483,6485,6487,6490,6492,6494,6496,6499],{"class":213,"line":214},[211,6484,463],{"class":325},[211,6486,466],{"class":340},[211,6488,6489],{"class":336}," Module",[211,6491,472],{"class":340},[211,6493,475],{"class":325},[211,6495,400],{"class":340},[211,6497,6498],{"class":220},"@nestjs/common",[211,6500,483],{"class":340},[211,6502,6503,6505,6507,6510,6512,6514,6516,6518],{"class":213,"line":344},[211,6504,463],{"class":325},[211,6506,466],{"class":340},[211,6508,6509],{"class":336}," EvlogModule",[211,6511,472],{"class":340},[211,6513,475],{"class":325},[211,6515,400],{"class":340},[211,6517,6437],{"class":220},[211,6519,483],{"class":340},[211,6521,6522],{"class":213,"line":371},[211,6523,489],{"emptyLinePlaceholder":488},[211,6525,6526,6529,6532,6534],{"class":213,"line":382},[211,6527,6528],{"class":340},"@",[211,6530,6531],{"class":332},"Module",[211,6533,337],{"class":336},[211,6535,341],{"class":340},[211,6537,6538,6541,6543],{"class":213,"line":392},[211,6539,6540],{"class":347},"  imports",[211,6542,351],{"class":340},[211,6544,1970],{"class":336},[211,6546,6547,6550,6552,6555,6557],{"class":213,"line":410},[211,6548,6549],{"class":336},"    EvlogModule",[211,6551,673],{"class":340},[211,6553,6554],{"class":332},"forRoot",[211,6556,1360],{"class":336},[211,6558,368],{"class":340},[211,6560,6561,6563],{"class":213,"line":416},[211,6562,2014],{"class":336},[211,6564,368],{"class":340},[211,6566,6567,6569],{"class":213,"line":422},[211,6568,425],{"class":340},[211,6570,428],{"class":336},[211,6572,6573,6575,6578,6581],{"class":213,"line":940},[211,6574,326],{"class":325},[211,6576,6577],{"class":496}," class",[211,6579,6580],{"class":217}," AppModule",[211,6582,6583],{"class":340}," {}\n",[188,6585,6586],{},"Initialize evlog in your bootstrap and create the NestJS app:",[200,6588,6591],{"className":315,"code":6589,"filename":6590,"language":318,"meta":206,"style":206},"import { NestFactory } from '@nestjs/core'\nimport { initLogger } from 'evlog'\nimport { AppModule } from './app.module'\n\ninitLogger({ env: { service: 'nestjs-api' } })\n\nconst app = await NestFactory.create(AppModule)\nawait app.listen(3000)\n","src/main.ts",[208,6592,6593,6613,6631,6650,6654,6686,6690,6711],{"__ignoreMap":206},[211,6594,6595,6597,6599,6602,6604,6606,6608,6611],{"class":213,"line":214},[211,6596,463],{"class":325},[211,6598,466],{"class":340},[211,6600,6601],{"class":336}," NestFactory",[211,6603,472],{"class":340},[211,6605,475],{"class":325},[211,6607,400],{"class":340},[211,6609,6610],{"class":220},"@nestjs/core",[211,6612,483],{"class":340},[211,6614,6615,6617,6619,6621,6623,6625,6627,6629],{"class":213,"line":344},[211,6616,463],{"class":325},[211,6618,466],{"class":340},[211,6620,3523],{"class":336},[211,6622,472],{"class":340},[211,6624,475],{"class":325},[211,6626,400],{"class":340},[211,6628,2429],{"class":220},[211,6630,483],{"class":340},[211,6632,6633,6635,6637,6639,6641,6643,6645,6648],{"class":213,"line":371},[211,6634,463],{"class":325},[211,6636,466],{"class":340},[211,6638,6580],{"class":336},[211,6640,472],{"class":340},[211,6642,475],{"class":325},[211,6644,400],{"class":340},[211,6646,6647],{"class":220},"./app.module",[211,6649,483],{"class":340},[211,6651,6652],{"class":213,"line":382},[211,6653,489],{"emptyLinePlaceholder":488},[211,6655,6656,6658,6660,6662,6665,6667,6669,6671,6673,6675,6678,6680,6682,6684],{"class":213,"line":392},[211,6657,3567],{"class":332},[211,6659,337],{"class":336},[211,6661,681],{"class":340},[211,6663,6664],{"class":347}," env",[211,6666,351],{"class":340},[211,6668,466],{"class":340},[211,6670,1230],{"class":347},[211,6672,351],{"class":340},[211,6674,400],{"class":340},[211,6676,6677],{"class":220},"nestjs-api",[211,6679,357],{"class":340},[211,6681,472],{"class":340},[211,6683,472],{"class":340},[211,6685,428],{"class":336},[211,6687,6688],{"class":213,"line":410},[211,6689,489],{"emptyLinePlaceholder":488},[211,6691,6692,6694,6696,6698,6701,6703,6705,6708],{"class":213,"line":416},[211,6693,3607],{"class":496},[211,6695,3610],{"class":336},[211,6697,621],{"class":340},[211,6699,6700],{"class":325}," await",[211,6702,6601],{"class":336},[211,6704,673],{"class":340},[211,6706,6707],{"class":332},"create",[211,6709,6710],{"class":336},"(AppModule)\n",[211,6712,6713,6715,6717,6719,6721,6723,6725],{"class":213,"line":422},[211,6714,5909],{"class":325},[211,6716,3791],{"class":336},[211,6718,673],{"class":340},[211,6720,4419],{"class":332},[211,6722,337],{"class":336},[211,6724,4424],{"class":3259},[211,6726,428],{"class":336},[188,6728,3429,6729,6731],{},[208,6730,1770],{}," to access the request-scoped logger from any controller or service:",[200,6733,6736],{"className":315,"code":6734,"filename":6735,"language":318,"meta":206,"style":206},"import { Controller, Get, Param } from '@nestjs/common'\nimport { useLogger } from 'evlog/nestjs'\n\n@Controller('users')\nexport class UsersController {\n  @Get(':id')\n  findOne(@Param('id') id: string) {\n    const log = useLogger()\n    log.set({ user: { id } })\n    return { id, name: 'Alice' }\n  }\n}\n","src/users.controller.ts",[208,6737,6738,6767,6785,6789,6807,6818,6837,6868,6880,6906,6930,6935],{"__ignoreMap":206},[211,6739,6740,6742,6744,6747,6749,6752,6754,6757,6759,6761,6763,6765],{"class":213,"line":214},[211,6741,463],{"class":325},[211,6743,466],{"class":340},[211,6745,6746],{"class":336}," Controller",[211,6748,505],{"class":340},[211,6750,6751],{"class":336}," Get",[211,6753,505],{"class":340},[211,6755,6756],{"class":336}," Param",[211,6758,472],{"class":340},[211,6760,475],{"class":325},[211,6762,400],{"class":340},[211,6764,6498],{"class":220},[211,6766,483],{"class":340},[211,6768,6769,6771,6773,6775,6777,6779,6781,6783],{"class":213,"line":344},[211,6770,463],{"class":325},[211,6772,466],{"class":340},[211,6774,508],{"class":336},[211,6776,472],{"class":340},[211,6778,475],{"class":325},[211,6780,400],{"class":340},[211,6782,6437],{"class":220},[211,6784,483],{"class":340},[211,6786,6787],{"class":213,"line":371},[211,6788,489],{"emptyLinePlaceholder":488},[211,6790,6791,6793,6796,6798,6800,6803,6805],{"class":213,"line":382},[211,6792,6528],{"class":340},[211,6794,6795],{"class":332},"Controller",[211,6797,337],{"class":336},[211,6799,357],{"class":340},[211,6801,6802],{"class":220},"users",[211,6804,357],{"class":340},[211,6806,428],{"class":336},[211,6808,6809,6811,6813,6816],{"class":213,"line":392},[211,6810,326],{"class":325},[211,6812,6577],{"class":496},[211,6814,6815],{"class":217}," UsersController",[211,6817,379],{"class":340},[211,6819,6820,6823,6826,6828,6830,6833,6835],{"class":213,"line":410},[211,6821,6822],{"class":340},"  @",[211,6824,6825],{"class":332},"Get",[211,6827,337],{"class":336},[211,6829,357],{"class":340},[211,6831,6832],{"class":220},":id",[211,6834,357],{"class":340},[211,6836,428],{"class":336},[211,6838,6839,6842,6845,6848,6850,6852,6854,6856,6858,6860,6862,6864,6866],{"class":213,"line":416},[211,6840,6841],{"class":347},"  findOne",[211,6843,6844],{"class":340},"(@",[211,6846,6847],{"class":332},"Param",[211,6849,337],{"class":336},[211,6851,357],{"class":340},[211,6853,6361],{"class":220},[211,6855,357],{"class":340},[211,6857,918],{"class":336},[211,6859,6361],{"class":634},[211,6861,351],{"class":340},[211,6863,6366],{"class":217},[211,6865,642],{"class":340},[211,6867,379],{"class":340},[211,6869,6870,6872,6874,6876,6878],{"class":213,"line":422},[211,6871,3171],{"class":496},[211,6873,513],{"class":336},[211,6875,523],{"class":340},[211,6877,508],{"class":332},[211,6879,839],{"class":347},[211,6881,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904],{"class":213,"line":940},[211,6883,5166],{"class":336},[211,6885,673],{"class":340},[211,6887,676],{"class":332},[211,6889,337],{"class":347},[211,6891,681],{"class":340},[211,6893,684],{"class":347},[211,6895,351],{"class":340},[211,6897,466],{"class":340},[211,6899,691],{"class":336},[211,6901,472],{"class":340},[211,6903,472],{"class":340},[211,6905,428],{"class":347},[211,6907,6908,6910,6912,6914,6916,6919,6921,6923,6926,6928],{"class":213,"line":1276},[211,6909,5197],{"class":325},[211,6911,466],{"class":340},[211,6913,691],{"class":336},[211,6915,505],{"class":340},[211,6917,6918],{"class":347}," name",[211,6920,351],{"class":340},[211,6922,400],{"class":340},[211,6924,6925],{"class":220},"Alice",[211,6927,357],{"class":340},[211,6929,937],{"class":340},[211,6931,6932],{"class":213,"line":1286},[211,6933,6934],{"class":340},"  }\n",[211,6936,6937],{"class":213,"line":1296},[211,6938,1074],{"class":340},[188,6940,6941],{},"The module supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,6943,6945],{"className":315,"code":6944,"filename":6478,"language":318,"meta":206,"style":206},"import { Module } from '@nestjs/common'\nimport { EvlogModule } from 'evlog/nestjs'\nimport { createAxiomDrain } from 'evlog/axiom'\n\n@Module({\n  imports: [\n    EvlogModule.forRoot({\n      include: ['/api/**'],\n      exclude: ['/_internal/**'],\n      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n      },\n      drain: createAxiomDrain(),\n      enrich: (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  ],\n})\nexport class AppModule {}\n",[208,6946,6947,6965,6983,7001,7005,7015,7023,7035,7054,7073,7082,7107,7111,7124,7141,7166,7170,7187,7224,7228,7236,7242,7248],{"__ignoreMap":206},[211,6948,6949,6951,6953,6955,6957,6959,6961,6963],{"class":213,"line":214},[211,6950,463],{"class":325},[211,6952,466],{"class":340},[211,6954,6489],{"class":336},[211,6956,472],{"class":340},[211,6958,475],{"class":325},[211,6960,400],{"class":340},[211,6962,6498],{"class":220},[211,6964,483],{"class":340},[211,6966,6967,6969,6971,6973,6975,6977,6979,6981],{"class":213,"line":344},[211,6968,463],{"class":325},[211,6970,466],{"class":340},[211,6972,6509],{"class":336},[211,6974,472],{"class":340},[211,6976,475],{"class":325},[211,6978,400],{"class":340},[211,6980,6437],{"class":220},[211,6982,483],{"class":340},[211,6984,6985,6987,6989,6991,6993,6995,6997,6999],{"class":213,"line":371},[211,6986,463],{"class":325},[211,6988,466],{"class":340},[211,6990,3831],{"class":336},[211,6992,472],{"class":340},[211,6994,475],{"class":325},[211,6996,400],{"class":340},[211,6998,3840],{"class":220},[211,7000,483],{"class":340},[211,7002,7003],{"class":213,"line":382},[211,7004,489],{"emptyLinePlaceholder":488},[211,7006,7007,7009,7011,7013],{"class":213,"line":392},[211,7008,6528],{"class":340},[211,7010,6531],{"class":332},[211,7012,337],{"class":336},[211,7014,341],{"class":340},[211,7016,7017,7019,7021],{"class":213,"line":410},[211,7018,6540],{"class":347},[211,7020,351],{"class":340},[211,7022,1970],{"class":336},[211,7024,7025,7027,7029,7031,7033],{"class":213,"line":416},[211,7026,6549],{"class":336},[211,7028,673],{"class":340},[211,7030,6554],{"class":332},[211,7032,337],{"class":336},[211,7034,341],{"class":340},[211,7036,7037,7040,7042,7044,7046,7048,7050,7052],{"class":213,"line":422},[211,7038,7039],{"class":347},"      include",[211,7041,351],{"class":340},[211,7043,354],{"class":336},[211,7045,357],{"class":340},[211,7047,3913],{"class":220},[211,7049,357],{"class":340},[211,7051,365],{"class":336},[211,7053,368],{"class":340},[211,7055,7056,7059,7061,7063,7065,7067,7069,7071],{"class":213,"line":940},[211,7057,7058],{"class":347},"      exclude",[211,7060,351],{"class":340},[211,7062,354],{"class":336},[211,7064,357],{"class":340},[211,7066,3933],{"class":220},[211,7068,357],{"class":340},[211,7070,365],{"class":336},[211,7072,368],{"class":340},[211,7074,7075,7078,7080],{"class":213,"line":1276},[211,7076,7077],{"class":347},"      routes",[211,7079,351],{"class":340},[211,7081,379],{"class":340},[211,7083,7084,7087,7089,7091,7093,7095,7097,7099,7101,7103,7105],{"class":213,"line":1286},[211,7085,7086],{"class":340},"        '",[211,7088,3956],{"class":347},[211,7090,357],{"class":340},[211,7092,351],{"class":340},[211,7094,466],{"class":340},[211,7096,1230],{"class":347},[211,7098,351],{"class":340},[211,7100,400],{"class":340},[211,7102,3971],{"class":220},[211,7104,357],{"class":340},[211,7106,2002],{"class":340},[211,7108,7109],{"class":213,"line":1296},[211,7110,2871],{"class":340},[211,7112,7113,7116,7118,7120,7122],{"class":213,"line":1302},[211,7114,7115],{"class":347},"      drain",[211,7117,351],{"class":340},[211,7119,3831],{"class":332},[211,7121,1360],{"class":336},[211,7123,368],{"class":340},[211,7125,7126,7129,7131,7133,7135,7137,7139],{"class":213,"line":2842},[211,7127,7128],{"class":332},"      enrich",[211,7130,351],{"class":340},[211,7132,631],{"class":340},[211,7134,4004],{"class":634},[211,7136,642],{"class":340},[211,7138,645],{"class":496},[211,7140,379],{"class":340},[211,7142,7143,7146,7148,7150,7152,7154,7156,7158,7160,7162,7164],{"class":213,"line":2868},[211,7144,7145],{"class":336},"        ctx",[211,7147,673],{"class":340},[211,7149,2092],{"class":336},[211,7151,673],{"class":340},[211,7153,4035],{"class":336},[211,7155,523],{"class":340},[211,7157,4040],{"class":336},[211,7159,673],{"class":340},[211,7161,1531],{"class":336},[211,7163,673],{"class":340},[211,7165,4049],{"class":336},[211,7167,7168],{"class":213,"line":2874},[211,7169,2871],{"class":340},[211,7171,7172,7175,7177,7179,7181,7183,7185],{"class":213,"line":2879},[211,7173,7174],{"class":332},"      keep",[211,7176,351],{"class":340},[211,7178,631],{"class":340},[211,7180,4004],{"class":634},[211,7182,642],{"class":340},[211,7184,645],{"class":496},[211,7186,379],{"class":340},[211,7188,7189,7192,7194,7196,7198,7200,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222],{"class":213,"line":2884},[211,7190,7191],{"class":325},"        if",[211,7193,631],{"class":347},[211,7195,4004],{"class":336},[211,7197,673],{"class":340},[211,7199,4084],{"class":336},[211,7201,4087],{"class":340},[211,7203,4090],{"class":336},[211,7205,673],{"class":340},[211,7207,4084],{"class":336},[211,7209,4097],{"class":340},[211,7211,4100],{"class":3259},[211,7213,918],{"class":347},[211,7215,4004],{"class":336},[211,7217,673],{"class":340},[211,7219,4109],{"class":336},[211,7221,523],{"class":340},[211,7223,4114],{"class":731},[211,7225,7226],{"class":213,"line":3361},[211,7227,2871],{"class":340},[211,7229,7230,7232,7234],{"class":213,"line":3370},[211,7231,2007],{"class":340},[211,7233,642],{"class":336},[211,7235,368],{"class":340},[211,7237,7238,7240],{"class":213,"line":3376},[211,7239,2014],{"class":336},[211,7241,368],{"class":340},[211,7243,7244,7246],{"class":213,"line":3381},[211,7245,425],{"class":340},[211,7247,428],{"class":336},[211,7249,7251,7253,7255,7257],{"class":213,"line":7250},23,[211,7252,326],{"class":325},[211,7254,6577],{"class":496},[211,7256,6580],{"class":217},[211,7258,6583],{"class":340},[188,7260,7261,7262,7265,7266,351],{},"For async configuration (e.g. from ",[208,7263,7264],{},"ConfigService","), use ",[208,7267,7268],{},"forRootAsync()",[200,7270,7272],{"className":315,"code":7271,"filename":6478,"language":318,"meta":206,"style":206},"EvlogModule.forRootAsync({\n  imports: [ConfigModule],\n  inject: [ConfigService],\n  useFactory: (config: ConfigService) => ({\n    drain: createAxiomDrain({ token: config.get('AXIOM_TOKEN') }),\n  }),\n})\n",[208,7273,7274,7287,7298,7310,7335,7377,7385],{"__ignoreMap":206},[211,7275,7276,7278,7280,7283,7285],{"class":213,"line":214},[211,7277,6473],{"class":336},[211,7279,673],{"class":340},[211,7281,7282],{"class":332},"forRootAsync",[211,7284,337],{"class":336},[211,7286,341],{"class":340},[211,7288,7289,7291,7293,7296],{"class":213,"line":344},[211,7290,6540],{"class":347},[211,7292,351],{"class":340},[211,7294,7295],{"class":336}," [ConfigModule]",[211,7297,368],{"class":340},[211,7299,7300,7303,7305,7308],{"class":213,"line":371},[211,7301,7302],{"class":347},"  inject",[211,7304,351],{"class":340},[211,7306,7307],{"class":336}," [ConfigService]",[211,7309,368],{"class":340},[211,7311,7312,7315,7317,7319,7322,7324,7327,7329,7331,7333],{"class":213,"line":382},[211,7313,7314],{"class":332},"  useFactory",[211,7316,351],{"class":340},[211,7318,631],{"class":340},[211,7320,7321],{"class":634},"config",[211,7323,351],{"class":340},[211,7325,7326],{"class":217}," ConfigService",[211,7328,642],{"class":340},[211,7330,645],{"class":496},[211,7332,631],{"class":336},[211,7334,341],{"class":340},[211,7336,7337,7340,7342,7344,7346,7348,7351,7353,7356,7358,7360,7362,7364,7367,7369,7371,7373,7375],{"class":213,"line":392},[211,7338,7339],{"class":347},"    drain",[211,7341,351],{"class":340},[211,7343,3831],{"class":332},[211,7345,337],{"class":336},[211,7347,681],{"class":340},[211,7349,7350],{"class":347}," token",[211,7352,351],{"class":340},[211,7354,7355],{"class":336}," config",[211,7357,673],{"class":340},[211,7359,906],{"class":332},[211,7361,337],{"class":336},[211,7363,357],{"class":340},[211,7365,7366],{"class":220},"AXIOM_TOKEN",[211,7368,357],{"class":340},[211,7370,918],{"class":336},[211,7372,425],{"class":340},[211,7374,642],{"class":336},[211,7376,368],{"class":340},[211,7378,7379,7381,7383],{"class":213,"line":410},[211,7380,5212],{"class":340},[211,7382,642],{"class":336},[211,7384,368],{"class":340},[211,7386,7387,7389],{"class":213,"line":416},[211,7388,425],{"class":340},[211,7390,428],{"class":336},[188,7392,7393,7394,959,7396,351],{},"Handle errors with a NestJS exception filter using ",[208,7395,1770],{},[208,7397,7398],{},"parseError()",[200,7400,7403],{"className":315,"code":7401,"filename":7402,"language":318,"meta":206,"style":206},"import { Catch } from '@nestjs/common'\nimport type { ExceptionFilter, ArgumentsHost } from '@nestjs/common'\nimport { parseError } from 'evlog'\nimport { useLogger } from 'evlog/nestjs'\n\n@Catch()\nexport class EvlogExceptionFilter implements ExceptionFilter {\n  catch(exception: unknown, host: ArgumentsHost) {\n    const response = host.switchToHttp().getResponse()\n    const error = exception instanceof Error ? exception : new Error(String(exception))\n\n    try { useLogger().error(error) } catch {}\n\n    const parsed = parseError(error)\n    response.status(parsed.status).json({\n      message: parsed.message, why: parsed.why, fix: parsed.fix,\n    })\n  }\n}\n","src/evlog-exception.filter.ts",[208,7404,7405,7424,7450,7468,7486,7490,7499,7515,7543,7567,7606,7610,7636,7640,7656,7683,7722,7728,7732],{"__ignoreMap":206},[211,7406,7407,7409,7411,7414,7416,7418,7420,7422],{"class":213,"line":214},[211,7408,463],{"class":325},[211,7410,466],{"class":340},[211,7412,7413],{"class":336}," Catch",[211,7415,472],{"class":340},[211,7417,475],{"class":325},[211,7419,400],{"class":340},[211,7421,6498],{"class":220},[211,7423,483],{"class":340},[211,7425,7426,7428,7430,7432,7435,7437,7440,7442,7444,7446,7448],{"class":213,"line":344},[211,7427,463],{"class":325},[211,7429,2661],{"class":325},[211,7431,466],{"class":340},[211,7433,7434],{"class":336}," ExceptionFilter",[211,7436,505],{"class":340},[211,7438,7439],{"class":336}," ArgumentsHost",[211,7441,472],{"class":340},[211,7443,475],{"class":325},[211,7445,400],{"class":340},[211,7447,6498],{"class":220},[211,7449,483],{"class":340},[211,7451,7452,7454,7456,7458,7460,7462,7464,7466],{"class":213,"line":371},[211,7453,463],{"class":325},[211,7455,466],{"class":340},[211,7457,4727],{"class":336},[211,7459,472],{"class":340},[211,7461,475],{"class":325},[211,7463,400],{"class":340},[211,7465,2429],{"class":220},[211,7467,483],{"class":340},[211,7469,7470,7472,7474,7476,7478,7480,7482,7484],{"class":213,"line":382},[211,7471,463],{"class":325},[211,7473,466],{"class":340},[211,7475,508],{"class":336},[211,7477,472],{"class":340},[211,7479,475],{"class":325},[211,7481,400],{"class":340},[211,7483,6437],{"class":220},[211,7485,483],{"class":340},[211,7487,7488],{"class":213,"line":392},[211,7489,489],{"emptyLinePlaceholder":488},[211,7491,7492,7494,7497],{"class":213,"line":410},[211,7493,6528],{"class":340},[211,7495,7496],{"class":332},"Catch",[211,7498,839],{"class":336},[211,7500,7501,7503,7505,7508,7511,7513],{"class":213,"line":416},[211,7502,326],{"class":325},[211,7504,6577],{"class":496},[211,7506,7507],{"class":217}," EvlogExceptionFilter",[211,7509,7510],{"class":496}," implements",[211,7512,7434],{"class":217},[211,7514,379],{"class":340},[211,7516,7517,7520,7522,7525,7527,7530,7532,7535,7537,7539,7541],{"class":213,"line":422},[211,7518,7519],{"class":347},"  catch",[211,7521,337],{"class":340},[211,7523,7524],{"class":634},"exception",[211,7526,351],{"class":340},[211,7528,7529],{"class":217}," unknown",[211,7531,505],{"class":340},[211,7533,7534],{"class":634}," host",[211,7536,351],{"class":340},[211,7538,7439],{"class":217},[211,7540,642],{"class":340},[211,7542,379],{"class":340},[211,7544,7545,7547,7549,7551,7553,7555,7558,7560,7562,7565],{"class":213,"line":940},[211,7546,3171],{"class":496},[211,7548,3231],{"class":336},[211,7550,523],{"class":340},[211,7552,7534],{"class":336},[211,7554,673],{"class":340},[211,7556,7557],{"class":332},"switchToHttp",[211,7559,1360],{"class":347},[211,7561,673],{"class":340},[211,7563,7564],{"class":332},"getResponse",[211,7566,839],{"class":347},[211,7568,7569,7571,7573,7575,7578,7581,7583,7586,7588,7591,7593,7595,7597,7600,7602,7604],{"class":213,"line":1276},[211,7570,3171],{"class":496},[211,7572,5646],{"class":336},[211,7574,523],{"class":340},[211,7576,7577],{"class":336}," exception",[211,7579,7580],{"class":340}," instanceof",[211,7582,3333],{"class":217},[211,7584,7585],{"class":340}," ?",[211,7587,7577],{"class":336},[211,7589,7590],{"class":340}," :",[211,7592,3236],{"class":340},[211,7594,3333],{"class":332},[211,7596,337],{"class":347},[211,7598,7599],{"class":332},"String",[211,7601,337],{"class":347},[211,7603,7524],{"class":336},[211,7605,4125],{"class":347},[211,7607,7608],{"class":213,"line":1286},[211,7609,489],{"emptyLinePlaceholder":488},[211,7611,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634],{"class":213,"line":1296},[211,7613,3192],{"class":325},[211,7615,466],{"class":340},[211,7617,508],{"class":332},[211,7619,1360],{"class":347},[211,7621,673],{"class":340},[211,7623,3312],{"class":332},[211,7625,337],{"class":347},[211,7627,3312],{"class":336},[211,7629,918],{"class":347},[211,7631,425],{"class":340},[211,7633,3307],{"class":325},[211,7635,6583],{"class":340},[211,7637,7638],{"class":213,"line":1302},[211,7639,489],{"emptyLinePlaceholder":488},[211,7641,7642,7644,7646,7648,7650,7652,7654],{"class":213,"line":2842},[211,7643,3171],{"class":496},[211,7645,4885],{"class":336},[211,7647,523],{"class":340},[211,7649,4727],{"class":332},[211,7651,337],{"class":347},[211,7653,3312],{"class":336},[211,7655,428],{"class":347},[211,7657,7658,7661,7663,7665,7667,7669,7671,7673,7675,7677,7679,7681],{"class":213,"line":2868},[211,7659,7660],{"class":336},"    response",[211,7662,673],{"class":340},[211,7664,3288],{"class":332},[211,7666,337],{"class":347},[211,7668,4908],{"class":336},[211,7670,673],{"class":340},[211,7672,3288],{"class":336},[211,7674,642],{"class":347},[211,7676,673],{"class":340},[211,7678,719],{"class":332},[211,7680,337],{"class":347},[211,7682,341],{"class":340},[211,7684,7685,7688,7690,7692,7694,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714,7716,7718,7720],{"class":213,"line":2874},[211,7686,7687],{"class":347},"      message",[211,7689,351],{"class":340},[211,7691,4885],{"class":336},[211,7693,673],{"class":340},[211,7695,4933],{"class":336},[211,7697,505],{"class":340},[211,7699,4803],{"class":347},[211,7701,351],{"class":340},[211,7703,4885],{"class":336},[211,7705,673],{"class":340},[211,7707,2910],{"class":336},[211,7709,505],{"class":340},[211,7711,4950],{"class":347},[211,7713,351],{"class":340},[211,7715,4885],{"class":336},[211,7717,673],{"class":340},[211,7719,2913],{"class":336},[211,7721,368],{"class":340},[211,7723,7724,7726],{"class":213,"line":2879},[211,7725,2007],{"class":340},[211,7727,428],{"class":347},[211,7729,7730],{"class":213,"line":2884},[211,7731,6934],{"class":340},[211,7733,7734],{"class":213,"line":3361},[211,7735,1074],{"class":340},[946,7737,4137,7738,4141],{"color":1886,"icon":1887},[299,7739,7740],{"href":173},"NestJS example",[269,7742,177],{"id":7743},"sveltekit",[188,7745,7746,7747,959,7750,7753,7754,7757,7758,7761,7762,7764],{},"SvelteKit integration via ",[208,7748,7749],{},"handle",[208,7751,7752],{},"handleError"," hooks in ",[208,7755,7756],{},"hooks.server.ts",". Access the logger via ",[208,7759,7760],{},"event.locals.log"," in route handlers or ",[208,7763,1770],{}," from services.",[197,7766,7767,7779,7791],{},[200,7768,7769],{"className":202,"code":227,"filename":228,"language":205,"meta":206,"style":206},[208,7770,7771],{"__ignoreMap":206},[211,7772,7773,7775,7777],{"class":213,"line":214},[211,7774,228],{"class":217},[211,7776,237],{"class":220},[211,7778,224],{"class":220},[200,7780,7781],{"className":202,"code":203,"filename":204,"language":205,"meta":206,"style":206},[208,7782,7783],{"__ignoreMap":206},[211,7784,7785,7787,7789],{"class":213,"line":214},[211,7786,204],{"class":217},[211,7788,221],{"class":220},[211,7790,224],{"class":220},[200,7792,7793],{"className":202,"code":256,"filename":257,"language":205,"meta":206,"style":206},[208,7794,7795],{"__ignoreMap":206},[211,7796,7797,7799,7801],{"class":213,"line":214},[211,7798,257],{"class":217},[211,7800,221],{"class":220},[211,7802,224],{"class":220},[188,7804,7805],{},[2420,7806,305],{},[200,7808,7811],{"className":315,"code":7809,"filename":7810,"language":318,"meta":206,"style":206},"import { initLogger } from 'evlog'\nimport { createEvlogHooks } from 'evlog/sveltekit'\n\ninitLogger({ env: { service: 'my-app' } })\n\nexport const { handle, handleError } = createEvlogHooks()\n","src/hooks.server.ts",[208,7812,7813,7831,7851,7855,7885,7889],{"__ignoreMap":206},[211,7814,7815,7817,7819,7821,7823,7825,7827,7829],{"class":213,"line":214},[211,7816,463],{"class":325},[211,7818,466],{"class":340},[211,7820,3523],{"class":336},[211,7822,472],{"class":340},[211,7824,475],{"class":325},[211,7826,400],{"class":340},[211,7828,2429],{"class":220},[211,7830,483],{"class":340},[211,7832,7833,7835,7837,7840,7842,7844,7846,7849],{"class":213,"line":344},[211,7834,463],{"class":325},[211,7836,466],{"class":340},[211,7838,7839],{"class":336}," createEvlogHooks",[211,7841,472],{"class":340},[211,7843,475],{"class":325},[211,7845,400],{"class":340},[211,7847,7848],{"class":220},"evlog/sveltekit",[211,7850,483],{"class":340},[211,7852,7853],{"class":213,"line":371},[211,7854,489],{"emptyLinePlaceholder":488},[211,7856,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883],{"class":213,"line":382},[211,7858,3567],{"class":332},[211,7860,337],{"class":336},[211,7862,681],{"class":340},[211,7864,6664],{"class":347},[211,7866,351],{"class":340},[211,7868,466],{"class":340},[211,7870,1230],{"class":347},[211,7872,351],{"class":340},[211,7874,400],{"class":340},[211,7876,403],{"class":220},[211,7878,357],{"class":340},[211,7880,472],{"class":340},[211,7882,472],{"class":340},[211,7884,428],{"class":336},[211,7886,7887],{"class":213,"line":392},[211,7888,489],{"emptyLinePlaceholder":488},[211,7890,7891,7893,7895,7897,7900,7902,7905,7907,7909,7911],{"class":213,"line":410},[211,7892,326],{"class":325},[211,7894,497],{"class":496},[211,7896,466],{"class":340},[211,7898,7899],{"class":336}," handle",[211,7901,505],{"class":340},[211,7903,7904],{"class":336}," handleError ",[211,7906,425],{"class":340},[211,7908,523],{"class":340},[211,7910,7839],{"class":332},[211,7912,839],{"class":336},[188,7914,7915],{},[2420,7916,7917],{},"Type your locals",[200,7919,7922],{"className":315,"code":7920,"filename":7921,"language":318,"meta":206,"style":206},"import type { RequestLogger } from 'evlog'\n\ndeclare global {\n  namespace App {\n    interface Locals {\n      log: RequestLogger\n    }\n  }\n}\n\nexport {}\n","src/app.d.ts",[208,7923,7924,7944,7948,7958,7968,7978,7986,7990,7994,7998,8002],{"__ignoreMap":206},[211,7925,7926,7928,7930,7932,7934,7936,7938,7940,7942],{"class":213,"line":214},[211,7927,463],{"class":325},[211,7929,2661],{"class":325},[211,7931,466],{"class":340},[211,7933,2666],{"class":336},[211,7935,472],{"class":340},[211,7937,475],{"class":325},[211,7939,400],{"class":340},[211,7941,2429],{"class":220},[211,7943,483],{"class":340},[211,7945,7946],{"class":213,"line":344},[211,7947,489],{"emptyLinePlaceholder":488},[211,7949,7950,7953,7956],{"class":213,"line":371},[211,7951,7952],{"class":496},"declare",[211,7954,7955],{"class":336}," global ",[211,7957,341],{"class":340},[211,7959,7960,7963,7966],{"class":213,"line":382},[211,7961,7962],{"class":496},"  namespace",[211,7964,7965],{"class":217}," App",[211,7967,379],{"class":340},[211,7969,7970,7973,7976],{"class":213,"line":392},[211,7971,7972],{"class":496},"    interface",[211,7974,7975],{"class":217}," Locals",[211,7977,379],{"class":340},[211,7979,7980,7982,7984],{"class":213,"line":410},[211,7981,3199],{"class":347},[211,7983,351],{"class":340},[211,7985,2781],{"class":217},[211,7987,7988],{"class":213,"line":416},[211,7989,3373],{"class":340},[211,7991,7992],{"class":213,"line":422},[211,7993,6934],{"class":340},[211,7995,7996],{"class":213,"line":940},[211,7997,1074],{"class":340},[211,7999,8000],{"class":213,"line":1276},[211,8001,489],{"emptyLinePlaceholder":488},[211,8003,8004,8006],{"class":213,"line":1286},[211,8005,326],{"class":325},[211,8007,6583],{"class":340},[188,8009,8010],{},[2420,8011,8012],{},"Usage in routes",[200,8014,8017],{"className":315,"code":8015,"filename":8016,"language":318,"meta":206,"style":206},"import { json } from '@sveltejs/kit'\nimport type { RequestHandler } from './$types'\n\nexport const GET: RequestHandler = ({ locals, params }) => {\n  locals.log.set({ user: { id: params.id } })\n  return json({ id: params.id })\n}\n","src/routes/api/users/[id]/+server.ts",[208,8018,8019,8039,8061,8065,8096,8135,8159],{"__ignoreMap":206},[211,8020,8021,8023,8025,8028,8030,8032,8034,8037],{"class":213,"line":214},[211,8022,463],{"class":325},[211,8024,466],{"class":340},[211,8026,8027],{"class":336}," json",[211,8029,472],{"class":340},[211,8031,475],{"class":325},[211,8033,400],{"class":340},[211,8035,8036],{"class":220},"@sveltejs/kit",[211,8038,483],{"class":340},[211,8040,8041,8043,8045,8047,8050,8052,8054,8056,8059],{"class":213,"line":344},[211,8042,463],{"class":325},[211,8044,2661],{"class":325},[211,8046,466],{"class":340},[211,8048,8049],{"class":336}," RequestHandler",[211,8051,472],{"class":340},[211,8053,475],{"class":325},[211,8055,400],{"class":340},[211,8057,8058],{"class":220},"./$types",[211,8060,483],{"class":340},[211,8062,8063],{"class":213,"line":371},[211,8064,489],{"emptyLinePlaceholder":488},[211,8066,8067,8069,8071,8074,8076,8078,8080,8082,8085,8087,8090,8092,8094],{"class":213,"line":382},[211,8068,326],{"class":325},[211,8070,497],{"class":496},[211,8072,8073],{"class":336}," GET",[211,8075,351],{"class":340},[211,8077,8049],{"class":217},[211,8079,523],{"class":340},[211,8081,5153],{"class":340},[211,8083,8084],{"class":634}," locals",[211,8086,505],{"class":340},[211,8088,8089],{"class":634}," params",[211,8091,1177],{"class":340},[211,8093,645],{"class":496},[211,8095,379],{"class":340},[211,8097,8098,8101,8103,8105,8107,8109,8111,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133],{"class":213,"line":392},[211,8099,8100],{"class":336},"  locals",[211,8102,673],{"class":340},[211,8104,1310],{"class":336},[211,8106,673],{"class":340},[211,8108,676],{"class":332},[211,8110,337],{"class":347},[211,8112,681],{"class":340},[211,8114,684],{"class":347},[211,8116,351],{"class":340},[211,8118,466],{"class":340},[211,8120,691],{"class":347},[211,8122,351],{"class":340},[211,8124,8089],{"class":336},[211,8126,673],{"class":340},[211,8128,6361],{"class":336},[211,8130,472],{"class":340},[211,8132,472],{"class":340},[211,8134,428],{"class":347},[211,8136,8137,8139,8141,8143,8145,8147,8149,8151,8153,8155,8157],{"class":213,"line":410},[211,8138,711],{"class":325},[211,8140,8027],{"class":332},[211,8142,337],{"class":347},[211,8144,681],{"class":340},[211,8146,691],{"class":347},[211,8148,351],{"class":340},[211,8150,8089],{"class":336},[211,8152,673],{"class":340},[211,8154,6361],{"class":336},[211,8156,472],{"class":340},[211,8158,428],{"class":347},[211,8160,8161],{"class":213,"line":416},[211,8162,1074],{"class":340},[188,8164,8165],{},[2420,8166,8167],{},"Full pipeline",[200,8169,8171],{"className":315,"code":8170,"filename":7810,"language":318,"meta":206,"style":206},"import { initLogger } from 'evlog'\nimport { createEvlogHooks } from 'evlog/sveltekit'\nimport { createAxiomDrain } from 'evlog/axiom'\n\ninitLogger({ env: { service: 'my-app' } })\n\nexport const { handle, handleError } = createEvlogHooks({\n  include: ['/api/**'],\n  drain: createAxiomDrain(),\n  enrich: (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",[208,8172,8173,8191,8209,8227,8231,8261,8265,8289,8307,8319,8335,8359,8363,8379,8415,8419],{"__ignoreMap":206},[211,8174,8175,8177,8179,8181,8183,8185,8187,8189],{"class":213,"line":214},[211,8176,463],{"class":325},[211,8178,466],{"class":340},[211,8180,3523],{"class":336},[211,8182,472],{"class":340},[211,8184,475],{"class":325},[211,8186,400],{"class":340},[211,8188,2429],{"class":220},[211,8190,483],{"class":340},[211,8192,8193,8195,8197,8199,8201,8203,8205,8207],{"class":213,"line":344},[211,8194,463],{"class":325},[211,8196,466],{"class":340},[211,8198,7839],{"class":336},[211,8200,472],{"class":340},[211,8202,475],{"class":325},[211,8204,400],{"class":340},[211,8206,7848],{"class":220},[211,8208,483],{"class":340},[211,8210,8211,8213,8215,8217,8219,8221,8223,8225],{"class":213,"line":371},[211,8212,463],{"class":325},[211,8214,466],{"class":340},[211,8216,3831],{"class":336},[211,8218,472],{"class":340},[211,8220,475],{"class":325},[211,8222,400],{"class":340},[211,8224,3840],{"class":220},[211,8226,483],{"class":340},[211,8228,8229],{"class":213,"line":382},[211,8230,489],{"emptyLinePlaceholder":488},[211,8232,8233,8235,8237,8239,8241,8243,8245,8247,8249,8251,8253,8255,8257,8259],{"class":213,"line":392},[211,8234,3567],{"class":332},[211,8236,337],{"class":336},[211,8238,681],{"class":340},[211,8240,6664],{"class":347},[211,8242,351],{"class":340},[211,8244,466],{"class":340},[211,8246,1230],{"class":347},[211,8248,351],{"class":340},[211,8250,400],{"class":340},[211,8252,403],{"class":220},[211,8254,357],{"class":340},[211,8256,472],{"class":340},[211,8258,472],{"class":340},[211,8260,428],{"class":336},[211,8262,8263],{"class":213,"line":410},[211,8264,489],{"emptyLinePlaceholder":488},[211,8266,8267,8269,8271,8273,8275,8277,8279,8281,8283,8285,8287],{"class":213,"line":416},[211,8268,326],{"class":325},[211,8270,497],{"class":496},[211,8272,466],{"class":340},[211,8274,7899],{"class":336},[211,8276,505],{"class":340},[211,8278,7904],{"class":336},[211,8280,425],{"class":340},[211,8282,523],{"class":340},[211,8284,7839],{"class":332},[211,8286,337],{"class":336},[211,8288,341],{"class":340},[211,8290,8291,8293,8295,8297,8299,8301,8303,8305],{"class":213,"line":422},[211,8292,3904],{"class":347},[211,8294,351],{"class":340},[211,8296,354],{"class":336},[211,8298,357],{"class":340},[211,8300,3913],{"class":220},[211,8302,357],{"class":340},[211,8304,365],{"class":336},[211,8306,368],{"class":340},[211,8308,8309,8311,8313,8315,8317],{"class":213,"line":940},[211,8310,3984],{"class":347},[211,8312,351],{"class":340},[211,8314,3831],{"class":332},[211,8316,1360],{"class":336},[211,8318,368],{"class":340},[211,8320,8321,8323,8325,8327,8329,8331,8333],{"class":213,"line":1276},[211,8322,3997],{"class":332},[211,8324,351],{"class":340},[211,8326,631],{"class":340},[211,8328,4004],{"class":634},[211,8330,642],{"class":340},[211,8332,645],{"class":496},[211,8334,379],{"class":340},[211,8336,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355,8357],{"class":213,"line":1286},[211,8338,4026],{"class":336},[211,8340,673],{"class":340},[211,8342,2092],{"class":336},[211,8344,673],{"class":340},[211,8346,4035],{"class":336},[211,8348,523],{"class":340},[211,8350,4040],{"class":336},[211,8352,673],{"class":340},[211,8354,1531],{"class":336},[211,8356,673],{"class":340},[211,8358,4049],{"class":336},[211,8360,8361],{"class":213,"line":1296},[211,8362,419],{"class":340},[211,8364,8365,8367,8369,8371,8373,8375,8377],{"class":213,"line":1302},[211,8366,4058],{"class":332},[211,8368,351],{"class":340},[211,8370,631],{"class":340},[211,8372,4004],{"class":634},[211,8374,642],{"class":340},[211,8376,645],{"class":496},[211,8378,379],{"class":340},[211,8380,8381,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405,8407,8409,8411,8413],{"class":213,"line":2842},[211,8382,4075],{"class":325},[211,8384,631],{"class":347},[211,8386,4004],{"class":336},[211,8388,673],{"class":340},[211,8390,4084],{"class":336},[211,8392,4087],{"class":340},[211,8394,4090],{"class":336},[211,8396,673],{"class":340},[211,8398,4084],{"class":336},[211,8400,4097],{"class":340},[211,8402,4100],{"class":3259},[211,8404,918],{"class":347},[211,8406,4004],{"class":336},[211,8408,673],{"class":340},[211,8410,4109],{"class":336},[211,8412,523],{"class":340},[211,8414,4114],{"class":731},[211,8416,8417],{"class":213,"line":2868},[211,8418,419],{"class":340},[211,8420,8421,8423],{"class":213,"line":2874},[211,8422,425],{"class":340},[211,8424,428],{"class":336},[946,8426,4137,8427,4141],{"color":1886,"icon":1887},[299,8428,8429],{"href":178},"SvelteKit example",[269,8431,8433],{"id":8432},"standalone-typescript","Standalone TypeScript",[188,8435,8436],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[200,8438,8441],{"className":315,"code":8439,"filename":8440,"language":318,"meta":206,"style":206},"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",[208,8442,8443,8466,8470,8478,8486,8502,8518,8522,8528,8532,8590,8614],{"__ignoreMap":206},[211,8444,8445,8447,8449,8451,8453,8456,8458,8460,8462,8464],{"class":213,"line":214},[211,8446,463],{"class":325},[211,8448,466],{"class":340},[211,8450,3523],{"class":336},[211,8452,505],{"class":340},[211,8454,8455],{"class":336}," createLogger",[211,8457,472],{"class":340},[211,8459,475],{"class":325},[211,8461,400],{"class":340},[211,8463,2429],{"class":220},[211,8465,483],{"class":340},[211,8467,8468],{"class":213,"line":344},[211,8469,489],{"emptyLinePlaceholder":488},[211,8471,8472,8474,8476],{"class":213,"line":371},[211,8473,3567],{"class":332},[211,8475,337],{"class":336},[211,8477,341],{"class":340},[211,8479,8480,8482,8484],{"class":213,"line":382},[211,8481,3110],{"class":347},[211,8483,351],{"class":340},[211,8485,379],{"class":340},[211,8487,8488,8491,8493,8495,8498,8500],{"class":213,"line":392},[211,8489,8490],{"class":347},"    service",[211,8492,351],{"class":340},[211,8494,400],{"class":340},[211,8496,8497],{"class":220},"my-worker",[211,8499,357],{"class":340},[211,8501,368],{"class":340},[211,8503,8504,8507,8509,8511,8514,8516],{"class":213,"line":410},[211,8505,8506],{"class":347},"    environment",[211,8508,351],{"class":340},[211,8510,400],{"class":340},[211,8512,8513],{"class":220},"production",[211,8515,357],{"class":340},[211,8517,368],{"class":340},[211,8519,8520],{"class":213,"line":416},[211,8521,419],{"class":340},[211,8523,8524,8526],{"class":213,"line":422},[211,8525,425],{"class":340},[211,8527,428],{"class":336},[211,8529,8530],{"class":213,"line":940},[211,8531,489],{"emptyLinePlaceholder":488},[211,8533,8534,8536,8539,8541,8543,8545,8547,8550,8552,8555,8557,8559,8561,8563,8565,8567,8569,8572,8574,8577,8579,8581,8583,8586,8588],{"class":213,"line":1276},[211,8535,3607],{"class":496},[211,8537,8538],{"class":336}," log ",[211,8540,621],{"class":340},[211,8542,8455],{"class":332},[211,8544,337],{"class":336},[211,8546,681],{"class":340},[211,8548,8549],{"class":347}," jobId",[211,8551,351],{"class":340},[211,8553,8554],{"class":336}," job",[211,8556,673],{"class":340},[211,8558,6361],{"class":336},[211,8560,505],{"class":340},[211,8562,868],{"class":347},[211,8564,351],{"class":340},[211,8566,8554],{"class":336},[211,8568,673],{"class":340},[211,8570,8571],{"class":336},"source",[211,8573,505],{"class":340},[211,8575,8576],{"class":347}," target",[211,8578,351],{"class":340},[211,8580,8554],{"class":336},[211,8582,673],{"class":340},[211,8584,8585],{"class":336},"target ",[211,8587,425],{"class":340},[211,8589,428],{"class":336},[211,8591,8592,8594,8596,8598,8600,8602,8605,8607,8610,8612],{"class":213,"line":1286},[211,8593,1310],{"class":336},[211,8595,673],{"class":340},[211,8597,676],{"class":332},[211,8599,337],{"class":336},[211,8601,681],{"class":340},[211,8603,8604],{"class":347}," recordsSynced",[211,8606,351],{"class":340},[211,8608,8609],{"class":3259}," 150",[211,8611,472],{"class":340},[211,8613,428],{"class":336},[211,8615,8616,8618,8620,8622,8625],{"class":213,"line":1296},[211,8617,1310],{"class":336},[211,8619,673],{"class":340},[211,8621,3273],{"class":332},[211,8623,8624],{"class":336},"() ",[211,8626,8627],{"class":664},"// Manual emit required in standalone mode\n",[188,8629,8630,8633,8634,435,8637,8640],{},[208,8631,8632],{},"createLogger()"," accepts any initial context, making it ideal for workflows, jobs, queues, or scripts where HTTP request fields (",[208,8635,8636],{},"method",[208,8638,8639],{},"path",") don't apply.",[188,8642,8643,8644,8647,8648,435,8650,439,8652,351],{},"For HTTP request contexts, use ",[208,8645,8646],{},"createRequestLogger()"," which pre-populates ",[208,8649,8636],{},[208,8651,8639],{},[208,8653,1083],{},[200,8655,8658],{"className":315,"code":8656,"filename":8657,"language":318,"meta":206,"style":206},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '/api/checkout', requestId: 'req-123' })\n","server/middleware.ts",[208,8659,8660,8679,8683],{"__ignoreMap":206},[211,8661,8662,8664,8666,8669,8671,8673,8675,8677],{"class":213,"line":214},[211,8663,463],{"class":325},[211,8665,466],{"class":340},[211,8667,8668],{"class":336}," createRequestLogger",[211,8670,472],{"class":340},[211,8672,475],{"class":325},[211,8674,400],{"class":340},[211,8676,2429],{"class":220},[211,8678,483],{"class":340},[211,8680,8681],{"class":213,"line":344},[211,8682,489],{"emptyLinePlaceholder":488},[211,8684,8685,8687,8689,8691,8693,8695,8697,8700,8702,8704,8707,8709,8711,8714,8716,8718,8721,8723,8725,8728,8730,8732,8735,8737,8739],{"class":213,"line":371},[211,8686,3607],{"class":496},[211,8688,8538],{"class":336},[211,8690,621],{"class":340},[211,8692,8668],{"class":332},[211,8694,337],{"class":336},[211,8696,681],{"class":340},[211,8698,8699],{"class":347}," method",[211,8701,351],{"class":340},[211,8703,400],{"class":340},[211,8705,8706],{"class":220},"POST",[211,8708,357],{"class":340},[211,8710,505],{"class":340},[211,8712,8713],{"class":347}," path",[211,8715,351],{"class":340},[211,8717,400],{"class":340},[211,8719,8720],{"class":220},"/api/checkout",[211,8722,357],{"class":340},[211,8724,505],{"class":340},[211,8726,8727],{"class":347}," requestId",[211,8729,351],{"class":340},[211,8731,400],{"class":340},[211,8733,8734],{"class":220},"req-123",[211,8736,357],{"class":340},[211,8738,472],{"class":340},[211,8740,428],{"class":336},[946,8742,8743,8744,8747],{"color":948,"icon":13},"In standalone mode, you must call ",[208,8745,8746],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[744,8749,8751],{"id":8750},"draining-logs-to-external-services","Draining Logs to External Services",[188,8753,4128,8754,8756,8757,8759,8760,8763,8764,8767],{},[208,8755,1644],{}," option in ",[208,8758,3567],{}," to automatically send every emitted event to an external service. This works with all built-in ",[299,8761,8762],{"href":62},"adapters"," and the ",[299,8765,8766],{"href":97},"pipeline"," for batching and retry.",[200,8769,8771],{"className":315,"code":8770,"filename":8440,"language":318,"meta":206,"style":206},"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",[208,8772,8773,8794,8820,8838,8858,8862,8905,8924,8928,8936,8970,8976,8982,8986,8991,9018,9022,9078,9101,9114,9118,9123],{"__ignoreMap":206},[211,8774,8775,8777,8779,8781,8784,8786,8788,8790,8792],{"class":213,"line":214},[211,8776,463],{"class":325},[211,8778,2661],{"class":325},[211,8780,466],{"class":340},[211,8782,8783],{"class":336}," DrainContext",[211,8785,472],{"class":340},[211,8787,475],{"class":325},[211,8789,400],{"class":340},[211,8791,2429],{"class":220},[211,8793,483],{"class":340},[211,8795,8796,8798,8800,8802,8804,8806,8808,8810,8812,8814,8816,8818],{"class":213,"line":344},[211,8797,463],{"class":325},[211,8799,466],{"class":340},[211,8801,3523],{"class":336},[211,8803,505],{"class":340},[211,8805,513],{"class":336},[211,8807,505],{"class":340},[211,8809,8455],{"class":336},[211,8811,472],{"class":340},[211,8813,475],{"class":325},[211,8815,400],{"class":340},[211,8817,2429],{"class":220},[211,8819,483],{"class":340},[211,8821,8822,8824,8826,8828,8830,8832,8834,8836],{"class":213,"line":371},[211,8823,463],{"class":325},[211,8825,466],{"class":340},[211,8827,3831],{"class":336},[211,8829,472],{"class":340},[211,8831,475],{"class":325},[211,8833,400],{"class":340},[211,8835,3840],{"class":220},[211,8837,483],{"class":340},[211,8839,8840,8842,8844,8847,8849,8851,8853,8856],{"class":213,"line":382},[211,8841,463],{"class":325},[211,8843,466],{"class":340},[211,8845,8846],{"class":336}," createDrainPipeline",[211,8848,472],{"class":340},[211,8850,475],{"class":325},[211,8852,400],{"class":340},[211,8854,8855],{"class":220},"evlog/pipeline",[211,8857,483],{"class":340},[211,8859,8860],{"class":213,"line":392},[211,8861,489],{"emptyLinePlaceholder":488},[211,8863,8864,8866,8869,8871,8873,8875,8878,8880,8882,8884,8887,8889,8891,8894,8896,8899,8901,8903],{"class":213,"line":410},[211,8865,3607],{"class":496},[211,8867,8868],{"class":336}," pipeline ",[211,8870,621],{"class":340},[211,8872,8846],{"class":332},[211,8874,3619],{"class":340},[211,8876,8877],{"class":217},"DrainContext",[211,8879,3625],{"class":340},[211,8881,337],{"class":336},[211,8883,681],{"class":340},[211,8885,8886],{"class":347}," batch",[211,8888,351],{"class":340},[211,8890,466],{"class":340},[211,8892,8893],{"class":347}," size",[211,8895,351],{"class":340},[211,8897,8898],{"class":3259}," 10",[211,8900,472],{"class":340},[211,8902,472],{"class":340},[211,8904,428],{"class":336},[211,8906,8907,8909,8912,8914,8917,8919,8922],{"class":213,"line":416},[211,8908,3607],{"class":496},[211,8910,8911],{"class":336}," drain ",[211,8913,621],{"class":340},[211,8915,8916],{"class":332}," pipeline",[211,8918,337],{"class":336},[211,8920,8921],{"class":332},"createAxiomDrain",[211,8923,3648],{"class":336},[211,8925,8926],{"class":213,"line":422},[211,8927,489],{"emptyLinePlaceholder":488},[211,8929,8930,8932,8934],{"class":213,"line":940},[211,8931,3567],{"class":332},[211,8933,337],{"class":336},[211,8935,341],{"class":340},[211,8937,8938,8940,8942,8944,8946,8948,8950,8953,8955,8957,8960,8962,8964,8966,8968],{"class":213,"line":1276},[211,8939,3110],{"class":347},[211,8941,351],{"class":340},[211,8943,466],{"class":340},[211,8945,1230],{"class":347},[211,8947,351],{"class":340},[211,8949,400],{"class":340},[211,8951,8952],{"class":220},"my-script",[211,8954,357],{"class":340},[211,8956,505],{"class":340},[211,8958,8959],{"class":347}," environment",[211,8961,351],{"class":340},[211,8963,400],{"class":340},[211,8965,8513],{"class":220},[211,8967,357],{"class":340},[211,8969,2002],{"class":340},[211,8971,8972,8974],{"class":213,"line":1286},[211,8973,3984],{"class":336},[211,8975,368],{"class":340},[211,8977,8978,8980],{"class":213,"line":1296},[211,8979,425],{"class":340},[211,8981,428],{"class":336},[211,8983,8984],{"class":213,"line":1302},[211,8985,489],{"emptyLinePlaceholder":488},[211,8987,8988],{"class":213,"line":2842},[211,8989,8990],{"class":664},"// Every log is automatically drained\n",[211,8992,8993,8995,8997,8999,9001,9003,9005,9007,9009,9012,9014,9016],{"class":213,"line":2868},[211,8994,1310],{"class":336},[211,8996,673],{"class":340},[211,8998,948],{"class":332},[211,9000,337],{"class":336},[211,9002,681],{"class":340},[211,9004,854],{"class":347},[211,9006,351],{"class":340},[211,9008,400],{"class":340},[211,9010,9011],{"class":220},"sync_started",[211,9013,357],{"class":340},[211,9015,472],{"class":340},[211,9017,428],{"class":336},[211,9019,9020],{"class":213,"line":2874},[211,9021,489],{"emptyLinePlaceholder":488},[211,9023,9024,9026,9029,9031,9033,9035,9037,9039,9041,9043,9046,9048,9050,9052,9054,9056,9059,9061,9063,9065,9067,9069,9072,9074,9076],{"class":213,"line":2879},[211,9025,3607],{"class":496},[211,9027,9028],{"class":336}," syncLog ",[211,9030,621],{"class":340},[211,9032,8455],{"class":332},[211,9034,337],{"class":336},[211,9036,681],{"class":340},[211,9038,8549],{"class":347},[211,9040,351],{"class":340},[211,9042,400],{"class":340},[211,9044,9045],{"class":220},"sync-001",[211,9047,357],{"class":340},[211,9049,505],{"class":340},[211,9051,868],{"class":347},[211,9053,351],{"class":340},[211,9055,400],{"class":340},[211,9057,9058],{"class":220},"postgres",[211,9060,357],{"class":340},[211,9062,505],{"class":340},[211,9064,8576],{"class":347},[211,9066,351],{"class":340},[211,9068,400],{"class":340},[211,9070,9071],{"class":220},"s3",[211,9073,357],{"class":340},[211,9075,472],{"class":340},[211,9077,428],{"class":336},[211,9079,9080,9083,9085,9087,9089,9091,9093,9095,9097,9099],{"class":213,"line":2884},[211,9081,9082],{"class":336},"syncLog",[211,9084,673],{"class":340},[211,9086,676],{"class":332},[211,9088,337],{"class":336},[211,9090,681],{"class":340},[211,9092,8604],{"class":347},[211,9094,351],{"class":340},[211,9096,8609],{"class":3259},[211,9098,472],{"class":340},[211,9100,428],{"class":336},[211,9102,9103,9105,9107,9109,9111],{"class":213,"line":3361},[211,9104,9082],{"class":336},[211,9106,673],{"class":340},[211,9108,3273],{"class":332},[211,9110,8624],{"class":336},[211,9112,9113],{"class":664},"// drained automatically\n",[211,9115,9116],{"class":213,"line":3370},[211,9117,489],{"emptyLinePlaceholder":488},[211,9119,9120],{"class":213,"line":3376},[211,9121,9122],{"class":664},"// Flush remaining events before exit\n",[211,9124,9125,9127,9130,9132,9135],{"class":213,"line":3381},[211,9126,5909],{"class":325},[211,9128,9129],{"class":336}," drain",[211,9131,673],{"class":340},[211,9133,9134],{"class":332},"flush",[211,9136,839],{"class":336},[946,9138,3436,9139,9144],{"color":1886,"icon":1887},[299,9140,9143],{"href":9141,"rel":9142},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[3441],"bun-script example"," for a complete working script.",[192,9146,9148],{"id":9147},"configuration-options","Configuration Options",[188,9150,9151,9152,9155],{},"These options apply to ",[2420,9153,9154],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[1443,9157,9158,9170],{},[1446,9159,9160],{},[1449,9161,9162,9164,9166,9168],{},[1452,9163,1454],{},[1452,9165,1457],{},[1452,9167,1460],{},[1452,9169,1463],{},[1465,9171,9172,9193,9214,9231,9247,9267,9284,9301,9319,9341,9361],{},[1449,9173,9174,9178,9182,9186],{},[1470,9175,9176],{},[208,9177,1494],{},[1470,9179,9180],{},[208,9181,1499],{},[1470,9183,9184],{},[208,9185,1504],{},[1470,9187,9188,9189,9192],{},"Globally enable/disable all logging. When ",[208,9190,9191],{},"false",", all operations become no-ops",[1449,9194,9195,9200,9204,9208],{},[1470,9196,9197],{},[208,9198,9199],{},"console",[1470,9201,9202],{},[208,9203,1499],{},[1470,9205,9206],{},[208,9207,1504],{},[1470,9209,9210,9211,9213],{},"Enable/disable browser console output. When ",[208,9212,9191],{},", client logs are suppressed in DevTools but still sent via transport",[1449,9215,9216,9221,9225,9229],{},[1470,9217,9218],{},[208,9219,9220],{},"env.service",[1470,9222,9223],{},[208,9224,1479],{},[1470,9226,9227],{},[208,9228,1484],{},[1470,9230,1487],{},[1449,9232,9233,9238,9242,9244],{},[1470,9234,9235],{},[208,9236,9237],{},"env.environment",[1470,9239,9240],{},[208,9241,1479],{},[1470,9243,1539],{},[1470,9245,9246],{},"Environment name",[1449,9248,9249,9253,9257,9261],{},[1470,9250,9251],{},[208,9252,1588],{},[1470,9254,9255],{},[208,9256,1593],{},[1470,9258,9259],{},[208,9260,1559],{},[1470,9262,9263,9264,9266],{},"Route patterns to log. Supports glob (",[208,9265,3913],{},"). If not set, all routes are logged",[1449,9268,9269,9273,9277,9281],{},[1470,9270,9271],{},[208,9272,1607],{},[1470,9274,9275],{},[208,9276,1593],{},[1470,9278,9279],{},[208,9280,1559],{},[1470,9282,9283],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[1449,9285,9286,9290,9294,9298],{},[1470,9287,9288],{},[208,9289,1625],{},[1470,9291,9292],{},[208,9293,1630],{},[1470,9295,9296],{},[208,9297,1559],{},[1470,9299,9300],{},"Route-specific service configuration",[1449,9302,9303,9307,9311,9316],{},[1470,9304,9305],{},[208,9306,1514],{},[1470,9308,9309],{},[208,9310,1499],{},[1470,9312,9313,9315],{},[208,9314,1504],{}," in dev",[1470,9317,9318],{},"Pretty print with tree formatting",[1449,9320,9321,9325,9330,9334],{},[1470,9322,9323],{},[208,9324,1549],{},[1470,9326,9327],{},[208,9328,9329],{},"object",[1470,9331,9332],{},[208,9333,1559],{},[1470,9335,9336,9337],{},"Head sampling rates per log level (0-100%). See ",[299,9338,9340],{"href":9339},"#sampling","Sampling",[1449,9342,9343,9347,9352,9356],{},[1470,9344,9345],{},[208,9346,1569],{},[1470,9348,9349],{},[208,9350,9351],{},"array",[1470,9353,9354],{},[208,9355,1559],{},[1470,9357,9358,9359],{},"Tail sampling conditions to force-keep logs. See ",[299,9360,9340],{"href":9339},[1449,9362,9363,9367,9371,9375],{},[1470,9364,9365],{},[208,9366,1682],{},[1470,9368,9369],{},[208,9370,1687],{},[1470,9372,9373],{},[208,9374,1559],{},[1470,9376,9377,9378,9380],{},"Custom tail sampling callback (Next.js). Equivalent to ",[208,9379,1851],{}," hook in Nuxt",[946,9382,9383,9384,959,9387,9390,9391,673],{"color":948,"icon":13},"Nuxt also supports ",[208,9385,9386],{},"transport.enabled",[208,9388,9389],{},"transport.endpoint"," for ",[299,9392,9394],{"href":9393},"#client-transport-nuxt-only","Client Transport",[269,9396,9398],{"id":9397},"route-filtering","Route Filtering",[188,9400,3429,9401,959,9403,9405],{},[208,9402,1588],{},[208,9404,1607],{}," to control which routes are logged. Both support glob patterns.",[197,9407,9408,9539,9663],{},[200,9409,9411],{"className":315,"code":9410,"filename":317,"language":318,"meta":206,"style":206},"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",[208,9412,9413,9425,9443,9451,9479,9488,9500,9511,9522,9529,9533],{"__ignoreMap":206},[211,9414,9415,9417,9419,9421,9423],{"class":213,"line":214},[211,9416,326],{"class":325},[211,9418,329],{"class":325},[211,9420,333],{"class":332},[211,9422,337],{"class":336},[211,9424,341],{"class":340},[211,9426,9427,9429,9431,9433,9435,9437,9439,9441],{"class":213,"line":344},[211,9428,348],{"class":347},[211,9430,351],{"class":340},[211,9432,354],{"class":336},[211,9434,357],{"class":340},[211,9436,360],{"class":220},[211,9438,357],{"class":340},[211,9440,365],{"class":336},[211,9442,368],{"class":340},[211,9444,9445,9447,9449],{"class":213,"line":371},[211,9446,374],{"class":347},[211,9448,351],{"class":340},[211,9450,379],{"class":340},[211,9452,9453,9456,9458,9460,9462,9464,9466,9468,9470,9473,9475,9477],{"class":213,"line":382},[211,9454,9455],{"class":347},"    include",[211,9457,351],{"class":340},[211,9459,354],{"class":336},[211,9461,357],{"class":340},[211,9463,3913],{"class":220},[211,9465,357],{"class":340},[211,9467,505],{"class":340},[211,9469,400],{"class":340},[211,9471,9472],{"class":220},"/auth/**",[211,9474,357],{"class":340},[211,9476,365],{"class":336},[211,9478,368],{"class":340},[211,9480,9481,9484,9486],{"class":213,"line":392},[211,9482,9483],{"class":347},"    exclude",[211,9485,351],{"class":340},[211,9487,1970],{"class":336},[211,9489,9490,9493,9496,9498],{"class":213,"line":410},[211,9491,9492],{"class":340},"      '",[211,9494,9495],{"class":220},"/api/_nuxt_icon/**",[211,9497,357],{"class":340},[211,9499,368],{"class":340},[211,9501,9502,9504,9507,9509],{"class":213,"line":416},[211,9503,9492],{"class":340},[211,9505,9506],{"class":220},"/api/_content/**",[211,9508,357],{"class":340},[211,9510,368],{"class":340},[211,9512,9513,9515,9518,9520],{"class":213,"line":422},[211,9514,9492],{"class":340},[211,9516,9517],{"class":220},"/api/health",[211,9519,357],{"class":340},[211,9521,368],{"class":340},[211,9523,9524,9527],{"class":213,"line":940},[211,9525,9526],{"class":336},"    ]",[211,9528,368],{"class":340},[211,9530,9531],{"class":213,"line":1276},[211,9532,419],{"class":340},[211,9534,9535,9537],{"class":213,"line":1286},[211,9536,425],{"class":340},[211,9538,428],{"class":336},[200,9540,9543],{"className":315,"code":9541,"filename":9542,"language":318,"meta":206,"style":206},"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)",[208,9544,9545,9563,9577,9581,9593,9601,9609,9627,9645,9651,9657],{"__ignoreMap":206},[211,9546,9547,9549,9551,9553,9555,9557,9559,9561],{"class":213,"line":214},[211,9548,463],{"class":325},[211,9550,466],{"class":340},[211,9552,1918],{"class":336},[211,9554,472],{"class":340},[211,9556,475],{"class":325},[211,9558,400],{"class":340},[211,9560,1902],{"class":220},[211,9562,483],{"class":340},[211,9564,9565,9567,9569,9571,9573,9575],{"class":213,"line":344},[211,9566,463],{"class":325},[211,9568,1935],{"class":336},[211,9570,1938],{"class":325},[211,9572,400],{"class":340},[211,9574,1943],{"class":220},[211,9576,483],{"class":340},[211,9578,9579],{"class":213,"line":371},[211,9580,489],{"emptyLinePlaceholder":488},[211,9582,9583,9585,9587,9589,9591],{"class":213,"line":382},[211,9584,326],{"class":325},[211,9586,329],{"class":325},[211,9588,1918],{"class":332},[211,9590,337],{"class":336},[211,9592,341],{"class":340},[211,9594,9595,9597,9599],{"class":213,"line":392},[211,9596,348],{"class":347},[211,9598,351],{"class":340},[211,9600,1970],{"class":336},[211,9602,9603,9605,9607],{"class":213,"line":410},[211,9604,1975],{"class":332},[211,9606,337],{"class":336},[211,9608,341],{"class":340},[211,9610,9611,9613,9615,9617,9619,9621,9623,9625],{"class":213,"line":416},[211,9612,7039],{"class":347},[211,9614,351],{"class":340},[211,9616,354],{"class":336},[211,9618,357],{"class":340},[211,9620,3913],{"class":220},[211,9622,357],{"class":340},[211,9624,365],{"class":336},[211,9626,368],{"class":340},[211,9628,9629,9631,9633,9635,9637,9639,9641,9643],{"class":213,"line":422},[211,9630,7058],{"class":347},[211,9632,351],{"class":340},[211,9634,354],{"class":336},[211,9636,357],{"class":340},[211,9638,9517],{"class":220},[211,9640,357],{"class":340},[211,9642,365],{"class":336},[211,9644,368],{"class":340},[211,9646,9647,9649],{"class":213,"line":940},[211,9648,2007],{"class":340},[211,9650,428],{"class":336},[211,9652,9653,9655],{"class":213,"line":1276},[211,9654,2014],{"class":336},[211,9656,368],{"class":340},[211,9658,9659,9661],{"class":213,"line":1286},[211,9660,425],{"class":340},[211,9662,428],{"class":336},[200,9664,9667],{"className":315,"code":9665,"filename":9666,"language":318,"meta":206,"style":206},"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)",[208,9668,9669,9687,9701,9705,9717,9725,9733,9751,9769,9775,9781],{"__ignoreMap":206},[211,9670,9671,9673,9675,9677,9679,9681,9683,9685],{"class":213,"line":214},[211,9672,463],{"class":325},[211,9674,466],{"class":340},[211,9676,2186],{"class":336},[211,9678,472],{"class":340},[211,9680,475],{"class":325},[211,9682,400],{"class":340},[211,9684,2195],{"class":220},[211,9686,483],{"class":340},[211,9688,9689,9691,9693,9695,9697,9699],{"class":213,"line":344},[211,9690,463],{"class":325},[211,9692,1935],{"class":336},[211,9694,1938],{"class":325},[211,9696,400],{"class":340},[211,9698,2210],{"class":220},[211,9700,483],{"class":340},[211,9702,9703],{"class":213,"line":371},[211,9704,489],{"emptyLinePlaceholder":488},[211,9706,9707,9709,9711,9713,9715],{"class":213,"line":382},[211,9708,326],{"class":325},[211,9710,329],{"class":325},[211,9712,2186],{"class":332},[211,9714,337],{"class":336},[211,9716,341],{"class":340},[211,9718,9719,9721,9723],{"class":213,"line":392},[211,9720,348],{"class":347},[211,9722,351],{"class":340},[211,9724,1970],{"class":336},[211,9726,9727,9729,9731],{"class":213,"line":410},[211,9728,1975],{"class":332},[211,9730,337],{"class":336},[211,9732,341],{"class":340},[211,9734,9735,9737,9739,9741,9743,9745,9747,9749],{"class":213,"line":416},[211,9736,7039],{"class":347},[211,9738,351],{"class":340},[211,9740,354],{"class":336},[211,9742,357],{"class":340},[211,9744,3913],{"class":220},[211,9746,357],{"class":340},[211,9748,365],{"class":336},[211,9750,368],{"class":340},[211,9752,9753,9755,9757,9759,9761,9763,9765,9767],{"class":213,"line":422},[211,9754,7058],{"class":347},[211,9756,351],{"class":340},[211,9758,354],{"class":336},[211,9760,357],{"class":340},[211,9762,9517],{"class":220},[211,9764,357],{"class":340},[211,9766,365],{"class":336},[211,9768,368],{"class":340},[211,9770,9771,9773],{"class":213,"line":940},[211,9772,2007],{"class":340},[211,9774,428],{"class":336},[211,9776,9777,9779],{"class":213,"line":1276},[211,9778,2014],{"class":336},[211,9780,368],{"class":340},[211,9782,9783,9785],{"class":213,"line":1286},[211,9784,425],{"class":340},[211,9786,428],{"class":336},[946,9788,9789,9792,9793,959,9795,9797],{"color":948,"icon":13},[2420,9790,9791],{},"Exclusions take precedence."," If a path matches both ",[208,9794,1588],{},[208,9796,1607],{},", it will be excluded.",[269,9799,9801],{"id":9800},"route-based-service-configuration","Route-Based Service Configuration",[188,9803,9804],{},"In multi-service architectures, configure different service names for different routes:",[197,9806,9807,9976,10143],{},[200,9808,9810],{"className":315,"code":9809,"filename":317,"language":318,"meta":206,"style":206},"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",[208,9811,9812,9824,9842,9850,9858,9873,9877,9886,9910,9936,9962,9966,9970],{"__ignoreMap":206},[211,9813,9814,9816,9818,9820,9822],{"class":213,"line":214},[211,9815,326],{"class":325},[211,9817,329],{"class":325},[211,9819,333],{"class":332},[211,9821,337],{"class":336},[211,9823,341],{"class":340},[211,9825,9826,9828,9830,9832,9834,9836,9838,9840],{"class":213,"line":344},[211,9827,348],{"class":347},[211,9829,351],{"class":340},[211,9831,354],{"class":336},[211,9833,357],{"class":340},[211,9835,360],{"class":220},[211,9837,357],{"class":340},[211,9839,365],{"class":336},[211,9841,368],{"class":340},[211,9843,9844,9846,9848],{"class":213,"line":371},[211,9845,374],{"class":347},[211,9847,351],{"class":340},[211,9849,379],{"class":340},[211,9851,9852,9854,9856],{"class":213,"line":382},[211,9853,385],{"class":347},[211,9855,351],{"class":340},[211,9857,379],{"class":340},[211,9859,9860,9862,9864,9866,9869,9871],{"class":213,"line":392},[211,9861,395],{"class":347},[211,9863,351],{"class":340},[211,9865,400],{"class":340},[211,9867,9868],{"class":220},"default-service",[211,9870,357],{"class":340},[211,9872,368],{"class":340},[211,9874,9875],{"class":213,"line":410},[211,9876,413],{"class":340},[211,9878,9879,9882,9884],{"class":213,"line":416},[211,9880,9881],{"class":347},"    routes",[211,9883,351],{"class":340},[211,9885,379],{"class":340},[211,9887,9888,9890,9892,9894,9896,9898,9900,9902,9904,9906,9908],{"class":213,"line":422},[211,9889,9492],{"class":340},[211,9891,3956],{"class":347},[211,9893,357],{"class":340},[211,9895,351],{"class":340},[211,9897,466],{"class":340},[211,9899,1230],{"class":347},[211,9901,351],{"class":340},[211,9903,400],{"class":340},[211,9905,3971],{"class":220},[211,9907,357],{"class":340},[211,9909,2002],{"class":340},[211,9911,9912,9914,9917,9919,9921,9923,9925,9927,9929,9932,9934],{"class":213,"line":940},[211,9913,9492],{"class":340},[211,9915,9916],{"class":347},"/api/payment/**",[211,9918,357],{"class":340},[211,9920,351],{"class":340},[211,9922,466],{"class":340},[211,9924,1230],{"class":347},[211,9926,351],{"class":340},[211,9928,400],{"class":340},[211,9930,9931],{"class":220},"payment-service",[211,9933,357],{"class":340},[211,9935,2002],{"class":340},[211,9937,9938,9940,9943,9945,9947,9949,9951,9953,9955,9958,9960],{"class":213,"line":1276},[211,9939,9492],{"class":340},[211,9941,9942],{"class":347},"/api/booking/**",[211,9944,357],{"class":340},[211,9946,351],{"class":340},[211,9948,466],{"class":340},[211,9950,1230],{"class":347},[211,9952,351],{"class":340},[211,9954,400],{"class":340},[211,9956,9957],{"class":220},"booking-service",[211,9959,357],{"class":340},[211,9961,2002],{"class":340},[211,9963,9964],{"class":213,"line":1286},[211,9965,413],{"class":340},[211,9967,9968],{"class":213,"line":1296},[211,9969,419],{"class":340},[211,9971,9972,9974],{"class":213,"line":1302},[211,9973,425],{"class":340},[211,9975,428],{"class":336},[200,9977,9979],{"className":315,"code":9978,"filename":9542,"language":318,"meta":206,"style":206},"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",[208,9980,9981,9999,10013,10017,10029,10037,10045,10065,10073,10097,10121,10125,10131,10137],{"__ignoreMap":206},[211,9982,9983,9985,9987,9989,9991,9993,9995,9997],{"class":213,"line":214},[211,9984,463],{"class":325},[211,9986,466],{"class":340},[211,9988,1918],{"class":336},[211,9990,472],{"class":340},[211,9992,475],{"class":325},[211,9994,400],{"class":340},[211,9996,1902],{"class":220},[211,9998,483],{"class":340},[211,10000,10001,10003,10005,10007,10009,10011],{"class":213,"line":344},[211,10002,463],{"class":325},[211,10004,1935],{"class":336},[211,10006,1938],{"class":325},[211,10008,400],{"class":340},[211,10010,1943],{"class":220},[211,10012,483],{"class":340},[211,10014,10015],{"class":213,"line":371},[211,10016,489],{"emptyLinePlaceholder":488},[211,10018,10019,10021,10023,10025,10027],{"class":213,"line":382},[211,10020,326],{"class":325},[211,10022,329],{"class":325},[211,10024,1918],{"class":332},[211,10026,337],{"class":336},[211,10028,341],{"class":340},[211,10030,10031,10033,10035],{"class":213,"line":392},[211,10032,348],{"class":347},[211,10034,351],{"class":340},[211,10036,1970],{"class":336},[211,10038,10039,10041,10043],{"class":213,"line":410},[211,10040,1975],{"class":332},[211,10042,337],{"class":336},[211,10044,341],{"class":340},[211,10046,10047,10049,10051,10053,10055,10057,10059,10061,10063],{"class":213,"line":416},[211,10048,1984],{"class":347},[211,10050,351],{"class":340},[211,10052,466],{"class":340},[211,10054,1230],{"class":347},[211,10056,351],{"class":340},[211,10058,400],{"class":340},[211,10060,9868],{"class":220},[211,10062,357],{"class":340},[211,10064,2002],{"class":340},[211,10066,10067,10069,10071],{"class":213,"line":422},[211,10068,7077],{"class":347},[211,10070,351],{"class":340},[211,10072,379],{"class":340},[211,10074,10075,10077,10079,10081,10083,10085,10087,10089,10091,10093,10095],{"class":213,"line":940},[211,10076,7086],{"class":340},[211,10078,3956],{"class":347},[211,10080,357],{"class":340},[211,10082,351],{"class":340},[211,10084,466],{"class":340},[211,10086,1230],{"class":347},[211,10088,351],{"class":340},[211,10090,400],{"class":340},[211,10092,3971],{"class":220},[211,10094,357],{"class":340},[211,10096,2002],{"class":340},[211,10098,10099,10101,10103,10105,10107,10109,10111,10113,10115,10117,10119],{"class":213,"line":1276},[211,10100,7086],{"class":340},[211,10102,9916],{"class":347},[211,10104,357],{"class":340},[211,10106,351],{"class":340},[211,10108,466],{"class":340},[211,10110,1230],{"class":347},[211,10112,351],{"class":340},[211,10114,400],{"class":340},[211,10116,9931],{"class":220},[211,10118,357],{"class":340},[211,10120,2002],{"class":340},[211,10122,10123],{"class":213,"line":1286},[211,10124,2871],{"class":340},[211,10126,10127,10129],{"class":213,"line":1296},[211,10128,2007],{"class":340},[211,10130,428],{"class":336},[211,10132,10133,10135],{"class":213,"line":1302},[211,10134,2014],{"class":336},[211,10136,368],{"class":340},[211,10138,10139,10141],{"class":213,"line":2842},[211,10140,425],{"class":340},[211,10142,428],{"class":336},[200,10144,10146],{"className":315,"code":10145,"filename":9666,"language":318,"meta":206,"style":206},"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",[208,10147,10148,10166,10180,10184,10196,10204,10212,10232,10240,10264,10288,10292,10298,10304],{"__ignoreMap":206},[211,10149,10150,10152,10154,10156,10158,10160,10162,10164],{"class":213,"line":214},[211,10151,463],{"class":325},[211,10153,466],{"class":340},[211,10155,2186],{"class":336},[211,10157,472],{"class":340},[211,10159,475],{"class":325},[211,10161,400],{"class":340},[211,10163,2195],{"class":220},[211,10165,483],{"class":340},[211,10167,10168,10170,10172,10174,10176,10178],{"class":213,"line":344},[211,10169,463],{"class":325},[211,10171,1935],{"class":336},[211,10173,1938],{"class":325},[211,10175,400],{"class":340},[211,10177,2210],{"class":220},[211,10179,483],{"class":340},[211,10181,10182],{"class":213,"line":371},[211,10183,489],{"emptyLinePlaceholder":488},[211,10185,10186,10188,10190,10192,10194],{"class":213,"line":382},[211,10187,326],{"class":325},[211,10189,329],{"class":325},[211,10191,2186],{"class":332},[211,10193,337],{"class":336},[211,10195,341],{"class":340},[211,10197,10198,10200,10202],{"class":213,"line":392},[211,10199,348],{"class":347},[211,10201,351],{"class":340},[211,10203,1970],{"class":336},[211,10205,10206,10208,10210],{"class":213,"line":410},[211,10207,1975],{"class":332},[211,10209,337],{"class":336},[211,10211,341],{"class":340},[211,10213,10214,10216,10218,10220,10222,10224,10226,10228,10230],{"class":213,"line":416},[211,10215,1984],{"class":347},[211,10217,351],{"class":340},[211,10219,466],{"class":340},[211,10221,1230],{"class":347},[211,10223,351],{"class":340},[211,10225,400],{"class":340},[211,10227,9868],{"class":220},[211,10229,357],{"class":340},[211,10231,2002],{"class":340},[211,10233,10234,10236,10238],{"class":213,"line":422},[211,10235,7077],{"class":347},[211,10237,351],{"class":340},[211,10239,379],{"class":340},[211,10241,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262],{"class":213,"line":940},[211,10243,7086],{"class":340},[211,10245,3956],{"class":347},[211,10247,357],{"class":340},[211,10249,351],{"class":340},[211,10251,466],{"class":340},[211,10253,1230],{"class":347},[211,10255,351],{"class":340},[211,10257,400],{"class":340},[211,10259,3971],{"class":220},[211,10261,357],{"class":340},[211,10263,2002],{"class":340},[211,10265,10266,10268,10270,10272,10274,10276,10278,10280,10282,10284,10286],{"class":213,"line":1276},[211,10267,7086],{"class":340},[211,10269,9916],{"class":347},[211,10271,357],{"class":340},[211,10273,351],{"class":340},[211,10275,466],{"class":340},[211,10277,1230],{"class":347},[211,10279,351],{"class":340},[211,10281,400],{"class":340},[211,10283,9931],{"class":220},[211,10285,357],{"class":340},[211,10287,2002],{"class":340},[211,10289,10290],{"class":213,"line":1286},[211,10291,2871],{"class":340},[211,10293,10294,10296],{"class":213,"line":1296},[211,10295,2007],{"class":340},[211,10297,428],{"class":336},[211,10299,10300,10302],{"class":213,"line":1302},[211,10301,2014],{"class":336},[211,10303,368],{"class":340},[211,10305,10306,10308],{"class":213,"line":2842},[211,10307,425],{"class":340},[211,10309,428],{"class":336},[188,10311,10312,10313,10316,10317,301],{},"You can also override the service name per handler using ",[208,10314,10315],{},"useLogger(event, 'service-name')",". See ",[299,10318,10320],{"href":10319},"/getting-started/quick-start#service-identification","Quick Start - Service Identification",[269,10322,9340],{"id":10323},"sampling",[188,10325,10326],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[744,10328,10330],{"id":10329},"head-sampling-rates","Head Sampling (rates)",[188,10332,10333,10334,10337],{},"Random sampling based on log level, decided ",[2420,10335,10336],{},"before"," the request completes:",[197,10339,10340,10478,10614],{},[200,10341,10343],{"className":315,"code":10342,"filename":317,"language":318,"meta":206,"style":206},"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",[208,10344,10345,10357,10375,10383,10392,10401,10415,10430,10445,10460,10464,10468,10472],{"__ignoreMap":206},[211,10346,10347,10349,10351,10353,10355],{"class":213,"line":214},[211,10348,326],{"class":325},[211,10350,329],{"class":325},[211,10352,333],{"class":332},[211,10354,337],{"class":336},[211,10356,341],{"class":340},[211,10358,10359,10361,10363,10365,10367,10369,10371,10373],{"class":213,"line":344},[211,10360,348],{"class":347},[211,10362,351],{"class":340},[211,10364,354],{"class":336},[211,10366,357],{"class":340},[211,10368,360],{"class":220},[211,10370,357],{"class":340},[211,10372,365],{"class":336},[211,10374,368],{"class":340},[211,10376,10377,10379,10381],{"class":213,"line":371},[211,10378,374],{"class":347},[211,10380,351],{"class":340},[211,10382,379],{"class":340},[211,10384,10385,10388,10390],{"class":213,"line":382},[211,10386,10387],{"class":347},"    sampling",[211,10389,351],{"class":340},[211,10391,379],{"class":340},[211,10393,10394,10397,10399],{"class":213,"line":392},[211,10395,10396],{"class":347},"      rates",[211,10398,351],{"class":340},[211,10400,379],{"class":340},[211,10402,10403,10406,10408,10410,10412],{"class":213,"line":410},[211,10404,10405],{"class":347},"        info",[211,10407,351],{"class":340},[211,10409,8898],{"class":3259},[211,10411,505],{"class":340},[211,10413,10414],{"class":664},"    // Keep 10% of info logs\n",[211,10416,10417,10420,10422,10425,10427],{"class":213,"line":416},[211,10418,10419],{"class":347},"        warn",[211,10421,351],{"class":340},[211,10423,10424],{"class":3259}," 50",[211,10426,505],{"class":340},[211,10428,10429],{"class":664},"    // Keep 50% of warning logs\n",[211,10431,10432,10435,10437,10440,10442],{"class":213,"line":422},[211,10433,10434],{"class":347},"        debug",[211,10436,351],{"class":340},[211,10438,10439],{"class":3259}," 5",[211,10441,505],{"class":340},[211,10443,10444],{"class":664},"    // Keep 5% of debug logs\n",[211,10446,10447,10450,10452,10455,10457],{"class":213,"line":940},[211,10448,10449],{"class":347},"        error",[211,10451,351],{"class":340},[211,10453,10454],{"class":3259}," 100",[211,10456,505],{"class":340},[211,10458,10459],{"class":664},"  // Always keep errors (default)\n",[211,10461,10462],{"class":213,"line":1276},[211,10463,2871],{"class":340},[211,10465,10466],{"class":213,"line":1286},[211,10467,413],{"class":340},[211,10469,10470],{"class":213,"line":1296},[211,10471,419],{"class":340},[211,10473,10474,10476],{"class":213,"line":1302},[211,10475,425],{"class":340},[211,10477,428],{"class":336},[200,10479,10481],{"className":315,"code":10480,"filename":9542,"language":318,"meta":206,"style":206},"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",[208,10482,10483,10501,10515,10519,10531,10539,10547,10556,10592,10596,10602,10608],{"__ignoreMap":206},[211,10484,10485,10487,10489,10491,10493,10495,10497,10499],{"class":213,"line":214},[211,10486,463],{"class":325},[211,10488,466],{"class":340},[211,10490,1918],{"class":336},[211,10492,472],{"class":340},[211,10494,475],{"class":325},[211,10496,400],{"class":340},[211,10498,1902],{"class":220},[211,10500,483],{"class":340},[211,10502,10503,10505,10507,10509,10511,10513],{"class":213,"line":344},[211,10504,463],{"class":325},[211,10506,1935],{"class":336},[211,10508,1938],{"class":325},[211,10510,400],{"class":340},[211,10512,1943],{"class":220},[211,10514,483],{"class":340},[211,10516,10517],{"class":213,"line":371},[211,10518,489],{"emptyLinePlaceholder":488},[211,10520,10521,10523,10525,10527,10529],{"class":213,"line":382},[211,10522,326],{"class":325},[211,10524,329],{"class":325},[211,10526,1918],{"class":332},[211,10528,337],{"class":336},[211,10530,341],{"class":340},[211,10532,10533,10535,10537],{"class":213,"line":392},[211,10534,348],{"class":347},[211,10536,351],{"class":340},[211,10538,1970],{"class":336},[211,10540,10541,10543,10545],{"class":213,"line":410},[211,10542,1975],{"class":332},[211,10544,337],{"class":336},[211,10546,341],{"class":340},[211,10548,10549,10552,10554],{"class":213,"line":416},[211,10550,10551],{"class":347},"      sampling",[211,10553,351],{"class":340},[211,10555,379],{"class":340},[211,10557,10558,10561,10563,10565,10568,10570,10572,10574,10577,10579,10581,10583,10586,10588,10590],{"class":213,"line":422},[211,10559,10560],{"class":347},"        rates",[211,10562,351],{"class":340},[211,10564,466],{"class":340},[211,10566,10567],{"class":347}," info",[211,10569,351],{"class":340},[211,10571,8898],{"class":3259},[211,10573,505],{"class":340},[211,10575,10576],{"class":347}," warn",[211,10578,351],{"class":340},[211,10580,10424],{"class":3259},[211,10582,505],{"class":340},[211,10584,10585],{"class":347}," debug",[211,10587,351],{"class":340},[211,10589,10439],{"class":3259},[211,10591,2002],{"class":340},[211,10593,10594],{"class":213,"line":940},[211,10595,2871],{"class":340},[211,10597,10598,10600],{"class":213,"line":1276},[211,10599,2007],{"class":340},[211,10601,428],{"class":336},[211,10603,10604,10606],{"class":213,"line":1286},[211,10605,2014],{"class":336},[211,10607,368],{"class":340},[211,10609,10610,10612],{"class":213,"line":1296},[211,10611,425],{"class":340},[211,10613,428],{"class":336},[200,10615,10617],{"className":315,"code":10616,"filename":9666,"language":318,"meta":206,"style":206},"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",[208,10618,10619,10637,10651,10655,10667,10675,10683,10691,10723,10727,10733,10739],{"__ignoreMap":206},[211,10620,10621,10623,10625,10627,10629,10631,10633,10635],{"class":213,"line":214},[211,10622,463],{"class":325},[211,10624,466],{"class":340},[211,10626,2186],{"class":336},[211,10628,472],{"class":340},[211,10630,475],{"class":325},[211,10632,400],{"class":340},[211,10634,2195],{"class":220},[211,10636,483],{"class":340},[211,10638,10639,10641,10643,10645,10647,10649],{"class":213,"line":344},[211,10640,463],{"class":325},[211,10642,1935],{"class":336},[211,10644,1938],{"class":325},[211,10646,400],{"class":340},[211,10648,2210],{"class":220},[211,10650,483],{"class":340},[211,10652,10653],{"class":213,"line":371},[211,10654,489],{"emptyLinePlaceholder":488},[211,10656,10657,10659,10661,10663,10665],{"class":213,"line":382},[211,10658,326],{"class":325},[211,10660,329],{"class":325},[211,10662,2186],{"class":332},[211,10664,337],{"class":336},[211,10666,341],{"class":340},[211,10668,10669,10671,10673],{"class":213,"line":392},[211,10670,348],{"class":347},[211,10672,351],{"class":340},[211,10674,1970],{"class":336},[211,10676,10677,10679,10681],{"class":213,"line":410},[211,10678,1975],{"class":332},[211,10680,337],{"class":336},[211,10682,341],{"class":340},[211,10684,10685,10687,10689],{"class":213,"line":416},[211,10686,10551],{"class":347},[211,10688,351],{"class":340},[211,10690,379],{"class":340},[211,10692,10693,10695,10697,10699,10701,10703,10705,10707,10709,10711,10713,10715,10717,10719,10721],{"class":213,"line":422},[211,10694,10560],{"class":347},[211,10696,351],{"class":340},[211,10698,466],{"class":340},[211,10700,10567],{"class":347},[211,10702,351],{"class":340},[211,10704,8898],{"class":3259},[211,10706,505],{"class":340},[211,10708,10576],{"class":347},[211,10710,351],{"class":340},[211,10712,10424],{"class":3259},[211,10714,505],{"class":340},[211,10716,10585],{"class":347},[211,10718,351],{"class":340},[211,10720,10439],{"class":3259},[211,10722,2002],{"class":340},[211,10724,10725],{"class":213,"line":940},[211,10726,2871],{"class":340},[211,10728,10729,10731],{"class":213,"line":1276},[211,10730,2007],{"class":340},[211,10732,428],{"class":336},[211,10734,10735,10737],{"class":213,"line":1286},[211,10736,2014],{"class":336},[211,10738,368],{"class":340},[211,10740,10741,10743],{"class":213,"line":1296},[211,10742,425],{"class":340},[211,10744,428],{"class":336},[946,10746,10748,10751,10752,10755,10756,673],{"color":10747,"icon":49},"success",[2420,10749,10750],{},"Errors are always logged by default."," Even if you don't specify ",[208,10753,10754],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[208,10757,10758],{},"error: 0",[744,10760,10762],{"id":10761},"tail-sampling-keep","Tail Sampling (keep)",[188,10764,10765,10766,10769],{},"Force-keep logs based on request outcome, evaluated ",[2420,10767,10768],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[200,10771,10773],{"className":315,"code":10772,"language":318,"meta":206,"style":206},"// 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",[208,10774,10775,10780,10788,10805,10813,10832,10848,10868,10874],{"__ignoreMap":206},[211,10776,10777],{"class":213,"line":214},[211,10778,10779],{"class":664},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[211,10781,10782,10784,10786],{"class":213,"line":344},[211,10783,10323],{"class":217},[211,10785,351],{"class":340},[211,10787,379],{"class":340},[211,10789,10790,10793,10795,10797,10799,10801,10803],{"class":213,"line":371},[211,10791,10792],{"class":217},"  rates",[211,10794,351],{"class":340},[211,10796,466],{"class":340},[211,10798,10567],{"class":217},[211,10800,351],{"class":340},[211,10802,8898],{"class":3259},[211,10804,2002],{"class":340},[211,10806,10807,10809,10811],{"class":213,"line":382},[211,10808,4058],{"class":217},[211,10810,351],{"class":340},[211,10812,1970],{"class":347},[211,10814,10815,10818,10821,10823,10826,10829],{"class":213,"line":392},[211,10816,10817],{"class":340},"    {",[211,10819,10820],{"class":347}," duration",[211,10822,351],{"class":340},[211,10824,10825],{"class":3259}," 1000",[211,10827,10828],{"class":340}," },",[211,10830,10831],{"class":664},"           // Always keep if duration >= 1000ms\n",[211,10833,10834,10836,10838,10840,10843,10845],{"class":213,"line":410},[211,10835,10817],{"class":340},[211,10837,3254],{"class":347},[211,10839,351],{"class":340},[211,10841,10842],{"class":3259}," 400",[211,10844,10828],{"class":340},[211,10846,10847],{"class":664},"              // Always keep if status >= 400\n",[211,10849,10850,10852,10854,10856,10858,10861,10863,10865],{"class":213,"line":416},[211,10851,10817],{"class":340},[211,10853,8713],{"class":347},[211,10855,351],{"class":340},[211,10857,400],{"class":340},[211,10859,10860],{"class":220},"/api/critical/**",[211,10862,357],{"class":340},[211,10864,10828],{"class":340},[211,10866,10867],{"class":664}," // Always keep critical paths\n",[211,10869,10870,10872],{"class":213,"line":422},[211,10871,2014],{"class":347},[211,10873,368],{"class":340},[211,10875,10876],{"class":213,"line":940},[211,10877,1074],{"class":340},[188,10879,10880,10881,10884],{},"Conditions use ",[208,10882,10883],{},">="," comparison and follow OR logic (any match = keep).",[744,10886,10888],{"id":10887},"custom-tail-sampling","Custom Tail Sampling",[188,10890,10891,10892,10894,10895,10897],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[208,10893,1851],{}," hook (Nuxt/Nitro) or the ",[208,10896,1682],{}," callback (Next.js):",[197,10899,10900,11054],{},[200,10901,10904],{"className":315,"code":10902,"filename":10903,"language":318,"meta":206,"style":206},"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)",[208,10905,10906,10928,10963,11003,11007,11025,11038,11042,11048],{"__ignoreMap":206},[211,10907,10908,10910,10912,10915,10917,10919,10922,10924,10926],{"class":213,"line":214},[211,10909,326],{"class":325},[211,10911,329],{"class":325},[211,10913,10914],{"class":332}," defineNitroPlugin",[211,10916,337],{"class":336},[211,10918,337],{"class":340},[211,10920,10921],{"class":634},"nitroApp",[211,10923,642],{"class":340},[211,10925,645],{"class":496},[211,10927,379],{"class":340},[211,10929,10930,10933,10935,10938,10940,10943,10945,10947,10949,10951,10953,10955,10957,10959,10961],{"class":213,"line":344},[211,10931,10932],{"class":336},"  nitroApp",[211,10934,673],{"class":340},[211,10936,10937],{"class":336},"hooks",[211,10939,673],{"class":340},[211,10941,10942],{"class":332},"hook",[211,10944,337],{"class":347},[211,10946,357],{"class":340},[211,10948,1851],{"class":220},[211,10950,357],{"class":340},[211,10952,505],{"class":340},[211,10954,631],{"class":340},[211,10956,4004],{"class":634},[211,10958,642],{"class":340},[211,10960,645],{"class":496},[211,10962,379],{"class":340},[211,10964,10965,10967,10969,10971,10973,10975,10977,10979,10982,10984,10986,10989,10992,10995,10997,11000],{"class":213,"line":371},[211,10966,3171],{"class":496},[211,10968,684],{"class":336},[211,10970,523],{"class":340},[211,10972,4090],{"class":336},[211,10974,673],{"class":340},[211,10976,2771],{"class":336},[211,10978,673],{"class":340},[211,10980,10981],{"class":336},"user",[211,10983,2778],{"class":325},[211,10985,466],{"class":340},[211,10987,10988],{"class":347}," premium",[211,10990,10991],{"class":340},"?:",[211,10993,10994],{"class":217}," boolean",[211,10996,472],{"class":340},[211,10998,10999],{"class":340}," |",[211,11001,11002],{"class":217}," undefined\n",[211,11004,11005],{"class":213,"line":382},[211,11006,489],{"emptyLinePlaceholder":488},[211,11008,11009,11011,11013,11015,11018,11021,11023],{"class":213,"line":392},[211,11010,4075],{"class":325},[211,11012,631],{"class":347},[211,11014,10981],{"class":336},[211,11016,11017],{"class":340},"?.",[211,11019,11020],{"class":336},"premium",[211,11022,918],{"class":347},[211,11024,341],{"class":340},[211,11026,11027,11030,11032,11034,11036],{"class":213,"line":410},[211,11028,11029],{"class":336},"      ctx",[211,11031,673],{"class":340},[211,11033,4109],{"class":336},[211,11035,523],{"class":340},[211,11037,4114],{"class":731},[211,11039,11040],{"class":213,"line":416},[211,11041,3373],{"class":340},[211,11043,11044,11046],{"class":213,"line":422},[211,11045,5212],{"class":340},[211,11047,428],{"class":347},[211,11049,11050,11052],{"class":213,"line":940},[211,11051,425],{"class":340},[211,11053,428],{"class":336},[200,11055,11058],{"className":315,"code":11056,"filename":11057,"language":318,"meta":206,"style":206},"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)",[208,11059,11060,11078,11082,11107,11121,11130,11147,11180,11184,11200,11234,11258,11262],{"__ignoreMap":206},[211,11061,11062,11064,11066,11068,11070,11072,11074,11076],{"class":213,"line":214},[211,11063,463],{"class":325},[211,11065,466],{"class":340},[211,11067,469],{"class":336},[211,11069,472],{"class":340},[211,11071,475],{"class":325},[211,11073,400],{"class":340},[211,11075,480],{"class":220},[211,11077,483],{"class":340},[211,11079,11080],{"class":213,"line":344},[211,11081,489],{"emptyLinePlaceholder":488},[211,11083,11084,11086,11088,11090,11092,11094,11097,11099,11101,11103,11105],{"class":213,"line":371},[211,11085,326],{"class":325},[211,11087,497],{"class":496},[211,11089,466],{"class":340},[211,11091,502],{"class":336},[211,11093,505],{"class":340},[211,11095,11096],{"class":336}," useLogger ",[211,11098,425],{"class":340},[211,11100,523],{"class":340},[211,11102,469],{"class":332},[211,11104,337],{"class":336},[211,11106,341],{"class":340},[211,11108,11109,11111,11113,11115,11117,11119],{"class":213,"line":382},[211,11110,534],{"class":347},[211,11112,351],{"class":340},[211,11114,400],{"class":340},[211,11116,403],{"class":220},[211,11118,357],{"class":340},[211,11120,368],{"class":340},[211,11122,11123,11126,11128],{"class":213,"line":392},[211,11124,11125],{"class":347},"  sampling",[211,11127,351],{"class":340},[211,11129,379],{"class":340},[211,11131,11132,11135,11137,11139,11141,11143,11145],{"class":213,"line":410},[211,11133,11134],{"class":347},"    rates",[211,11136,351],{"class":340},[211,11138,466],{"class":340},[211,11140,10567],{"class":347},[211,11142,351],{"class":340},[211,11144,8898],{"class":3259},[211,11146,2002],{"class":340},[211,11148,11149,11152,11154,11156,11158,11160,11162,11164,11166,11168,11170,11172,11174,11176,11178],{"class":213,"line":416},[211,11150,11151],{"class":347},"    keep",[211,11153,351],{"class":340},[211,11155,354],{"class":336},[211,11157,681],{"class":340},[211,11159,3254],{"class":347},[211,11161,351],{"class":340},[211,11163,10842],{"class":3259},[211,11165,10828],{"class":340},[211,11167,466],{"class":340},[211,11169,10820],{"class":347},[211,11171,351],{"class":340},[211,11173,10825],{"class":3259},[211,11175,472],{"class":340},[211,11177,365],{"class":336},[211,11179,368],{"class":340},[211,11181,11182],{"class":213,"line":422},[211,11183,419],{"class":340},[211,11185,11186,11188,11190,11192,11194,11196,11198],{"class":213,"line":940},[211,11187,4058],{"class":332},[211,11189,351],{"class":340},[211,11191,631],{"class":340},[211,11193,4004],{"class":634},[211,11195,642],{"class":340},[211,11197,645],{"class":496},[211,11199,379],{"class":340},[211,11201,11202,11204,11206,11208,11210,11212,11214,11216,11218,11220,11222,11224,11226,11228,11230,11232],{"class":213,"line":1276},[211,11203,3171],{"class":496},[211,11205,684],{"class":336},[211,11207,523],{"class":340},[211,11209,4090],{"class":336},[211,11211,673],{"class":340},[211,11213,2771],{"class":336},[211,11215,673],{"class":340},[211,11217,10981],{"class":336},[211,11219,2778],{"class":325},[211,11221,466],{"class":340},[211,11223,10988],{"class":347},[211,11225,10991],{"class":340},[211,11227,10994],{"class":217},[211,11229,472],{"class":340},[211,11231,10999],{"class":340},[211,11233,11002],{"class":217},[211,11235,11236,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256],{"class":213,"line":1286},[211,11237,4075],{"class":325},[211,11239,631],{"class":347},[211,11241,10981],{"class":336},[211,11243,11017],{"class":340},[211,11245,11020],{"class":336},[211,11247,918],{"class":347},[211,11249,4004],{"class":336},[211,11251,673],{"class":340},[211,11253,4109],{"class":336},[211,11255,523],{"class":340},[211,11257,4114],{"class":731},[211,11259,11260],{"class":213,"line":1296},[211,11261,419],{"class":340},[211,11263,11264,11266],{"class":213,"line":1302},[211,11265,425],{"class":340},[211,11267,428],{"class":336},[188,11269,11270,11271,6438,11274,435,11276,435,11278,435,11280,11282,11283,673],{},"The callback receives a ",[208,11272,11273],{},"TailSamplingContext",[208,11275,3288],{},[208,11277,4084],{},[208,11279,8639],{},[208,11281,8636],{},", and the full accumulated ",[208,11284,2771],{},[269,11286,11288],{"id":11287},"log-draining","Log Draining",[188,11290,11291,11292,11295],{},"Send logs to external services like Axiom, Loki, or custom endpoints. The drain is called in ",[2420,11293,11294],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[197,11297,11298,11478],{},[200,11299,11302],{"className":315,"code":11300,"filename":11301,"language":318,"meta":206,"style":206},"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)",[208,11303,11304,11324,11358,11378,11393,11432,11460,11466,11472],{"__ignoreMap":206},[211,11305,11306,11308,11310,11312,11314,11316,11318,11320,11322],{"class":213,"line":214},[211,11307,326],{"class":325},[211,11309,329],{"class":325},[211,11311,10914],{"class":332},[211,11313,337],{"class":336},[211,11315,337],{"class":340},[211,11317,10921],{"class":634},[211,11319,642],{"class":340},[211,11321,645],{"class":496},[211,11323,379],{"class":340},[211,11325,11326,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356],{"class":213,"line":344},[211,11327,10932],{"class":336},[211,11329,673],{"class":340},[211,11331,10937],{"class":336},[211,11333,673],{"class":340},[211,11335,10942],{"class":332},[211,11337,337],{"class":347},[211,11339,357],{"class":340},[211,11341,1807],{"class":220},[211,11343,357],{"class":340},[211,11345,505],{"class":340},[211,11347,2735],{"class":496},[211,11349,631],{"class":340},[211,11351,4004],{"class":634},[211,11353,642],{"class":340},[211,11355,645],{"class":496},[211,11357,379],{"class":340},[211,11359,11360,11363,11365,11367,11369,11372,11374,11376],{"class":213,"line":371},[211,11361,11362],{"class":325},"    await",[211,11364,3153],{"class":332},[211,11366,337],{"class":347},[211,11368,357],{"class":340},[211,11370,11371],{"class":220},"https://api.axiom.co/v1/datasets/logs/ingest",[211,11373,357],{"class":340},[211,11375,505],{"class":340},[211,11377,379],{"class":340},[211,11379,11380,11383,11385,11387,11389,11391],{"class":213,"line":382},[211,11381,11382],{"class":347},"      method",[211,11384,351],{"class":340},[211,11386,400],{"class":340},[211,11388,8706],{"class":220},[211,11390,357],{"class":340},[211,11392,368],{"class":340},[211,11394,11395,11398,11400,11402,11405,11407,11410,11413,11416,11419,11421,11423,11425,11427,11430],{"class":213,"line":392},[211,11396,11397],{"class":347},"      headers",[211,11399,351],{"class":340},[211,11401,466],{"class":340},[211,11403,11404],{"class":347}," Authorization",[211,11406,351],{"class":340},[211,11408,11409],{"class":340}," `",[211,11411,11412],{"class":220},"Bearer ",[211,11414,11415],{"class":340},"${",[211,11417,11418],{"class":336},"process",[211,11420,673],{"class":340},[211,11422,1531],{"class":336},[211,11424,673],{"class":340},[211,11426,7366],{"class":336},[211,11428,11429],{"class":340},"}`",[211,11431,2002],{"class":340},[211,11433,11434,11437,11439,11442,11444,11446,11449,11451,11453,11455,11458],{"class":213,"line":410},[211,11435,11436],{"class":347},"      body",[211,11438,351],{"class":340},[211,11440,11441],{"class":336}," JSON",[211,11443,673],{"class":340},[211,11445,1705],{"class":332},[211,11447,11448],{"class":347},"([",[211,11450,4004],{"class":336},[211,11452,673],{"class":340},[211,11454,2092],{"class":336},[211,11456,11457],{"class":347},"])",[211,11459,368],{"class":340},[211,11461,11462,11464],{"class":213,"line":416},[211,11463,2007],{"class":340},[211,11465,428],{"class":347},[211,11467,11468,11470],{"class":213,"line":422},[211,11469,5212],{"class":340},[211,11471,428],{"class":347},[211,11473,11474,11476],{"class":213,"line":940},[211,11475,425],{"class":340},[211,11477,428],{"class":336},[200,11479,11481],{"className":315,"code":11480,"filename":11057,"language":318,"meta":206,"style":206},"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",[208,11482,11483,11501,11519,11537,11541,11573,11577,11601,11615,11631,11647,11667,11676],{"__ignoreMap":206},[211,11484,11485,11487,11489,11491,11493,11495,11497,11499],{"class":213,"line":214},[211,11486,463],{"class":325},[211,11488,466],{"class":340},[211,11490,469],{"class":336},[211,11492,472],{"class":340},[211,11494,475],{"class":325},[211,11496,400],{"class":340},[211,11498,480],{"class":220},[211,11500,483],{"class":340},[211,11502,11503,11505,11507,11509,11511,11513,11515,11517],{"class":213,"line":344},[211,11504,463],{"class":325},[211,11506,466],{"class":340},[211,11508,3831],{"class":336},[211,11510,472],{"class":340},[211,11512,475],{"class":325},[211,11514,400],{"class":340},[211,11516,3840],{"class":220},[211,11518,483],{"class":340},[211,11520,11521,11523,11525,11527,11529,11531,11533,11535],{"class":213,"line":371},[211,11522,463],{"class":325},[211,11524,466],{"class":340},[211,11526,8846],{"class":336},[211,11528,472],{"class":340},[211,11530,475],{"class":325},[211,11532,400],{"class":340},[211,11534,8855],{"class":220},[211,11536,483],{"class":340},[211,11538,11539],{"class":213,"line":382},[211,11540,489],{"emptyLinePlaceholder":488},[211,11542,11543,11545,11547,11549,11551,11553,11555,11557,11559,11561,11563,11565,11567,11569,11571],{"class":213,"line":392},[211,11544,3607],{"class":496},[211,11546,8868],{"class":336},[211,11548,621],{"class":340},[211,11550,8846],{"class":332},[211,11552,337],{"class":336},[211,11554,681],{"class":340},[211,11556,8886],{"class":347},[211,11558,351],{"class":340},[211,11560,466],{"class":340},[211,11562,8893],{"class":347},[211,11564,351],{"class":340},[211,11566,10424],{"class":3259},[211,11568,472],{"class":340},[211,11570,472],{"class":340},[211,11572,428],{"class":336},[211,11574,11575],{"class":213,"line":410},[211,11576,489],{"emptyLinePlaceholder":488},[211,11578,11579,11581,11583,11585,11587,11589,11591,11593,11595,11597,11599],{"class":213,"line":416},[211,11580,326],{"class":325},[211,11582,497],{"class":496},[211,11584,466],{"class":340},[211,11586,502],{"class":336},[211,11588,505],{"class":340},[211,11590,11096],{"class":336},[211,11592,425],{"class":340},[211,11594,523],{"class":340},[211,11596,469],{"class":332},[211,11598,337],{"class":336},[211,11600,341],{"class":340},[211,11602,11603,11605,11607,11609,11611,11613],{"class":213,"line":422},[211,11604,534],{"class":347},[211,11606,351],{"class":340},[211,11608,400],{"class":340},[211,11610,403],{"class":220},[211,11612,357],{"class":340},[211,11614,368],{"class":340},[211,11616,11617,11619,11621,11623,11625,11627,11629],{"class":213,"line":940},[211,11618,3984],{"class":347},[211,11620,351],{"class":340},[211,11622,8916],{"class":332},[211,11624,337],{"class":336},[211,11626,8921],{"class":332},[211,11628,337],{"class":336},[211,11630,341],{"class":340},[211,11632,11633,11636,11638,11640,11643,11645],{"class":213,"line":1276},[211,11634,11635],{"class":347},"    dataset",[211,11637,351],{"class":340},[211,11639,400],{"class":340},[211,11641,11642],{"class":220},"logs",[211,11644,357],{"class":340},[211,11646,368],{"class":340},[211,11648,11649,11652,11654,11656,11658,11660,11662,11664],{"class":213,"line":1286},[211,11650,11651],{"class":347},"    token",[211,11653,351],{"class":340},[211,11655,4040],{"class":336},[211,11657,673],{"class":340},[211,11659,1531],{"class":336},[211,11661,673],{"class":340},[211,11663,7366],{"class":336},[211,11665,11666],{"class":340},"!,\n",[211,11668,11669,11671,11674],{"class":213,"line":1296},[211,11670,5212],{"class":340},[211,11672,11673],{"class":336},"))",[211,11675,368],{"class":340},[211,11677,11678,11680],{"class":213,"line":1302},[211,11679,425],{"class":340},[211,11681,428],{"class":336},[188,11683,11684,11685,11687],{},"The hook receives a ",[208,11686,8877],{}," with:",[3409,11689,11690,11699,11710],{},[3412,11691,11692,11694,11695,11698],{},[208,11693,2092],{},": The complete ",[208,11696,11697],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[3412,11700,11701,11703,11704,435,11706,435,11708,642],{},[208,11702,635],{},": Optional request metadata (",[208,11705,8636],{},[208,11707,8639],{},[208,11709,1083],{},[3412,11711,11712,11715],{},[208,11713,11714],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[946,11717,11718,11721,11722,435,11725,435,11728,435,11731,435,11734,435,11737,11740],{"color":10747,"icon":49},[2420,11719,11720],{},"Security:"," Sensitive headers (",[208,11723,11724],{},"authorization",[208,11726,11727],{},"cookie",[208,11729,11730],{},"set-cookie",[208,11732,11733],{},"x-api-key",[208,11735,11736],{},"x-auth-token",[208,11738,11739],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[744,11742,11744],{"id":11743},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[188,11746,3813,11747,11749],{},[208,11748,11714],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[200,11751,11754],{"className":315,"code":11752,"filename":11753,"language":318,"meta":206,"style":206},"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",[208,11755,11756,11776,11790,11794,11826,11843,11847,11877,11905,11909,11924,11928,11942,11949,11965,11974,11987,11998,12002,12008,12014],{"__ignoreMap":206},[211,11757,11758,11760,11762,11764,11766,11768,11770,11772,11774],{"class":213,"line":214},[211,11759,326],{"class":325},[211,11761,329],{"class":325},[211,11763,10914],{"class":332},[211,11765,337],{"class":336},[211,11767,337],{"class":340},[211,11769,10921],{"class":634},[211,11771,642],{"class":340},[211,11773,645],{"class":496},[211,11775,379],{"class":340},[211,11777,11778,11780,11783,11785,11788],{"class":213,"line":344},[211,11779,652],{"class":496},[211,11781,11782],{"class":336}," posthog",[211,11784,523],{"class":340},[211,11786,11787],{"class":332}," usePostHog",[211,11789,839],{"class":347},[211,11791,11792],{"class":213,"line":371},[211,11793,489],{"emptyLinePlaceholder":488},[211,11795,11796,11798,11800,11802,11804,11806,11808,11810,11812,11814,11816,11818,11820,11822,11824],{"class":213,"line":382},[211,11797,10932],{"class":336},[211,11799,673],{"class":340},[211,11801,10937],{"class":336},[211,11803,673],{"class":340},[211,11805,10942],{"class":332},[211,11807,337],{"class":347},[211,11809,357],{"class":340},[211,11811,1807],{"class":220},[211,11813,357],{"class":340},[211,11815,505],{"class":340},[211,11817,631],{"class":340},[211,11819,4004],{"class":634},[211,11821,642],{"class":340},[211,11823,645],{"class":496},[211,11825,379],{"class":340},[211,11827,11828,11830,11832,11835,11838,11840],{"class":213,"line":392},[211,11829,4075],{"class":325},[211,11831,631],{"class":347},[211,11833,11834],{"class":340},"!",[211,11836,11837],{"class":336},"posthog",[211,11839,918],{"class":347},[211,11841,11842],{"class":325},"return\n",[211,11844,11845],{"class":213,"line":410},[211,11846,489],{"emptyLinePlaceholder":488},[211,11848,11849,11851,11854,11856,11858,11860,11862,11864,11867,11869,11872,11874],{"class":213,"line":416},[211,11850,3171],{"class":496},[211,11852,11853],{"class":336}," sessionId",[211,11855,523],{"class":340},[211,11857,4090],{"class":336},[211,11859,673],{"class":340},[211,11861,11714],{"class":336},[211,11863,11017],{"class":340},[211,11865,11866],{"class":347},"[",[211,11868,357],{"class":340},[211,11870,11871],{"class":220},"x-posthog-session-id",[211,11873,357],{"class":340},[211,11875,11876],{"class":347},"]\n",[211,11878,11879,11881,11884,11886,11888,11890,11892,11894,11896,11898,11901,11903],{"class":213,"line":422},[211,11880,3171],{"class":496},[211,11882,11883],{"class":336}," distinctId",[211,11885,523],{"class":340},[211,11887,4090],{"class":336},[211,11889,673],{"class":340},[211,11891,11714],{"class":336},[211,11893,11017],{"class":340},[211,11895,11866],{"class":347},[211,11897,357],{"class":340},[211,11899,11900],{"class":220},"x-posthog-distinct-id",[211,11902,357],{"class":340},[211,11904,11876],{"class":347},[211,11906,11907],{"class":213,"line":940},[211,11908,489],{"emptyLinePlaceholder":488},[211,11910,11911,11913,11915,11917,11920,11922],{"class":213,"line":1276},[211,11912,4075],{"class":325},[211,11914,631],{"class":347},[211,11916,11834],{"class":340},[211,11918,11919],{"class":336},"distinctId",[211,11921,918],{"class":347},[211,11923,11842],{"class":325},[211,11925,11926],{"class":213,"line":1286},[211,11927,489],{"emptyLinePlaceholder":488},[211,11929,11930,11933,11935,11938,11940],{"class":213,"line":1296},[211,11931,11932],{"class":336},"    posthog",[211,11934,673],{"class":340},[211,11936,11937],{"class":332},"capture",[211,11939,337],{"class":347},[211,11941,341],{"class":340},[211,11943,11944,11947],{"class":213,"line":1302},[211,11945,11946],{"class":336},"      distinctId",[211,11948,368],{"class":340},[211,11950,11951,11954,11956,11958,11961,11963],{"class":213,"line":2842},[211,11952,11953],{"class":347},"      event",[211,11955,351],{"class":340},[211,11957,400],{"class":340},[211,11959,11960],{"class":220},"server_log",[211,11962,357],{"class":340},[211,11964,368],{"class":340},[211,11966,11967,11970,11972],{"class":213,"line":2868},[211,11968,11969],{"class":347},"      properties",[211,11971,351],{"class":340},[211,11973,379],{"class":340},[211,11975,11976,11979,11981,11983,11985],{"class":213,"line":2874},[211,11977,11978],{"class":340},"        ...",[211,11980,4004],{"class":336},[211,11982,673],{"class":340},[211,11984,2092],{"class":336},[211,11986,368],{"class":340},[211,11988,11989,11992,11994,11996],{"class":213,"line":2879},[211,11990,11991],{"class":347},"        $session_id",[211,11993,351],{"class":340},[211,11995,11853],{"class":336},[211,11997,368],{"class":340},[211,11999,12000],{"class":213,"line":2884},[211,12001,2871],{"class":340},[211,12003,12004,12006],{"class":213,"line":3361},[211,12005,2007],{"class":340},[211,12007,428],{"class":347},[211,12009,12010,12012],{"class":213,"line":3370},[211,12011,5212],{"class":340},[211,12013,428],{"class":347},[211,12015,12016,12018],{"class":213,"line":3376},[211,12017,425],{"class":340},[211,12019,428],{"class":336},[269,12021,12023],{"id":12022},"event-enrichment","Event Enrichment",[188,12025,12026],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[197,12028,12029,12233],{},[200,12030,12033],{"className":315,"code":12031,"filename":12032,"language":318,"meta":206,"style":206},"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)",[208,12034,12035,12041,12048,12055,12062,12069,12081,12085,12105,12116,12125,12134,12143,12152,12157,12161,12193,12221,12227],{"__ignoreMap":206},[211,12036,12037,12039],{"class":213,"line":214},[211,12038,463],{"class":325},[211,12040,379],{"class":340},[211,12042,12043,12046],{"class":213,"line":344},[211,12044,12045],{"class":336},"  createUserAgentEnricher",[211,12047,368],{"class":340},[211,12049,12050,12053],{"class":213,"line":371},[211,12051,12052],{"class":336},"  createGeoEnricher",[211,12054,368],{"class":340},[211,12056,12057,12060],{"class":213,"line":382},[211,12058,12059],{"class":336},"  createRequestSizeEnricher",[211,12061,368],{"class":340},[211,12063,12064,12067],{"class":213,"line":392},[211,12065,12066],{"class":336},"  createTraceContextEnricher",[211,12068,368],{"class":340},[211,12070,12071,12073,12075,12077,12079],{"class":213,"line":410},[211,12072,425],{"class":340},[211,12074,475],{"class":325},[211,12076,400],{"class":340},[211,12078,3860],{"class":220},[211,12080,483],{"class":340},[211,12082,12083],{"class":213,"line":416},[211,12084,489],{"emptyLinePlaceholder":488},[211,12086,12087,12089,12091,12093,12095,12097,12099,12101,12103],{"class":213,"line":422},[211,12088,326],{"class":325},[211,12090,329],{"class":325},[211,12092,10914],{"class":332},[211,12094,337],{"class":336},[211,12096,337],{"class":340},[211,12098,10921],{"class":634},[211,12100,642],{"class":340},[211,12102,645],{"class":496},[211,12104,379],{"class":340},[211,12106,12107,12109,12112,12114],{"class":213,"line":940},[211,12108,652],{"class":496},[211,12110,12111],{"class":336}," enrichers",[211,12113,523],{"class":340},[211,12115,1970],{"class":347},[211,12117,12118,12121,12123],{"class":213,"line":1276},[211,12119,12120],{"class":332},"    createUserAgentEnricher",[211,12122,1360],{"class":347},[211,12124,368],{"class":340},[211,12126,12127,12130,12132],{"class":213,"line":1286},[211,12128,12129],{"class":332},"    createGeoEnricher",[211,12131,1360],{"class":347},[211,12133,368],{"class":340},[211,12135,12136,12139,12141],{"class":213,"line":1296},[211,12137,12138],{"class":332},"    createRequestSizeEnricher",[211,12140,1360],{"class":347},[211,12142,368],{"class":340},[211,12144,12145,12148,12150],{"class":213,"line":1302},[211,12146,12147],{"class":332},"    createTraceContextEnricher",[211,12149,1360],{"class":347},[211,12151,368],{"class":340},[211,12153,12154],{"class":213,"line":2842},[211,12155,12156],{"class":347},"  ]\n",[211,12158,12159],{"class":213,"line":2868},[211,12160,489],{"emptyLinePlaceholder":488},[211,12162,12163,12165,12167,12169,12171,12173,12175,12177,12179,12181,12183,12185,12187,12189,12191],{"class":213,"line":2874},[211,12164,10932],{"class":336},[211,12166,673],{"class":340},[211,12168,10937],{"class":336},[211,12170,673],{"class":340},[211,12172,10942],{"class":332},[211,12174,337],{"class":347},[211,12176,357],{"class":340},[211,12178,1823],{"class":220},[211,12180,357],{"class":340},[211,12182,505],{"class":340},[211,12184,631],{"class":340},[211,12186,4004],{"class":634},[211,12188,642],{"class":340},[211,12190,645],{"class":496},[211,12192,379],{"class":340},[211,12194,12195,12198,12200,12202,12205,12208,12210,12212,12215,12217,12219],{"class":213,"line":2879},[211,12196,12197],{"class":325},"    for",[211,12199,631],{"class":347},[211,12201,3607],{"class":496},[211,12203,12204],{"class":336}," enricher",[211,12206,12207],{"class":340}," of",[211,12209,12111],{"class":336},[211,12211,918],{"class":347},[211,12213,12214],{"class":332},"enricher",[211,12216,337],{"class":347},[211,12218,4004],{"class":336},[211,12220,428],{"class":347},[211,12222,12223,12225],{"class":213,"line":2884},[211,12224,5212],{"class":340},[211,12226,428],{"class":347},[211,12228,12229,12231],{"class":213,"line":3361},[211,12230,425],{"class":340},[211,12232,428],{"class":336},[200,12234,12236],{"className":315,"code":12235,"filename":11057,"language":318,"meta":206,"style":206},"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",[208,12237,12238,12256,12279,12283,12306,12310,12334,12348,12364,12388,12414,12418],{"__ignoreMap":206},[211,12239,12240,12242,12244,12246,12248,12250,12252,12254],{"class":213,"line":214},[211,12241,463],{"class":325},[211,12243,466],{"class":340},[211,12245,469],{"class":336},[211,12247,472],{"class":340},[211,12249,475],{"class":325},[211,12251,400],{"class":340},[211,12253,480],{"class":220},[211,12255,483],{"class":340},[211,12257,12258,12260,12262,12264,12266,12269,12271,12273,12275,12277],{"class":213,"line":344},[211,12259,463],{"class":325},[211,12261,466],{"class":340},[211,12263,3851],{"class":336},[211,12265,505],{"class":340},[211,12267,12268],{"class":336}," createGeoEnricher",[211,12270,472],{"class":340},[211,12272,475],{"class":325},[211,12274,400],{"class":340},[211,12276,3860],{"class":220},[211,12278,483],{"class":340},[211,12280,12281],{"class":213,"line":371},[211,12282,489],{"emptyLinePlaceholder":488},[211,12284,12285,12287,12290,12292,12294,12297,12299,12301,12303],{"class":213,"line":382},[211,12286,3607],{"class":496},[211,12288,12289],{"class":336}," enrichers ",[211,12291,621],{"class":340},[211,12293,354],{"class":336},[211,12295,12296],{"class":332},"createUserAgentEnricher",[211,12298,1360],{"class":336},[211,12300,505],{"class":340},[211,12302,12268],{"class":332},[211,12304,12305],{"class":336},"()]\n",[211,12307,12308],{"class":213,"line":392},[211,12309,489],{"emptyLinePlaceholder":488},[211,12311,12312,12314,12316,12318,12320,12322,12324,12326,12328,12330,12332],{"class":213,"line":410},[211,12313,326],{"class":325},[211,12315,497],{"class":496},[211,12317,466],{"class":340},[211,12319,502],{"class":336},[211,12321,505],{"class":340},[211,12323,11096],{"class":336},[211,12325,425],{"class":340},[211,12327,523],{"class":340},[211,12329,469],{"class":332},[211,12331,337],{"class":336},[211,12333,341],{"class":340},[211,12335,12336,12338,12340,12342,12344,12346],{"class":213,"line":416},[211,12337,534],{"class":347},[211,12339,351],{"class":340},[211,12341,400],{"class":340},[211,12343,403],{"class":220},[211,12345,357],{"class":340},[211,12347,368],{"class":340},[211,12349,12350,12352,12354,12356,12358,12360,12362],{"class":213,"line":422},[211,12351,3997],{"class":332},[211,12353,351],{"class":340},[211,12355,631],{"class":340},[211,12357,4004],{"class":634},[211,12359,642],{"class":340},[211,12361,645],{"class":496},[211,12363,379],{"class":340},[211,12365,12366,12368,12370,12372,12374,12376,12378,12380,12382,12384,12386],{"class":213,"line":940},[211,12367,12197],{"class":325},[211,12369,631],{"class":347},[211,12371,3607],{"class":496},[211,12373,12204],{"class":336},[211,12375,12207],{"class":340},[211,12377,12111],{"class":336},[211,12379,918],{"class":347},[211,12381,12214],{"class":332},[211,12383,337],{"class":347},[211,12385,4004],{"class":336},[211,12387,428],{"class":347},[211,12389,12390,12392,12394,12396,12398,12401,12403,12405,12407,12409,12411],{"class":213,"line":1276},[211,12391,4026],{"class":336},[211,12393,673],{"class":340},[211,12395,2092],{"class":336},[211,12397,673],{"class":340},[211,12399,12400],{"class":336},"deploymentId",[211,12402,523],{"class":340},[211,12404,4040],{"class":336},[211,12406,673],{"class":340},[211,12408,1531],{"class":336},[211,12410,673],{"class":340},[211,12412,12413],{"class":336},"VERCEL_DEPLOYMENT_ID\n",[211,12415,12416],{"class":213,"line":1286},[211,12417,419],{"class":340},[211,12419,12420,12422],{"class":213,"line":1296},[211,12421,425],{"class":340},[211,12423,428],{"class":336},[1443,12425,12426,12438],{},[1446,12427,12428],{},[1449,12429,12430,12433,12436],{},[1452,12431,12432],{},"Enricher",[1452,12434,12435],{},"Event Field",[1452,12437,1463],{},[1465,12439,12440,12455,12470,12485],{},[1449,12441,12442,12447,12452],{},[1470,12443,12444],{},[208,12445,12446],{},"createUserAgentEnricher()",[1470,12448,12449],{},[208,12450,12451],{},"userAgent",[1470,12453,12454],{},"Browser, OS, device type from User-Agent header",[1449,12456,12457,12462,12467],{},[1470,12458,12459],{},[208,12460,12461],{},"createGeoEnricher()",[1470,12463,12464],{},[208,12465,12466],{},"geo",[1470,12468,12469],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[1449,12471,12472,12477,12482],{},[1470,12473,12474],{},[208,12475,12476],{},"createRequestSizeEnricher()",[1470,12478,12479],{},[208,12480,12481],{},"requestSize",[1470,12483,12484],{},"Request/response payload sizes from Content-Length",[1449,12486,12487,12492,12497],{},[1470,12488,12489],{},[208,12490,12491],{},"createTraceContextEnricher()",[1470,12493,12494],{},[208,12495,12496],{},"traceContext",[1470,12498,12499],{},"W3C trace context (traceId, spanId) from traceparent header",[188,12501,12502],{},"You can also write custom enrichers to add any derived context:",[200,12504,12507],{"className":315,"code":12505,"filename":12506,"language":318,"meta":206,"style":206},"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",[208,12508,12509,12529,12561,12586,12592],{"__ignoreMap":206},[211,12510,12511,12513,12515,12517,12519,12521,12523,12525,12527],{"class":213,"line":214},[211,12512,326],{"class":325},[211,12514,329],{"class":325},[211,12516,10914],{"class":332},[211,12518,337],{"class":336},[211,12520,337],{"class":340},[211,12522,10921],{"class":634},[211,12524,642],{"class":340},[211,12526,645],{"class":496},[211,12528,379],{"class":340},[211,12530,12531,12533,12535,12537,12539,12541,12543,12545,12547,12549,12551,12553,12555,12557,12559],{"class":213,"line":344},[211,12532,10932],{"class":336},[211,12534,673],{"class":340},[211,12536,10937],{"class":336},[211,12538,673],{"class":340},[211,12540,10942],{"class":332},[211,12542,337],{"class":347},[211,12544,357],{"class":340},[211,12546,1823],{"class":220},[211,12548,357],{"class":340},[211,12550,505],{"class":340},[211,12552,631],{"class":340},[211,12554,4004],{"class":634},[211,12556,642],{"class":340},[211,12558,645],{"class":496},[211,12560,379],{"class":340},[211,12562,12563,12565,12567,12569,12571,12573,12575,12577,12579,12581,12583],{"class":213,"line":371},[211,12564,4026],{"class":336},[211,12566,673],{"class":340},[211,12568,2092],{"class":336},[211,12570,673],{"class":340},[211,12572,12400],{"class":336},[211,12574,523],{"class":340},[211,12576,4040],{"class":336},[211,12578,673],{"class":340},[211,12580,1531],{"class":336},[211,12582,673],{"class":340},[211,12584,12585],{"class":336},"DEPLOYMENT_ID\n",[211,12587,12588,12590],{"class":213,"line":382},[211,12589,5212],{"class":340},[211,12591,428],{"class":347},[211,12593,12594,12596],{"class":213,"line":392},[211,12595,425],{"class":340},[211,12597,428],{"class":336},[188,12599,4137,12600,12603],{},[299,12601,12602],{"href":111},"Enrichers guide"," for full documentation.",[192,12605,9394],{"id":12606},"client-transport",[188,12608,12609,12610,435,12613,12616],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[208,12611,12612],{},"log.info()",[208,12614,12615],{},"log.error()",", etc. calls are automatically sent to the server.",[197,12618,12619,12716],{},[200,12620,12623],{"className":315,"code":12621,"filename":12622,"language":318,"meta":206,"style":206},"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)",[208,12624,12625,12637,12655,12663,12672,12683,12702,12706,12710],{"__ignoreMap":206},[211,12626,12627,12629,12631,12633,12635],{"class":213,"line":214},[211,12628,326],{"class":325},[211,12630,329],{"class":325},[211,12632,333],{"class":332},[211,12634,337],{"class":336},[211,12636,341],{"class":340},[211,12638,12639,12641,12643,12645,12647,12649,12651,12653],{"class":213,"line":344},[211,12640,348],{"class":347},[211,12642,351],{"class":340},[211,12644,354],{"class":336},[211,12646,357],{"class":340},[211,12648,360],{"class":220},[211,12650,357],{"class":340},[211,12652,365],{"class":336},[211,12654,368],{"class":340},[211,12656,12657,12659,12661],{"class":213,"line":371},[211,12658,374],{"class":347},[211,12660,351],{"class":340},[211,12662,379],{"class":340},[211,12664,12665,12668,12670],{"class":213,"line":382},[211,12666,12667],{"class":347},"    transport",[211,12669,351],{"class":340},[211,12671,379],{"class":340},[211,12673,12674,12677,12679,12681],{"class":213,"line":392},[211,12675,12676],{"class":347},"      enabled",[211,12678,351],{"class":340},[211,12680,732],{"class":731},[211,12682,368],{"class":340},[211,12684,12685,12688,12690,12692,12695,12697,12699],{"class":213,"line":410},[211,12686,12687],{"class":347},"      endpoint",[211,12689,351],{"class":340},[211,12691,400],{"class":340},[211,12693,12694],{"class":220},"/api/_evlog/ingest",[211,12696,357],{"class":340},[211,12698,505],{"class":340},[211,12700,12701],{"class":664},"  // default\n",[211,12703,12704],{"class":213,"line":416},[211,12705,413],{"class":340},[211,12707,12708],{"class":213,"line":422},[211,12709,419],{"class":340},[211,12711,12712,12714],{"class":213,"line":940},[211,12713,425],{"class":340},[211,12715,428],{"class":336},[200,12717,12719],{"className":1110,"code":1111,"filename":12718,"language":1113,"meta":206,"style":206},"app/layout.tsx (Next.js)",[208,12720,12721,12739,12743,12775,12781,12799,12807,12835,12843,12851,12859,12867,12871],{"__ignoreMap":206},[211,12722,12723,12725,12727,12729,12731,12733,12735,12737],{"class":213,"line":214},[211,12724,463],{"class":325},[211,12726,466],{"class":340},[211,12728,1124],{"class":336},[211,12730,472],{"class":340},[211,12732,475],{"class":325},[211,12734,400],{"class":340},[211,12736,1133],{"class":220},[211,12738,483],{"class":340},[211,12740,12741],{"class":213,"line":344},[211,12742,489],{"emptyLinePlaceholder":488},[211,12744,12745,12747,12749,12751,12753,12755,12757,12759,12761,12763,12765,12767,12769,12771,12773],{"class":213,"line":371},[211,12746,326],{"class":325},[211,12748,329],{"class":325},[211,12750,1148],{"class":496},[211,12752,1151],{"class":332},[211,12754,1154],{"class":340},[211,12756,1157],{"class":634},[211,12758,1160],{"class":340},[211,12760,466],{"class":340},[211,12762,1157],{"class":347},[211,12764,351],{"class":340},[211,12766,1169],{"class":217},[211,12768,673],{"class":340},[211,12770,1174],{"class":217},[211,12772,1177],{"class":340},[211,12774,379],{"class":340},[211,12776,12777,12779],{"class":213,"line":382},[211,12778,711],{"class":325},[211,12780,1186],{"class":347},[211,12782,12783,12785,12787,12789,12791,12793,12795,12797],{"class":213,"line":392},[211,12784,1191],{"class":340},[211,12786,1194],{"class":347},[211,12788,1197],{"class":496},[211,12790,621],{"class":340},[211,12792,1202],{"class":340},[211,12794,1205],{"class":220},[211,12796,1202],{"class":340},[211,12798,1210],{"class":340},[211,12800,12801,12803,12805],{"class":213,"line":410},[211,12802,1215],{"class":340},[211,12804,1218],{"class":347},[211,12806,1210],{"class":340},[211,12808,12809,12811,12813,12815,12817,12819,12821,12823,12825,12827,12829,12831,12833],{"class":213,"line":416},[211,12810,1225],{"class":340},[211,12812,1107],{"class":217},[211,12814,1230],{"class":496},[211,12816,621],{"class":340},[211,12818,1202],{"class":340},[211,12820,403],{"class":220},[211,12822,1202],{"class":340},[211,12824,1241],{"class":496},[211,12826,1244],{"class":340},[211,12828,1247],{"class":347},[211,12830,351],{"class":340},[211,12832,732],{"class":731},[211,12834,1254],{"class":340},[211,12836,12837,12839,12841],{"class":213,"line":422},[211,12838,1259],{"class":340},[211,12840,1262],{"class":336},[211,12842,1074],{"class":340},[211,12844,12845,12847,12849],{"class":213,"line":940},[211,12846,1269],{"class":340},[211,12848,1107],{"class":217},[211,12850,1210],{"class":340},[211,12852,12853,12855,12857],{"class":213,"line":1276},[211,12854,1279],{"class":340},[211,12856,1218],{"class":347},[211,12858,1210],{"class":340},[211,12860,12861,12863,12865],{"class":213,"line":1286},[211,12862,1289],{"class":340},[211,12864,1194],{"class":347},[211,12866,1210],{"class":340},[211,12868,12869],{"class":213,"line":1296},[211,12870,1299],{"class":347},[211,12872,12873],{"class":213,"line":1302},[211,12874,1074],{"class":340},[744,12876,12878],{"id":12877},"how-it-works","How it works",[12880,12881,12882,12888,12894,12897,12905],"ol",{},[3412,12883,12884,12885],{},"Client calls ",[208,12886,12887],{},"log.info({ action: 'click', button: 'submit' })",[3412,12889,12890,12891,12893],{},"Log is sent to ",[208,12892,12694],{}," via POST",[3412,12895,12896],{},"Server enriches with environment context (service, version, region, etc.)",[3412,12898,12899,12901,12902],{},[208,12900,1807],{}," hook is called with ",[208,12903,12904],{},"source: 'client'",[3412,12906,12907],{},"External services receive the log (Axiom, Loki, etc.)",[946,12909,12910,12911,435,12913,12916,12917,12920],{"color":948,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[208,12912,1474],{},[208,12914,12915],{},"environment",", or ",[208,12918,12919],{},"version"," from the client.",[188,12922,12923,12924,12926],{},"In your drain hook, you can identify client logs by the ",[208,12925,12904],{}," field:",[200,12928,12931],{"className":315,"code":12929,"filename":12930,"language":318,"meta":206,"style":206},"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",[208,12932,12933,12953,12987,13017,13045,13049,13055],{"__ignoreMap":206},[211,12934,12935,12937,12939,12941,12943,12945,12947,12949,12951],{"class":213,"line":214},[211,12936,326],{"class":325},[211,12938,329],{"class":325},[211,12940,10914],{"class":332},[211,12942,337],{"class":336},[211,12944,337],{"class":340},[211,12946,10921],{"class":634},[211,12948,642],{"class":340},[211,12950,645],{"class":496},[211,12952,379],{"class":340},[211,12954,12955,12957,12959,12961,12963,12965,12967,12969,12971,12973,12975,12977,12979,12981,12983,12985],{"class":213,"line":344},[211,12956,10932],{"class":336},[211,12958,673],{"class":340},[211,12960,10937],{"class":336},[211,12962,673],{"class":340},[211,12964,10942],{"class":332},[211,12966,337],{"class":347},[211,12968,357],{"class":340},[211,12970,1807],{"class":220},[211,12972,357],{"class":340},[211,12974,505],{"class":340},[211,12976,2735],{"class":496},[211,12978,631],{"class":340},[211,12980,4004],{"class":634},[211,12982,642],{"class":340},[211,12984,645],{"class":496},[211,12986,379],{"class":340},[211,12988,12989,12991,12993,12995,12997,12999,13001,13003,13006,13008,13011,13013,13015],{"class":213,"line":371},[211,12990,4075],{"class":325},[211,12992,631],{"class":347},[211,12994,4004],{"class":336},[211,12996,673],{"class":340},[211,12998,2092],{"class":336},[211,13000,673],{"class":340},[211,13002,8571],{"class":336},[211,13004,13005],{"class":340}," ===",[211,13007,400],{"class":340},[211,13009,13010],{"class":220},"client",[211,13012,357],{"class":340},[211,13014,918],{"class":347},[211,13016,341],{"class":340},[211,13018,13019,13022,13024,13026,13028,13030,13033,13035,13037,13039,13041,13043],{"class":213,"line":382},[211,13020,13021],{"class":336},"      console",[211,13023,673],{"class":340},[211,13025,1310],{"class":332},[211,13027,337],{"class":347},[211,13029,357],{"class":340},[211,13031,13032],{"class":220},"[CLIENT]",[211,13034,357],{"class":340},[211,13036,505],{"class":340},[211,13038,4090],{"class":336},[211,13040,673],{"class":340},[211,13042,2092],{"class":336},[211,13044,428],{"class":347},[211,13046,13047],{"class":213,"line":392},[211,13048,3373],{"class":340},[211,13050,13051,13053],{"class":213,"line":410},[211,13052,5212],{"class":340},[211,13054,428],{"class":347},[211,13056,13057,13059],{"class":213,"line":416},[211,13058,425],{"class":340},[211,13060,428],{"class":336},[269,13062,13064],{"id":13063},"client-identity","Client Identity",[188,13066,13067,13068,13071],{},"Attach user identity to all client logs with ",[208,13069,13070],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[197,13073,13074,13175],{},[200,13075,13078],{"className":315,"code":13076,"filename":13077,"language":318,"meta":206,"style":206},"// 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)",[208,13079,13080,13085,13124,13128,13154,13159,13163,13168],{"__ignoreMap":206},[211,13081,13082],{"class":213,"line":214},[211,13083,13084],{"class":664},"// After login\n",[211,13086,13087,13090,13092,13094,13097,13099,13101,13104,13106,13108,13111,13113,13115,13118,13120,13122],{"class":213,"line":344},[211,13088,13089],{"class":332},"setIdentity",[211,13091,337],{"class":336},[211,13093,681],{"class":340},[211,13095,13096],{"class":347}," userId",[211,13098,351],{"class":340},[211,13100,400],{"class":340},[211,13102,13103],{"class":220},"usr_123",[211,13105,357],{"class":340},[211,13107,505],{"class":340},[211,13109,13110],{"class":347}," orgId",[211,13112,351],{"class":340},[211,13114,400],{"class":340},[211,13116,13117],{"class":220},"org_456",[211,13119,357],{"class":340},[211,13121,472],{"class":340},[211,13123,428],{"class":336},[211,13125,13126],{"class":213,"line":371},[211,13127,489],{"emptyLinePlaceholder":488},[211,13129,13130,13132,13134,13136,13138,13140,13142,13144,13146,13148,13150,13152],{"class":213,"line":382},[211,13131,1310],{"class":336},[211,13133,673],{"class":340},[211,13135,948],{"class":332},[211,13137,337],{"class":336},[211,13139,681],{"class":340},[211,13141,854],{"class":347},[211,13143,351],{"class":340},[211,13145,400],{"class":340},[211,13147,861],{"class":220},[211,13149,357],{"class":340},[211,13151,472],{"class":340},[211,13153,428],{"class":336},[211,13155,13156],{"class":213,"line":392},[211,13157,13158],{"class":664},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[211,13160,13161],{"class":213,"line":410},[211,13162,489],{"emptyLinePlaceholder":488},[211,13164,13165],{"class":213,"line":416},[211,13166,13167],{"class":664},"// After logout\n",[211,13169,13170,13173],{"class":213,"line":422},[211,13171,13172],{"class":332},"clearIdentity",[211,13174,839],{"class":336},[200,13176,13178],{"className":315,"code":13177,"filename":142,"language":318,"meta":206,"style":206},"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",[208,13179,13180,13208,13212,13216,13250,13254,13280,13284,13288,13292],{"__ignoreMap":206},[211,13181,13182,13184,13186,13189,13191,13194,13196,13198,13200,13202,13204,13206],{"class":213,"line":214},[211,13183,463],{"class":325},[211,13185,466],{"class":340},[211,13187,13188],{"class":336}," setIdentity",[211,13190,505],{"class":340},[211,13192,13193],{"class":336}," clearIdentity",[211,13195,505],{"class":340},[211,13197,513],{"class":336},[211,13199,472],{"class":340},[211,13201,475],{"class":325},[211,13203,400],{"class":340},[211,13205,1133],{"class":220},[211,13207,483],{"class":340},[211,13209,13210],{"class":213,"line":344},[211,13211,489],{"emptyLinePlaceholder":488},[211,13213,13214],{"class":213,"line":371},[211,13215,13084],{"class":664},[211,13217,13218,13220,13222,13224,13226,13228,13230,13232,13234,13236,13238,13240,13242,13244,13246,13248],{"class":213,"line":382},[211,13219,13089],{"class":332},[211,13221,337],{"class":336},[211,13223,681],{"class":340},[211,13225,13096],{"class":347},[211,13227,351],{"class":340},[211,13229,400],{"class":340},[211,13231,13103],{"class":220},[211,13233,357],{"class":340},[211,13235,505],{"class":340},[211,13237,13110],{"class":347},[211,13239,351],{"class":340},[211,13241,400],{"class":340},[211,13243,13117],{"class":220},[211,13245,357],{"class":340},[211,13247,472],{"class":340},[211,13249,428],{"class":336},[211,13251,13252],{"class":213,"line":392},[211,13253,489],{"emptyLinePlaceholder":488},[211,13255,13256,13258,13260,13262,13264,13266,13268,13270,13272,13274,13276,13278],{"class":213,"line":410},[211,13257,1310],{"class":336},[211,13259,673],{"class":340},[211,13261,948],{"class":332},[211,13263,337],{"class":336},[211,13265,681],{"class":340},[211,13267,854],{"class":347},[211,13269,351],{"class":340},[211,13271,400],{"class":340},[211,13273,861],{"class":220},[211,13275,357],{"class":340},[211,13277,472],{"class":340},[211,13279,428],{"class":336},[211,13281,13282],{"class":213,"line":416},[211,13283,13158],{"class":664},[211,13285,13286],{"class":213,"line":422},[211,13287,489],{"emptyLinePlaceholder":488},[211,13289,13290],{"class":213,"line":940},[211,13291,13167],{"class":664},[211,13293,13294,13296],{"class":213,"line":1276},[211,13295,13172],{"class":332},[211,13297,839],{"class":336},[188,13299,13300,13301,959,13303,13305,13306,673],{},"In Nuxt, ",[208,13302,13089],{},[208,13304,13172],{}," are auto-imported. In Next.js, import them from ",[208,13307,1133],{},[188,13309,13310],{},"Per-event fields override identity fields, so you can always pass explicit values:",[200,13312,13314],{"className":315,"code":13313,"language":318,"meta":206,"style":206},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[208,13315,13316,13338,13365],{"__ignoreMap":206},[211,13317,13318,13320,13322,13324,13326,13328,13330,13332,13334,13336],{"class":213,"line":214},[211,13319,13089],{"class":332},[211,13321,337],{"class":336},[211,13323,681],{"class":340},[211,13325,13096],{"class":347},[211,13327,351],{"class":340},[211,13329,400],{"class":340},[211,13331,13103],{"class":220},[211,13333,357],{"class":340},[211,13335,472],{"class":340},[211,13337,428],{"class":336},[211,13339,13340,13342,13344,13346,13348,13350,13352,13354,13356,13359,13361,13363],{"class":213,"line":344},[211,13341,1310],{"class":336},[211,13343,673],{"class":340},[211,13345,948],{"class":332},[211,13347,337],{"class":336},[211,13349,681],{"class":340},[211,13351,13096],{"class":347},[211,13353,351],{"class":340},[211,13355,400],{"class":340},[211,13357,13358],{"class":220},"usr_admin_override",[211,13360,357],{"class":340},[211,13362,472],{"class":340},[211,13364,428],{"class":336},[211,13366,13367],{"class":213,"line":371},[211,13368,13369],{"class":664},"// -> { userId: 'usr_admin_override', ... }\n",[744,13371,13373],{"id":13372},"syncing-identity-with-auth","Syncing identity with auth",[188,13375,13376],{},"Use a global route middleware to automatically sync identity with your auth state:",[200,13378,13381],{"className":315,"code":13379,"filename":13380,"language":318,"meta":206,"style":206},"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",[208,13382,13383,13400,13420,13424,13442,13487,13496,13503,13507],{"__ignoreMap":206},[211,13384,13385,13387,13389,13392,13394,13396,13398],{"class":213,"line":214},[211,13386,326],{"class":325},[211,13388,329],{"class":325},[211,13390,13391],{"class":332}," defineNuxtRouteMiddleware",[211,13393,337],{"class":336},[211,13395,1360],{"class":340},[211,13397,645],{"class":496},[211,13399,379],{"class":340},[211,13401,13402,13404,13406,13408,13410,13412,13415,13417],{"class":213,"line":344},[211,13403,652],{"class":496},[211,13405,466],{"class":340},[211,13407,684],{"class":336},[211,13409,472],{"class":340},[211,13411,523],{"class":340},[211,13413,13414],{"class":332}," useAuth",[211,13416,8624],{"class":347},[211,13418,13419],{"class":664},"// better-auth, supabase, clerk, etc.\n",[211,13421,13422],{"class":213,"line":371},[211,13423,489],{"emptyLinePlaceholder":488},[211,13425,13426,13429,13431,13433,13435,13438,13440],{"class":213,"line":382},[211,13427,13428],{"class":325},"  if",[211,13430,631],{"class":347},[211,13432,10981],{"class":336},[211,13434,673],{"class":340},[211,13436,13437],{"class":336},"value",[211,13439,918],{"class":347},[211,13441,341],{"class":340},[211,13443,13444,13447,13449,13451,13453,13455,13457,13459,13461,13463,13465,13467,13470,13472,13474,13476,13478,13480,13483,13485],{"class":213,"line":392},[211,13445,13446],{"class":332},"    setIdentity",[211,13448,337],{"class":347},[211,13450,681],{"class":340},[211,13452,13096],{"class":347},[211,13454,351],{"class":340},[211,13456,684],{"class":336},[211,13458,673],{"class":340},[211,13460,13437],{"class":336},[211,13462,673],{"class":340},[211,13464,6361],{"class":336},[211,13466,505],{"class":340},[211,13468,13469],{"class":347}," email",[211,13471,351],{"class":340},[211,13473,684],{"class":336},[211,13475,673],{"class":340},[211,13477,13437],{"class":336},[211,13479,673],{"class":340},[211,13481,13482],{"class":336},"email",[211,13484,472],{"class":340},[211,13486,428],{"class":347},[211,13488,13489,13491,13494],{"class":213,"line":410},[211,13490,5212],{"class":340},[211,13492,13493],{"class":325}," else",[211,13495,379],{"class":340},[211,13497,13498,13501],{"class":213,"line":416},[211,13499,13500],{"class":332},"    clearIdentity",[211,13502,839],{"class":347},[211,13504,13505],{"class":213,"line":422},[211,13506,6934],{"class":340},[211,13508,13509,13511],{"class":213,"line":940},[211,13510,425],{"class":340},[211,13512,428],{"class":336},[946,13514,13516,13526],{"color":948,"icon":13515},"i-lucide-lightbulb",[188,13517,13518,13521,13522,13525],{},[2420,13519,13520],{},"Tip:"," Use Nuxt's ",[208,13523,13524],{},"$production"," override to sample and suppress browser console output in production while keeping full visibility in development:",[200,13527,13529],{"className":315,"code":13528,"filename":317,"language":318,"meta":206,"style":206},"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",[208,13530,13531,13543,13561,13569,13589,13593,13602,13610,13623,13631,13664,13697,13701,13705,13709],{"__ignoreMap":206},[211,13532,13533,13535,13537,13539,13541],{"class":213,"line":214},[211,13534,326],{"class":325},[211,13536,329],{"class":325},[211,13538,333],{"class":332},[211,13540,337],{"class":336},[211,13542,341],{"class":340},[211,13544,13545,13547,13549,13551,13553,13555,13557,13559],{"class":213,"line":344},[211,13546,348],{"class":347},[211,13548,351],{"class":340},[211,13550,354],{"class":336},[211,13552,357],{"class":340},[211,13554,360],{"class":220},[211,13556,357],{"class":340},[211,13558,365],{"class":336},[211,13560,368],{"class":340},[211,13562,13563,13565,13567],{"class":213,"line":371},[211,13564,374],{"class":347},[211,13566,351],{"class":340},[211,13568,379],{"class":340},[211,13570,13571,13573,13575,13577,13579,13581,13583,13585,13587],{"class":213,"line":382},[211,13572,385],{"class":347},[211,13574,351],{"class":340},[211,13576,466],{"class":340},[211,13578,1230],{"class":347},[211,13580,351],{"class":340},[211,13582,400],{"class":340},[211,13584,403],{"class":220},[211,13586,357],{"class":340},[211,13588,2002],{"class":340},[211,13590,13591],{"class":213,"line":392},[211,13592,419],{"class":340},[211,13594,13595,13598,13600],{"class":213,"line":410},[211,13596,13597],{"class":347},"  $production",[211,13599,351],{"class":340},[211,13601,379],{"class":340},[211,13603,13604,13606,13608],{"class":213,"line":416},[211,13605,1975],{"class":347},[211,13607,351],{"class":340},[211,13609,379],{"class":340},[211,13611,13612,13614,13616,13618,13620],{"class":213,"line":422},[211,13613,13021],{"class":347},[211,13615,351],{"class":340},[211,13617,5896],{"class":731},[211,13619,505],{"class":340},[211,13621,13622],{"class":664}," // Suppress browser DevTools console, keep transport\n",[211,13624,13625,13627,13629],{"class":213,"line":940},[211,13626,10551],{"class":347},[211,13628,351],{"class":340},[211,13630,379],{"class":340},[211,13632,13633,13635,13637,13639,13641,13643,13645,13647,13649,13651,13653,13655,13657,13659,13662],{"class":213,"line":1276},[211,13634,10560],{"class":347},[211,13636,351],{"class":340},[211,13638,466],{"class":340},[211,13640,10567],{"class":347},[211,13642,351],{"class":340},[211,13644,8898],{"class":3259},[211,13646,505],{"class":340},[211,13648,10576],{"class":347},[211,13650,351],{"class":340},[211,13652,10424],{"class":3259},[211,13654,505],{"class":340},[211,13656,10585],{"class":347},[211,13658,351],{"class":340},[211,13660,13661],{"class":3259}," 0",[211,13663,2002],{"class":340},[211,13665,13666,13669,13671,13673,13675,13677,13679,13681,13683,13685,13687,13689,13691,13693,13695],{"class":213,"line":1286},[211,13667,13668],{"class":347},"        keep",[211,13670,351],{"class":340},[211,13672,354],{"class":336},[211,13674,681],{"class":340},[211,13676,10820],{"class":347},[211,13678,351],{"class":340},[211,13680,10825],{"class":3259},[211,13682,10828],{"class":340},[211,13684,466],{"class":340},[211,13686,3254],{"class":347},[211,13688,351],{"class":340},[211,13690,10842],{"class":3259},[211,13692,472],{"class":340},[211,13694,365],{"class":336},[211,13696,368],{"class":340},[211,13698,13699],{"class":213,"line":1296},[211,13700,2871],{"class":340},[211,13702,13703],{"class":213,"line":1302},[211,13704,413],{"class":340},[211,13706,13707],{"class":213,"line":2842},[211,13708,419],{"class":340},[211,13710,13711,13713],{"class":213,"line":2868},[211,13712,425],{"class":340},[211,13714,428],{"class":336},[192,13716,13718],{"id":13717},"typescript-configuration","TypeScript Configuration",[188,13720,13721],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[946,13723,13725],{"color":10747,"icon":13724},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[192,13727,13729],{"id":13728},"next-steps","Next Steps",[3409,13731,13732,13737],{},[3412,13733,13734,13736],{},[299,13735,20],{"href":21}," - Learn the core concepts and start using evlog",[3412,13738,13739,13742],{},[299,13740,13741],{"href":143},"Next.js Example"," - Full Next.js App Router example with enrichers, pipeline, and drain",[13744,13745,13746],"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":206,"searchDepth":344,"depth":344,"links":13748},[13749,13752,13767,13774,13777,13778],{"id":194,"depth":344,"text":195,"children":13750},[13751],{"id":271,"depth":371,"text":272},{"id":304,"depth":344,"text":305,"children":13753},[13754,13755,13756,13757,13758,13759,13760,13761,13762,13763,13764,13765,13766],{"id":308,"depth":371,"text":309},{"id":446,"depth":371,"text":142},{"id":1895,"depth":371,"text":1896},{"id":2165,"depth":371,"text":2166},{"id":2442,"depth":371,"text":147},{"id":3057,"depth":371,"text":3058},{"id":3446,"depth":371,"text":152},{"id":4144,"depth":371,"text":157},{"id":4976,"depth":371,"text":162},{"id":5747,"depth":371,"text":167},{"id":6431,"depth":371,"text":172},{"id":7743,"depth":371,"text":177},{"id":8432,"depth":371,"text":8433},{"id":9147,"depth":344,"text":9148,"children":13768},[13769,13770,13771,13772,13773],{"id":9397,"depth":371,"text":9398},{"id":9800,"depth":371,"text":9801},{"id":10323,"depth":371,"text":9340},{"id":11287,"depth":371,"text":11288},{"id":12022,"depth":371,"text":12023},{"id":12606,"depth":344,"text":9394,"children":13775},[13776],{"id":13063,"depth":371,"text":13064},{"id":13717,"depth":344,"text":13718},{"id":13728,"depth":344,"text":13729},"Install evlog in your Nuxt, Next.js, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[13782],{"label":20,"icon":23,"to":21,"color":1886,"variant":13783},"subtle",{},{"title":15,"icon":18},{"title":183,"description":13779},"m8Is6XwihAfpAMpdHo7cSKXcu9tTj_-PRv7FLyq-rfo",[13789,13791],{"title":10,"path":11,"stem":12,"description":13790,"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":13792,"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.",1772899528027]