[{"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},"SvelteKit","/examples/sveltekit","6.examples/2.sveltekit","i-simple-icons-svelte",{"title":152,"path":153,"stem":154,"icon":155},"TanStack Start","/examples/tanstack-start","6.examples/3.tanstack-start","i-custom-tanstack",{"title":157,"path":158,"stem":159,"icon":160},"NestJS","/examples/nestjs","6.examples/4.nestjs","i-simple-icons-nestjs",{"title":162,"path":163,"stem":164,"icon":165},"Express","/examples/express","6.examples/5.express","i-simple-icons-express",{"title":167,"path":168,"stem":169,"icon":170},"Hono","/examples/hono","6.examples/6.hono","i-simple-icons-hono",{"title":172,"path":173,"stem":174,"icon":175},"Fastify","/examples/fastify","6.examples/7.fastify","i-simple-icons-fastify",{"title":177,"path":178,"stem":179,"icon":180},"Elysia","/examples/elysia","6.examples/8.elysia","i-custom-elysia",{"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,1896,1917,1955,1960,2070,2075,2172,2177,2329,2334,2616,2623,2627,2634,2753,2758,2892,2896,2902,3012,3016,3146,3167,3170,3183,3195,3326,3337,3610,3622,3639,3770,3776,3779,3797,3820,3827,3935,3938,4083,4089,4299,4302,4626,4636,4759,4767,5119,5124,5127,5137,5153,5413,5416,5700,5703,5958,5963,5966,5973,5989,6317,6324,6600,6609,6614,6617,6628,6644,6905,6908,7186,7191,7280,7291,7296,7299,7311,7327,7545,7547,7823,7830,8056,8061,8065,8068,8371,8374,8392,8395,8420,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, SvelteKit, Nitro, NestJS, and any TypeScript server framework.",[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,147],{"id":1895},"sveltekit",[188,1897,1898,1899,959,1902,1905,1906,1909,1910,1913,1914,1916],{},"SvelteKit integration via ",[208,1900,1901],{},"handle",[208,1903,1904],{},"handleError"," hooks in ",[208,1907,1908],{},"hooks.server.ts",". Access the logger via ",[208,1911,1912],{},"event.locals.log"," in route handlers or ",[208,1915,1770],{}," from services.",[197,1918,1919,1931,1943],{},[200,1920,1921],{"className":202,"code":227,"filename":228,"language":205,"meta":206,"style":206},[208,1922,1923],{"__ignoreMap":206},[211,1924,1925,1927,1929],{"class":213,"line":214},[211,1926,228],{"class":217},[211,1928,237],{"class":220},[211,1930,224],{"class":220},[200,1932,1933],{"className":202,"code":203,"filename":204,"language":205,"meta":206,"style":206},[208,1934,1935],{"__ignoreMap":206},[211,1936,1937,1939,1941],{"class":213,"line":214},[211,1938,204],{"class":217},[211,1940,221],{"class":220},[211,1942,224],{"class":220},[200,1944,1945],{"className":202,"code":256,"filename":257,"language":205,"meta":206,"style":206},[208,1946,1947],{"__ignoreMap":206},[211,1948,1949,1951,1953],{"class":213,"line":214},[211,1950,257],{"class":217},[211,1952,221],{"class":220},[211,1954,224],{"class":220},[188,1956,1957],{},[1958,1959,305],"strong",{},[200,1961,1964],{"className":315,"code":1962,"filename":1963,"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,1965,1966,1986,2006,2010,2042,2046],{"__ignoreMap":206},[211,1967,1968,1970,1972,1975,1977,1979,1981,1984],{"class":213,"line":214},[211,1969,463],{"class":325},[211,1971,466],{"class":340},[211,1973,1974],{"class":336}," initLogger",[211,1976,472],{"class":340},[211,1978,475],{"class":325},[211,1980,400],{"class":340},[211,1982,1983],{"class":220},"evlog",[211,1985,483],{"class":340},[211,1987,1988,1990,1992,1995,1997,1999,2001,2004],{"class":213,"line":344},[211,1989,463],{"class":325},[211,1991,466],{"class":340},[211,1993,1994],{"class":336}," createEvlogHooks",[211,1996,472],{"class":340},[211,1998,475],{"class":325},[211,2000,400],{"class":340},[211,2002,2003],{"class":220},"evlog/sveltekit",[211,2005,483],{"class":340},[211,2007,2008],{"class":213,"line":371},[211,2009,489],{"emptyLinePlaceholder":488},[211,2011,2012,2015,2017,2019,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040],{"class":213,"line":382},[211,2013,2014],{"class":332},"initLogger",[211,2016,337],{"class":336},[211,2018,681],{"class":340},[211,2020,2021],{"class":347}," env",[211,2023,351],{"class":340},[211,2025,466],{"class":340},[211,2027,1230],{"class":347},[211,2029,351],{"class":340},[211,2031,400],{"class":340},[211,2033,403],{"class":220},[211,2035,357],{"class":340},[211,2037,472],{"class":340},[211,2039,472],{"class":340},[211,2041,428],{"class":336},[211,2043,2044],{"class":213,"line":392},[211,2045,489],{"emptyLinePlaceholder":488},[211,2047,2048,2050,2052,2054,2057,2059,2062,2064,2066,2068],{"class":213,"line":410},[211,2049,326],{"class":325},[211,2051,497],{"class":496},[211,2053,466],{"class":340},[211,2055,2056],{"class":336}," handle",[211,2058,505],{"class":340},[211,2060,2061],{"class":336}," handleError ",[211,2063,425],{"class":340},[211,2065,523],{"class":340},[211,2067,1994],{"class":332},[211,2069,839],{"class":336},[188,2071,2072],{},[1958,2073,2074],{},"Type your locals",[200,2076,2079],{"className":315,"code":2077,"filename":2078,"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,2080,2081,2103,2107,2117,2127,2137,2147,2152,2157,2161,2165],{"__ignoreMap":206},[211,2082,2083,2085,2088,2090,2093,2095,2097,2099,2101],{"class":213,"line":214},[211,2084,463],{"class":325},[211,2086,2087],{"class":325}," type",[211,2089,466],{"class":340},[211,2091,2092],{"class":336}," RequestLogger",[211,2094,472],{"class":340},[211,2096,475],{"class":325},[211,2098,400],{"class":340},[211,2100,1983],{"class":220},[211,2102,483],{"class":340},[211,2104,2105],{"class":213,"line":344},[211,2106,489],{"emptyLinePlaceholder":488},[211,2108,2109,2112,2115],{"class":213,"line":371},[211,2110,2111],{"class":496},"declare",[211,2113,2114],{"class":336}," global ",[211,2116,341],{"class":340},[211,2118,2119,2122,2125],{"class":213,"line":382},[211,2120,2121],{"class":496},"  namespace",[211,2123,2124],{"class":217}," App",[211,2126,379],{"class":340},[211,2128,2129,2132,2135],{"class":213,"line":392},[211,2130,2131],{"class":496},"    interface",[211,2133,2134],{"class":217}," Locals",[211,2136,379],{"class":340},[211,2138,2139,2142,2144],{"class":213,"line":410},[211,2140,2141],{"class":347},"      log",[211,2143,351],{"class":340},[211,2145,2146],{"class":217}," RequestLogger\n",[211,2148,2149],{"class":213,"line":416},[211,2150,2151],{"class":340},"    }\n",[211,2153,2154],{"class":213,"line":422},[211,2155,2156],{"class":340},"  }\n",[211,2158,2159],{"class":213,"line":940},[211,2160,1074],{"class":340},[211,2162,2163],{"class":213,"line":1276},[211,2164,489],{"emptyLinePlaceholder":488},[211,2166,2167,2169],{"class":213,"line":1286},[211,2168,326],{"class":325},[211,2170,2171],{"class":340}," {}\n",[188,2173,2174],{},[1958,2175,2176],{},"Usage in routes",[200,2178,2181],{"className":315,"code":2179,"filename":2180,"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,2182,2183,2203,2225,2229,2261,2301,2325],{"__ignoreMap":206},[211,2184,2185,2187,2189,2192,2194,2196,2198,2201],{"class":213,"line":214},[211,2186,463],{"class":325},[211,2188,466],{"class":340},[211,2190,2191],{"class":336}," json",[211,2193,472],{"class":340},[211,2195,475],{"class":325},[211,2197,400],{"class":340},[211,2199,2200],{"class":220},"@sveltejs/kit",[211,2202,483],{"class":340},[211,2204,2205,2207,2209,2211,2214,2216,2218,2220,2223],{"class":213,"line":344},[211,2206,463],{"class":325},[211,2208,2087],{"class":325},[211,2210,466],{"class":340},[211,2212,2213],{"class":336}," RequestHandler",[211,2215,472],{"class":340},[211,2217,475],{"class":325},[211,2219,400],{"class":340},[211,2221,2222],{"class":220},"./$types",[211,2224,483],{"class":340},[211,2226,2227],{"class":213,"line":371},[211,2228,489],{"emptyLinePlaceholder":488},[211,2230,2231,2233,2235,2238,2240,2242,2244,2247,2250,2252,2255,2257,2259],{"class":213,"line":382},[211,2232,326],{"class":325},[211,2234,497],{"class":496},[211,2236,2237],{"class":336}," GET",[211,2239,351],{"class":340},[211,2241,2213],{"class":217},[211,2243,523],{"class":340},[211,2245,2246],{"class":340}," ({",[211,2248,2249],{"class":634}," locals",[211,2251,505],{"class":340},[211,2253,2254],{"class":634}," params",[211,2256,1177],{"class":340},[211,2258,645],{"class":496},[211,2260,379],{"class":340},[211,2262,2263,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2295,2297,2299],{"class":213,"line":392},[211,2264,2265],{"class":336},"  locals",[211,2267,673],{"class":340},[211,2269,1310],{"class":336},[211,2271,673],{"class":340},[211,2273,676],{"class":332},[211,2275,337],{"class":347},[211,2277,681],{"class":340},[211,2279,684],{"class":347},[211,2281,351],{"class":340},[211,2283,466],{"class":340},[211,2285,691],{"class":347},[211,2287,351],{"class":340},[211,2289,2254],{"class":336},[211,2291,673],{"class":340},[211,2293,2294],{"class":336},"id",[211,2296,472],{"class":340},[211,2298,472],{"class":340},[211,2300,428],{"class":347},[211,2302,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323],{"class":213,"line":410},[211,2304,711],{"class":325},[211,2306,2191],{"class":332},[211,2308,337],{"class":347},[211,2310,681],{"class":340},[211,2312,691],{"class":347},[211,2314,351],{"class":340},[211,2316,2254],{"class":336},[211,2318,673],{"class":340},[211,2320,2294],{"class":336},[211,2322,472],{"class":340},[211,2324,428],{"class":347},[211,2326,2327],{"class":213,"line":416},[211,2328,1074],{"class":340},[188,2330,2331],{},[1958,2332,2333],{},"Full pipeline",[200,2335,2337],{"className":315,"code":2336,"filename":1963,"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,2338,2339,2357,2375,2395,2399,2429,2433,2457,2477,2490,2508,2537,2541,2558,2604,2609],{"__ignoreMap":206},[211,2340,2341,2343,2345,2347,2349,2351,2353,2355],{"class":213,"line":214},[211,2342,463],{"class":325},[211,2344,466],{"class":340},[211,2346,1974],{"class":336},[211,2348,472],{"class":340},[211,2350,475],{"class":325},[211,2352,400],{"class":340},[211,2354,1983],{"class":220},[211,2356,483],{"class":340},[211,2358,2359,2361,2363,2365,2367,2369,2371,2373],{"class":213,"line":344},[211,2360,463],{"class":325},[211,2362,466],{"class":340},[211,2364,1994],{"class":336},[211,2366,472],{"class":340},[211,2368,475],{"class":325},[211,2370,400],{"class":340},[211,2372,2003],{"class":220},[211,2374,483],{"class":340},[211,2376,2377,2379,2381,2384,2386,2388,2390,2393],{"class":213,"line":371},[211,2378,463],{"class":325},[211,2380,466],{"class":340},[211,2382,2383],{"class":336}," createAxiomDrain",[211,2385,472],{"class":340},[211,2387,475],{"class":325},[211,2389,400],{"class":340},[211,2391,2392],{"class":220},"evlog/axiom",[211,2394,483],{"class":340},[211,2396,2397],{"class":213,"line":382},[211,2398,489],{"emptyLinePlaceholder":488},[211,2400,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427],{"class":213,"line":392},[211,2402,2014],{"class":332},[211,2404,337],{"class":336},[211,2406,681],{"class":340},[211,2408,2021],{"class":347},[211,2410,351],{"class":340},[211,2412,466],{"class":340},[211,2414,1230],{"class":347},[211,2416,351],{"class":340},[211,2418,400],{"class":340},[211,2420,403],{"class":220},[211,2422,357],{"class":340},[211,2424,472],{"class":340},[211,2426,472],{"class":340},[211,2428,428],{"class":336},[211,2430,2431],{"class":213,"line":410},[211,2432,489],{"emptyLinePlaceholder":488},[211,2434,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455],{"class":213,"line":416},[211,2436,326],{"class":325},[211,2438,497],{"class":496},[211,2440,466],{"class":340},[211,2442,2056],{"class":336},[211,2444,505],{"class":340},[211,2446,2061],{"class":336},[211,2448,425],{"class":340},[211,2450,523],{"class":340},[211,2452,1994],{"class":332},[211,2454,337],{"class":336},[211,2456,341],{"class":340},[211,2458,2459,2462,2464,2466,2468,2471,2473,2475],{"class":213,"line":422},[211,2460,2461],{"class":347},"  include",[211,2463,351],{"class":340},[211,2465,354],{"class":336},[211,2467,357],{"class":340},[211,2469,2470],{"class":220},"/api/**",[211,2472,357],{"class":340},[211,2474,365],{"class":336},[211,2476,368],{"class":340},[211,2478,2479,2482,2484,2486,2488],{"class":213,"line":940},[211,2480,2481],{"class":347},"  drain",[211,2483,351],{"class":340},[211,2485,2383],{"class":332},[211,2487,1360],{"class":336},[211,2489,368],{"class":340},[211,2491,2492,2495,2497,2499,2502,2504,2506],{"class":213,"line":1276},[211,2493,2494],{"class":332},"  enrich",[211,2496,351],{"class":340},[211,2498,631],{"class":340},[211,2500,2501],{"class":634},"ctx",[211,2503,642],{"class":340},[211,2505,645],{"class":496},[211,2507,379],{"class":340},[211,2509,2510,2513,2515,2518,2520,2523,2525,2528,2530,2532,2534],{"class":213,"line":1286},[211,2511,2512],{"class":336},"    ctx",[211,2514,673],{"class":340},[211,2516,2517],{"class":336},"event",[211,2519,673],{"class":340},[211,2521,2522],{"class":336},"region",[211,2524,523],{"class":340},[211,2526,2527],{"class":336}," process",[211,2529,673],{"class":340},[211,2531,1531],{"class":336},[211,2533,673],{"class":340},[211,2535,2536],{"class":336},"FLY_REGION\n",[211,2538,2539],{"class":213,"line":1296},[211,2540,419],{"class":340},[211,2542,2543,2546,2548,2550,2552,2554,2556],{"class":213,"line":1302},[211,2544,2545],{"class":332},"  keep",[211,2547,351],{"class":340},[211,2549,631],{"class":340},[211,2551,2501],{"class":634},[211,2553,642],{"class":340},[211,2555,645],{"class":496},[211,2557,379],{"class":340},[211,2559,2561,2564,2566,2568,2570,2573,2576,2579,2581,2583,2586,2590,2592,2594,2596,2599,2601],{"class":213,"line":2560},14,[211,2562,2563],{"class":325},"    if",[211,2565,631],{"class":347},[211,2567,2501],{"class":336},[211,2569,673],{"class":340},[211,2571,2572],{"class":336},"duration",[211,2574,2575],{"class":340}," &&",[211,2577,2578],{"class":336}," ctx",[211,2580,673],{"class":340},[211,2582,2572],{"class":336},[211,2584,2585],{"class":340}," >",[211,2587,2589],{"class":2588},"sbssI"," 2000",[211,2591,918],{"class":347},[211,2593,2501],{"class":336},[211,2595,673],{"class":340},[211,2597,2598],{"class":336},"shouldKeep",[211,2600,523],{"class":340},[211,2602,2603],{"class":731}," true\n",[211,2605,2607],{"class":213,"line":2606},15,[211,2608,419],{"class":340},[211,2610,2612,2614],{"class":213,"line":2611},16,[211,2613,425],{"class":340},[211,2615,428],{"class":336},[946,2617,2618,2619,2622],{"color":1886,"icon":1887},"See the ",[299,2620,2621],{"href":148},"SvelteKit example"," for a complete guide with drain, enrichers, tail sampling, and error handling.",[269,2624,2626],{"id":2625},"nitro-v3","Nitro v3",[188,2628,2629,2630,2633],{},"Register evlog as a Nitro module using the ",[208,2631,2632],{},"nitro"," package:",[200,2635,2638],{"className":315,"code":2636,"filename":2637,"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,2639,2640,2659,2676,2680,2692,2701,2710,2733,2740,2747],{"__ignoreMap":206},[211,2641,2642,2644,2646,2649,2651,2653,2655,2657],{"class":213,"line":214},[211,2643,463],{"class":325},[211,2645,466],{"class":340},[211,2647,2648],{"class":336}," defineConfig",[211,2650,472],{"class":340},[211,2652,475],{"class":325},[211,2654,400],{"class":340},[211,2656,2632],{"class":220},[211,2658,483],{"class":340},[211,2660,2661,2663,2666,2669,2671,2674],{"class":213,"line":344},[211,2662,463],{"class":325},[211,2664,2665],{"class":336}," evlog ",[211,2667,2668],{"class":325},"from",[211,2670,400],{"class":340},[211,2672,2673],{"class":220},"evlog/nitro/v3",[211,2675,483],{"class":340},[211,2677,2678],{"class":213,"line":371},[211,2679,489],{"emptyLinePlaceholder":488},[211,2681,2682,2684,2686,2688,2690],{"class":213,"line":382},[211,2683,326],{"class":325},[211,2685,329],{"class":325},[211,2687,2648],{"class":332},[211,2689,337],{"class":336},[211,2691,341],{"class":340},[211,2693,2694,2696,2698],{"class":213,"line":392},[211,2695,348],{"class":347},[211,2697,351],{"class":340},[211,2699,2700],{"class":336}," [\n",[211,2702,2703,2706,2708],{"class":213,"line":410},[211,2704,2705],{"class":332},"    evlog",[211,2707,337],{"class":336},[211,2709,341],{"class":340},[211,2711,2712,2715,2717,2719,2721,2723,2725,2728,2730],{"class":213,"line":416},[211,2713,2714],{"class":347},"      env",[211,2716,351],{"class":340},[211,2718,466],{"class":340},[211,2720,1230],{"class":347},[211,2722,351],{"class":340},[211,2724,400],{"class":340},[211,2726,2727],{"class":220},"my-api",[211,2729,357],{"class":340},[211,2731,2732],{"class":340}," },\n",[211,2734,2735,2738],{"class":213,"line":422},[211,2736,2737],{"class":340},"    }",[211,2739,428],{"class":336},[211,2741,2742,2745],{"class":213,"line":940},[211,2743,2744],{"class":336},"  ]",[211,2746,368],{"class":340},[211,2748,2749,2751],{"class":213,"line":1276},[211,2750,425],{"class":340},[211,2752,428],{"class":336},[188,2754,1307,2755,2757],{},[208,2756,434],{}," in your routes:",[200,2759,2762],{"className":315,"code":2760,"filename":2761,"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,2763,2764,2784,2802,2806,2828,2844,2871,2886],{"__ignoreMap":206},[211,2765,2766,2768,2770,2773,2775,2777,2779,2782],{"class":213,"line":214},[211,2767,463],{"class":325},[211,2769,466],{"class":340},[211,2771,2772],{"class":336}," defineHandler",[211,2774,472],{"class":340},[211,2776,475],{"class":325},[211,2778,400],{"class":340},[211,2780,2781],{"class":220},"nitro/h3",[211,2783,483],{"class":340},[211,2785,2786,2788,2790,2792,2794,2796,2798,2800],{"class":213,"line":344},[211,2787,463],{"class":325},[211,2789,466],{"class":340},[211,2791,508],{"class":336},[211,2793,472],{"class":340},[211,2795,475],{"class":325},[211,2797,400],{"class":340},[211,2799,2673],{"class":220},[211,2801,483],{"class":340},[211,2803,2804],{"class":213,"line":371},[211,2805,489],{"emptyLinePlaceholder":488},[211,2807,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826],{"class":213,"line":382},[211,2809,326],{"class":325},[211,2811,329],{"class":325},[211,2813,2772],{"class":332},[211,2815,337],{"class":336},[211,2817,628],{"class":496},[211,2819,631],{"class":340},[211,2821,2517],{"class":634},[211,2823,642],{"class":340},[211,2825,645],{"class":496},[211,2827,379],{"class":340},[211,2829,2830,2832,2834,2836,2838,2840,2842],{"class":213,"line":392},[211,2831,652],{"class":496},[211,2833,513],{"class":336},[211,2835,523],{"class":340},[211,2837,508],{"class":332},[211,2839,337],{"class":347},[211,2841,2517],{"class":336},[211,2843,428],{"class":347},[211,2845,2846,2848,2850,2852,2854,2856,2858,2860,2862,2865,2867,2869],{"class":213,"line":410},[211,2847,670],{"class":336},[211,2849,673],{"class":340},[211,2851,676],{"class":332},[211,2853,337],{"class":347},[211,2855,681],{"class":340},[211,2857,854],{"class":347},[211,2859,351],{"class":340},[211,2861,400],{"class":340},[211,2863,2864],{"class":220},"hello",[211,2866,357],{"class":340},[211,2868,472],{"class":340},[211,2870,428],{"class":347},[211,2872,2873,2875,2877,2880,2882,2884],{"class":213,"line":416},[211,2874,711],{"class":325},[211,2876,466],{"class":340},[211,2878,2879],{"class":347}," ok",[211,2881,351],{"class":340},[211,2883,732],{"class":731},[211,2885,937],{"class":340},[211,2887,2888,2890],{"class":213,"line":422},[211,2889,425],{"class":340},[211,2891,428],{"class":336},[269,2893,2895],{"id":2894},"nitro-v2","Nitro v2",[188,2897,2898,2899,351],{},"Same approach with ",[208,2900,2901],{},"nitropack",[200,2903,2905],{"className":315,"code":2904,"filename":2637,"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,2906,2907,2927,2942,2946,2958,2966,2974,2994,3000,3006],{"__ignoreMap":206},[211,2908,2909,2911,2913,2916,2918,2920,2922,2925],{"class":213,"line":214},[211,2910,463],{"class":325},[211,2912,466],{"class":340},[211,2914,2915],{"class":336}," defineNitroConfig",[211,2917,472],{"class":340},[211,2919,475],{"class":325},[211,2921,400],{"class":340},[211,2923,2924],{"class":220},"nitropack/config",[211,2926,483],{"class":340},[211,2928,2929,2931,2933,2935,2937,2940],{"class":213,"line":344},[211,2930,463],{"class":325},[211,2932,2665],{"class":336},[211,2934,2668],{"class":325},[211,2936,400],{"class":340},[211,2938,2939],{"class":220},"evlog/nitro",[211,2941,483],{"class":340},[211,2943,2944],{"class":213,"line":371},[211,2945,489],{"emptyLinePlaceholder":488},[211,2947,2948,2950,2952,2954,2956],{"class":213,"line":382},[211,2949,326],{"class":325},[211,2951,329],{"class":325},[211,2953,2915],{"class":332},[211,2955,337],{"class":336},[211,2957,341],{"class":340},[211,2959,2960,2962,2964],{"class":213,"line":392},[211,2961,348],{"class":347},[211,2963,351],{"class":340},[211,2965,2700],{"class":336},[211,2967,2968,2970,2972],{"class":213,"line":410},[211,2969,2705],{"class":332},[211,2971,337],{"class":336},[211,2973,341],{"class":340},[211,2975,2976,2978,2980,2982,2984,2986,2988,2990,2992],{"class":213,"line":416},[211,2977,2714],{"class":347},[211,2979,351],{"class":340},[211,2981,466],{"class":340},[211,2983,1230],{"class":347},[211,2985,351],{"class":340},[211,2987,400],{"class":340},[211,2989,2727],{"class":220},[211,2991,357],{"class":340},[211,2993,2732],{"class":340},[211,2995,2996,2998],{"class":213,"line":422},[211,2997,2737],{"class":340},[211,2999,428],{"class":336},[211,3001,3002,3004],{"class":213,"line":940},[211,3003,2744],{"class":336},[211,3005,368],{"class":340},[211,3007,3008,3010],{"class":213,"line":1276},[211,3009,425],{"class":340},[211,3011,428],{"class":336},[188,3013,1307,3014,2757],{},[208,3015,434],{},[200,3017,3019],{"className":315,"code":3018,"filename":2761,"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,3020,3021,3040,3058,3062,3084,3100,3126,3140],{"__ignoreMap":206},[211,3022,3023,3025,3027,3030,3032,3034,3036,3038],{"class":213,"line":214},[211,3024,463],{"class":325},[211,3026,466],{"class":340},[211,3028,3029],{"class":336}," defineEventHandler",[211,3031,472],{"class":340},[211,3033,475],{"class":325},[211,3035,400],{"class":340},[211,3037,269],{"class":220},[211,3039,483],{"class":340},[211,3041,3042,3044,3046,3048,3050,3052,3054,3056],{"class":213,"line":344},[211,3043,463],{"class":325},[211,3045,466],{"class":340},[211,3047,508],{"class":336},[211,3049,472],{"class":340},[211,3051,475],{"class":325},[211,3053,400],{"class":340},[211,3055,2939],{"class":220},[211,3057,483],{"class":340},[211,3059,3060],{"class":213,"line":371},[211,3061,489],{"emptyLinePlaceholder":488},[211,3063,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082],{"class":213,"line":382},[211,3065,326],{"class":325},[211,3067,329],{"class":325},[211,3069,3029],{"class":332},[211,3071,337],{"class":336},[211,3073,628],{"class":496},[211,3075,631],{"class":340},[211,3077,2517],{"class":634},[211,3079,642],{"class":340},[211,3081,645],{"class":496},[211,3083,379],{"class":340},[211,3085,3086,3088,3090,3092,3094,3096,3098],{"class":213,"line":392},[211,3087,652],{"class":496},[211,3089,513],{"class":336},[211,3091,523],{"class":340},[211,3093,508],{"class":332},[211,3095,337],{"class":347},[211,3097,2517],{"class":336},[211,3099,428],{"class":347},[211,3101,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124],{"class":213,"line":410},[211,3103,670],{"class":336},[211,3105,673],{"class":340},[211,3107,676],{"class":332},[211,3109,337],{"class":347},[211,3111,681],{"class":340},[211,3113,854],{"class":347},[211,3115,351],{"class":340},[211,3117,400],{"class":340},[211,3119,2864],{"class":220},[211,3121,357],{"class":340},[211,3123,472],{"class":340},[211,3125,428],{"class":347},[211,3127,3128,3130,3132,3134,3136,3138],{"class":213,"line":416},[211,3129,711],{"class":325},[211,3131,466],{"class":340},[211,3133,2879],{"class":347},[211,3135,351],{"class":340},[211,3137,732],{"class":731},[211,3139,937],{"class":340},[211,3141,3142,3144],{"class":213,"line":422},[211,3143,425],{"class":340},[211,3145,428],{"class":336},[946,3147,3148,3151,3152,3154,3155,3157,3158,3160,3161,3163,3164,3166],{"color":948,"icon":13},[1958,3149,3150],{},"Note:"," ",[208,3153,438],{}," is always imported from ",[208,3156,1983],{}," regardless of Nitro version. Only the module and ",[208,3159,434],{}," imports differ: ",[208,3162,2673],{}," for v3, ",[208,3165,2939],{}," for v2.",[269,3168,152],{"id":3169},"tanstack-start",[188,3171,3172,3173,3176,3177,3180,3181,351],{},"TanStack Start uses Nitro v3 under the hood. A project created with ",[208,3174,3175],{},"npm create @tanstack/start@latest"," already includes the ",[208,3178,3179],{},"nitro()"," Vite plugin — just install evlog and add a ",[208,3182,2637],{},[200,3184,3185],{"className":202,"code":227,"language":205,"meta":206,"style":206},[208,3186,3187],{"__ignoreMap":206},[211,3188,3189,3191,3193],{"class":213,"line":214},[211,3190,228],{"class":217},[211,3192,237],{"class":220},[211,3194,224],{"class":220},[200,3196,3198],{"className":315,"code":3197,"filename":2637,"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,3199,3200,3218,3232,3236,3248,3257,3268,3272,3280,3288,3308,3314,3320],{"__ignoreMap":206},[211,3201,3202,3204,3206,3208,3210,3212,3214,3216],{"class":213,"line":214},[211,3203,463],{"class":325},[211,3205,466],{"class":340},[211,3207,2648],{"class":336},[211,3209,472],{"class":340},[211,3211,475],{"class":325},[211,3213,400],{"class":340},[211,3215,2632],{"class":220},[211,3217,483],{"class":340},[211,3219,3220,3222,3224,3226,3228,3230],{"class":213,"line":344},[211,3221,463],{"class":325},[211,3223,2665],{"class":336},[211,3225,2668],{"class":325},[211,3227,400],{"class":340},[211,3229,2673],{"class":220},[211,3231,483],{"class":340},[211,3233,3234],{"class":213,"line":371},[211,3235,489],{"emptyLinePlaceholder":488},[211,3237,3238,3240,3242,3244,3246],{"class":213,"line":382},[211,3239,326],{"class":325},[211,3241,329],{"class":325},[211,3243,2648],{"class":332},[211,3245,337],{"class":336},[211,3247,341],{"class":340},[211,3249,3250,3253,3255],{"class":213,"line":392},[211,3251,3252],{"class":347},"  experimental",[211,3254,351],{"class":340},[211,3256,379],{"class":340},[211,3258,3259,3262,3264,3266],{"class":213,"line":410},[211,3260,3261],{"class":347},"    asyncContext",[211,3263,351],{"class":340},[211,3265,732],{"class":731},[211,3267,368],{"class":340},[211,3269,3270],{"class":213,"line":416},[211,3271,419],{"class":340},[211,3273,3274,3276,3278],{"class":213,"line":422},[211,3275,348],{"class":347},[211,3277,351],{"class":340},[211,3279,2700],{"class":336},[211,3281,3282,3284,3286],{"class":213,"line":940},[211,3283,2705],{"class":332},[211,3285,337],{"class":336},[211,3287,341],{"class":340},[211,3289,3290,3292,3294,3296,3298,3300,3302,3304,3306],{"class":213,"line":1276},[211,3291,2714],{"class":347},[211,3293,351],{"class":340},[211,3295,466],{"class":340},[211,3297,1230],{"class":347},[211,3299,351],{"class":340},[211,3301,400],{"class":340},[211,3303,403],{"class":220},[211,3305,357],{"class":340},[211,3307,2732],{"class":340},[211,3309,3310,3312],{"class":213,"line":1286},[211,3311,2737],{"class":340},[211,3313,428],{"class":336},[211,3315,3316,3318],{"class":213,"line":1296},[211,3317,2744],{"class":336},[211,3319,368],{"class":340},[211,3321,3322,3324],{"class":213,"line":1302},[211,3323,425],{"class":340},[211,3325,428],{"class":336},[188,3327,3328,3329,3332,3333,3336],{},"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,3330,3331],{},"useRequest()"," from ",[208,3334,3335],{},"nitro/context"," to access the request-scoped logger:",[200,3338,3341],{"className":315,"code":3339,"filename":3340,"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,3342,3343,3363,3382,3402,3406,3433,3442,3451,3468,3482,3506,3510,3560,3564,3589,3594,3598,3603],{"__ignoreMap":206},[211,3344,3345,3347,3349,3352,3354,3356,3358,3361],{"class":213,"line":214},[211,3346,463],{"class":325},[211,3348,466],{"class":340},[211,3350,3351],{"class":336}," createFileRoute",[211,3353,472],{"class":340},[211,3355,475],{"class":325},[211,3357,400],{"class":340},[211,3359,3360],{"class":220},"@tanstack/react-router",[211,3362,483],{"class":340},[211,3364,3365,3367,3369,3372,3374,3376,3378,3380],{"class":213,"line":344},[211,3366,463],{"class":325},[211,3368,466],{"class":340},[211,3370,3371],{"class":336}," useRequest",[211,3373,472],{"class":340},[211,3375,475],{"class":325},[211,3377,400],{"class":340},[211,3379,3335],{"class":220},[211,3381,483],{"class":340},[211,3383,3384,3386,3388,3390,3392,3394,3396,3398,3400],{"class":213,"line":371},[211,3385,463],{"class":325},[211,3387,2087],{"class":325},[211,3389,466],{"class":340},[211,3391,2092],{"class":336},[211,3393,472],{"class":340},[211,3395,475],{"class":325},[211,3397,400],{"class":340},[211,3399,1983],{"class":220},[211,3401,483],{"class":340},[211,3403,3404],{"class":213,"line":382},[211,3405,489],{"emptyLinePlaceholder":488},[211,3407,3408,3410,3412,3415,3417,3419,3421,3423,3426,3428,3431],{"class":213,"line":392},[211,3409,326],{"class":325},[211,3411,497],{"class":496},[211,3413,3414],{"class":336}," Route ",[211,3416,621],{"class":340},[211,3418,3351],{"class":332},[211,3420,337],{"class":336},[211,3422,357],{"class":340},[211,3424,3425],{"class":220},"/api/hello",[211,3427,357],{"class":340},[211,3429,3430],{"class":336},")(",[211,3432,341],{"class":340},[211,3434,3435,3438,3440],{"class":213,"line":410},[211,3436,3437],{"class":347},"  server",[211,3439,351],{"class":340},[211,3441,379],{"class":340},[211,3443,3444,3447,3449],{"class":213,"line":416},[211,3445,3446],{"class":347},"    handlers",[211,3448,351],{"class":340},[211,3450,379],{"class":340},[211,3452,3453,3456,3458,3461,3464,3466],{"class":213,"line":422},[211,3454,3455],{"class":332},"      GET",[211,3457,351],{"class":340},[211,3459,3460],{"class":496}," async",[211,3462,3463],{"class":340}," ()",[211,3465,645],{"class":496},[211,3467,379],{"class":340},[211,3469,3470,3473,3476,3478,3480],{"class":213,"line":940},[211,3471,3472],{"class":496},"        const",[211,3474,3475],{"class":336}," req",[211,3477,523],{"class":340},[211,3479,3371],{"class":332},[211,3481,839],{"class":347},[211,3483,3484,3486,3488,3490,3492,3494,3497,3499,3501,3504],{"class":213,"line":1276},[211,3485,3472],{"class":496},[211,3487,513],{"class":336},[211,3489,523],{"class":340},[211,3491,3475],{"class":336},[211,3493,673],{"class":340},[211,3495,3496],{"class":336},"context",[211,3498,673],{"class":340},[211,3500,1310],{"class":336},[211,3502,3503],{"class":325}," as",[211,3505,2146],{"class":217},[211,3507,3508],{"class":213,"line":1286},[211,3509,489],{"emptyLinePlaceholder":488},[211,3511,3512,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3538,3540,3542,3545,3547,3549,3552,3554,3556,3558],{"class":213,"line":1296},[211,3513,3514],{"class":336},"        log",[211,3516,673],{"class":340},[211,3518,676],{"class":332},[211,3520,337],{"class":347},[211,3522,681],{"class":340},[211,3524,684],{"class":347},[211,3526,351],{"class":340},[211,3528,466],{"class":340},[211,3530,691],{"class":347},[211,3532,351],{"class":340},[211,3534,400],{"class":340},[211,3536,3537],{"class":220},"user_123",[211,3539,357],{"class":340},[211,3541,505],{"class":340},[211,3543,3544],{"class":347}," plan",[211,3546,351],{"class":340},[211,3548,400],{"class":340},[211,3550,3551],{"class":220},"pro",[211,3553,357],{"class":340},[211,3555,472],{"class":340},[211,3557,472],{"class":340},[211,3559,428],{"class":347},[211,3561,3562],{"class":213,"line":1302},[211,3563,489],{"emptyLinePlaceholder":488},[211,3565,3566,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587],{"class":213,"line":2560},[211,3567,3568],{"class":325},"        return",[211,3570,714],{"class":336},[211,3572,673],{"class":340},[211,3574,719],{"class":332},[211,3576,337],{"class":347},[211,3578,681],{"class":340},[211,3580,2879],{"class":347},[211,3582,351],{"class":340},[211,3584,732],{"class":731},[211,3586,472],{"class":340},[211,3588,428],{"class":347},[211,3590,3591],{"class":213,"line":2606},[211,3592,3593],{"class":340},"      },\n",[211,3595,3596],{"class":213,"line":2611},[211,3597,413],{"class":340},[211,3599,3601],{"class":213,"line":3600},17,[211,3602,419],{"class":340},[211,3604,3606,3608],{"class":213,"line":3605},18,[211,3607,425],{"class":340},[211,3609,428],{"class":336},[946,3611,3612,3614,3615,3617,3618,3621],{"color":948,"icon":13},[208,3613,3331],{}," is an experimental Nitro v3 feature that uses ",[208,3616,1797],{}," to access the current request from anywhere in the call stack. It requires ",[208,3619,3620],{},"experimental.asyncContext: true"," and works on Node.js and Bun runtimes.",[188,3623,3624,3625,3628,3629,435,3632,439,3635,3638],{},"For ",[208,3626,3627],{},"throw createError()"," to return structured JSON with ",[208,3630,3631],{},"why",[208,3633,3634],{},"fix",[208,3636,3637],{},"link",", add the error handling middleware to your root route:",[200,3640,3643],{"className":315,"code":3641,"filename":3642,"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,3644,3645,3664,3684,3703,3707,3723,3731,3755,3759,3764],{"__ignoreMap":206},[211,3646,3647,3649,3651,3654,3656,3658,3660,3662],{"class":213,"line":214},[211,3648,463],{"class":325},[211,3650,466],{"class":340},[211,3652,3653],{"class":336}," createRootRoute",[211,3655,472],{"class":340},[211,3657,475],{"class":325},[211,3659,400],{"class":340},[211,3661,3360],{"class":220},[211,3663,483],{"class":340},[211,3665,3666,3668,3670,3673,3675,3677,3679,3682],{"class":213,"line":344},[211,3667,463],{"class":325},[211,3669,466],{"class":340},[211,3671,3672],{"class":336}," createMiddleware",[211,3674,472],{"class":340},[211,3676,475],{"class":325},[211,3678,400],{"class":340},[211,3680,3681],{"class":220},"@tanstack/react-start",[211,3683,483],{"class":340},[211,3685,3686,3688,3690,3693,3695,3697,3699,3701],{"class":213,"line":371},[211,3687,463],{"class":325},[211,3689,466],{"class":340},[211,3691,3692],{"class":336}," evlogErrorHandler",[211,3694,472],{"class":340},[211,3696,475],{"class":325},[211,3698,400],{"class":340},[211,3700,2673],{"class":220},[211,3702,483],{"class":340},[211,3704,3705],{"class":213,"line":382},[211,3706,489],{"emptyLinePlaceholder":488},[211,3708,3709,3711,3713,3715,3717,3719,3721],{"class":213,"line":392},[211,3710,326],{"class":325},[211,3712,497],{"class":496},[211,3714,3414],{"class":336},[211,3716,621],{"class":340},[211,3718,3653],{"class":332},[211,3720,337],{"class":336},[211,3722,341],{"class":340},[211,3724,3725,3727,3729],{"class":213,"line":410},[211,3726,3437],{"class":347},[211,3728,351],{"class":340},[211,3730,379],{"class":340},[211,3732,3733,3736,3738,3740,3743,3745,3747,3750,3753],{"class":213,"line":416},[211,3734,3735],{"class":347},"    middleware",[211,3737,351],{"class":340},[211,3739,354],{"class":336},[211,3741,3742],{"class":332},"createMiddleware",[211,3744,1360],{"class":336},[211,3746,673],{"class":340},[211,3748,3749],{"class":332},"server",[211,3751,3752],{"class":336},"(evlogErrorHandler)]",[211,3754,368],{"class":340},[211,3756,3757],{"class":213,"line":422},[211,3758,419],{"class":340},[211,3760,3761],{"class":213,"line":940},[211,3762,3763],{"class":664},"  // ... head, shellComponent, etc.\n",[211,3765,3766,3768],{"class":213,"line":1276},[211,3767,425],{"class":340},[211,3769,428],{"class":336},[946,3771,1888,3772,3775],{"color":1886,"icon":1887},[299,3773,3774],{"href":153},"TanStack Start example"," with API routes, structured errors, and wide event logging.",[269,3777,157],{"id":3778},"nestjs",[188,3780,3781,3782,3785,3786,3789,3790,3793,3794,3796],{},"evlog provides a NestJS module at ",[208,3783,3784],{},"evlog/nestjs"," with ",[208,3787,3788],{},"EvlogModule.forRoot()",". It auto-creates a request-scoped logger accessible via ",[208,3791,3792],{},"req.log"," or ",[208,3795,1770],{}," and emits a wide event when the response finishes.",[200,3798,3800],{"className":202,"code":3799,"language":205,"meta":206,"style":206},"npm install evlog @nestjs/common @nestjs/core @nestjs/platform-express\n",[208,3801,3802],{"__ignoreMap":206},[211,3803,3804,3806,3808,3811,3814,3817],{"class":213,"line":214},[211,3805,228],{"class":217},[211,3807,237],{"class":220},[211,3809,3810],{"class":220}," evlog",[211,3812,3813],{"class":220}," @nestjs/common",[211,3815,3816],{"class":220}," @nestjs/core",[211,3818,3819],{"class":220}," @nestjs/platform-express\n",[188,3821,3822,3823,3826],{},"Register ",[208,3824,3825],{},"EvlogModule"," in your app module:",[200,3828,3831],{"className":315,"code":3829,"filename":3830,"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,3832,3833,3853,3872,3876,3888,3897,3911,3917,3923],{"__ignoreMap":206},[211,3834,3835,3837,3839,3842,3844,3846,3848,3851],{"class":213,"line":214},[211,3836,463],{"class":325},[211,3838,466],{"class":340},[211,3840,3841],{"class":336}," Module",[211,3843,472],{"class":340},[211,3845,475],{"class":325},[211,3847,400],{"class":340},[211,3849,3850],{"class":220},"@nestjs/common",[211,3852,483],{"class":340},[211,3854,3855,3857,3859,3862,3864,3866,3868,3870],{"class":213,"line":344},[211,3856,463],{"class":325},[211,3858,466],{"class":340},[211,3860,3861],{"class":336}," EvlogModule",[211,3863,472],{"class":340},[211,3865,475],{"class":325},[211,3867,400],{"class":340},[211,3869,3784],{"class":220},[211,3871,483],{"class":340},[211,3873,3874],{"class":213,"line":371},[211,3875,489],{"emptyLinePlaceholder":488},[211,3877,3878,3881,3884,3886],{"class":213,"line":382},[211,3879,3880],{"class":340},"@",[211,3882,3883],{"class":332},"Module",[211,3885,337],{"class":336},[211,3887,341],{"class":340},[211,3889,3890,3893,3895],{"class":213,"line":392},[211,3891,3892],{"class":347},"  imports",[211,3894,351],{"class":340},[211,3896,2700],{"class":336},[211,3898,3899,3902,3904,3907,3909],{"class":213,"line":410},[211,3900,3901],{"class":336},"    EvlogModule",[211,3903,673],{"class":340},[211,3905,3906],{"class":332},"forRoot",[211,3908,1360],{"class":336},[211,3910,368],{"class":340},[211,3912,3913,3915],{"class":213,"line":416},[211,3914,2744],{"class":336},[211,3916,368],{"class":340},[211,3918,3919,3921],{"class":213,"line":422},[211,3920,425],{"class":340},[211,3922,428],{"class":336},[211,3924,3925,3927,3930,3933],{"class":213,"line":940},[211,3926,326],{"class":325},[211,3928,3929],{"class":496}," class",[211,3931,3932],{"class":217}," AppModule",[211,3934,2171],{"class":340},[188,3936,3937],{},"Initialize evlog in your bootstrap and create the NestJS app:",[200,3939,3942],{"className":315,"code":3940,"filename":3941,"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,3943,3944,3964,3982,4001,4005,4036,4040,4063],{"__ignoreMap":206},[211,3945,3946,3948,3950,3953,3955,3957,3959,3962],{"class":213,"line":214},[211,3947,463],{"class":325},[211,3949,466],{"class":340},[211,3951,3952],{"class":336}," NestFactory",[211,3954,472],{"class":340},[211,3956,475],{"class":325},[211,3958,400],{"class":340},[211,3960,3961],{"class":220},"@nestjs/core",[211,3963,483],{"class":340},[211,3965,3966,3968,3970,3972,3974,3976,3978,3980],{"class":213,"line":344},[211,3967,463],{"class":325},[211,3969,466],{"class":340},[211,3971,1974],{"class":336},[211,3973,472],{"class":340},[211,3975,475],{"class":325},[211,3977,400],{"class":340},[211,3979,1983],{"class":220},[211,3981,483],{"class":340},[211,3983,3984,3986,3988,3990,3992,3994,3996,3999],{"class":213,"line":371},[211,3985,463],{"class":325},[211,3987,466],{"class":340},[211,3989,3932],{"class":336},[211,3991,472],{"class":340},[211,3993,475],{"class":325},[211,3995,400],{"class":340},[211,3997,3998],{"class":220},"./app.module",[211,4000,483],{"class":340},[211,4002,4003],{"class":213,"line":382},[211,4004,489],{"emptyLinePlaceholder":488},[211,4006,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4028,4030,4032,4034],{"class":213,"line":392},[211,4008,2014],{"class":332},[211,4010,337],{"class":336},[211,4012,681],{"class":340},[211,4014,2021],{"class":347},[211,4016,351],{"class":340},[211,4018,466],{"class":340},[211,4020,1230],{"class":347},[211,4022,351],{"class":340},[211,4024,400],{"class":340},[211,4026,4027],{"class":220},"nestjs-api",[211,4029,357],{"class":340},[211,4031,472],{"class":340},[211,4033,472],{"class":340},[211,4035,428],{"class":336},[211,4037,4038],{"class":213,"line":410},[211,4039,489],{"emptyLinePlaceholder":488},[211,4041,4042,4045,4048,4050,4053,4055,4057,4060],{"class":213,"line":416},[211,4043,4044],{"class":496},"const",[211,4046,4047],{"class":336}," app ",[211,4049,621],{"class":340},[211,4051,4052],{"class":325}," await",[211,4054,3952],{"class":336},[211,4056,673],{"class":340},[211,4058,4059],{"class":332},"create",[211,4061,4062],{"class":336},"(AppModule)\n",[211,4064,4065,4068,4071,4073,4076,4078,4081],{"class":213,"line":422},[211,4066,4067],{"class":325},"await",[211,4069,4070],{"class":336}," app",[211,4072,673],{"class":340},[211,4074,4075],{"class":332},"listen",[211,4077,337],{"class":336},[211,4079,4080],{"class":2588},"3000",[211,4082,428],{"class":336},[188,4084,4085,4086,4088],{},"Use ",[208,4087,1770],{}," to access the request-scoped logger from any controller or service:",[200,4090,4093],{"className":315,"code":4091,"filename":4092,"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,4094,4095,4124,4142,4146,4164,4175,4194,4226,4239,4266,4291,4295],{"__ignoreMap":206},[211,4096,4097,4099,4101,4104,4106,4109,4111,4114,4116,4118,4120,4122],{"class":213,"line":214},[211,4098,463],{"class":325},[211,4100,466],{"class":340},[211,4102,4103],{"class":336}," Controller",[211,4105,505],{"class":340},[211,4107,4108],{"class":336}," Get",[211,4110,505],{"class":340},[211,4112,4113],{"class":336}," Param",[211,4115,472],{"class":340},[211,4117,475],{"class":325},[211,4119,400],{"class":340},[211,4121,3850],{"class":220},[211,4123,483],{"class":340},[211,4125,4126,4128,4130,4132,4134,4136,4138,4140],{"class":213,"line":344},[211,4127,463],{"class":325},[211,4129,466],{"class":340},[211,4131,508],{"class":336},[211,4133,472],{"class":340},[211,4135,475],{"class":325},[211,4137,400],{"class":340},[211,4139,3784],{"class":220},[211,4141,483],{"class":340},[211,4143,4144],{"class":213,"line":371},[211,4145,489],{"emptyLinePlaceholder":488},[211,4147,4148,4150,4153,4155,4157,4160,4162],{"class":213,"line":382},[211,4149,3880],{"class":340},[211,4151,4152],{"class":332},"Controller",[211,4154,337],{"class":336},[211,4156,357],{"class":340},[211,4158,4159],{"class":220},"users",[211,4161,357],{"class":340},[211,4163,428],{"class":336},[211,4165,4166,4168,4170,4173],{"class":213,"line":392},[211,4167,326],{"class":325},[211,4169,3929],{"class":496},[211,4171,4172],{"class":217}," UsersController",[211,4174,379],{"class":340},[211,4176,4177,4180,4183,4185,4187,4190,4192],{"class":213,"line":410},[211,4178,4179],{"class":340},"  @",[211,4181,4182],{"class":332},"Get",[211,4184,337],{"class":336},[211,4186,357],{"class":340},[211,4188,4189],{"class":220},":id",[211,4191,357],{"class":340},[211,4193,428],{"class":336},[211,4195,4196,4199,4202,4205,4207,4209,4211,4213,4215,4217,4219,4222,4224],{"class":213,"line":416},[211,4197,4198],{"class":347},"  findOne",[211,4200,4201],{"class":340},"(@",[211,4203,4204],{"class":332},"Param",[211,4206,337],{"class":336},[211,4208,357],{"class":340},[211,4210,2294],{"class":220},[211,4212,357],{"class":340},[211,4214,918],{"class":336},[211,4216,2294],{"class":634},[211,4218,351],{"class":340},[211,4220,4221],{"class":217}," string",[211,4223,642],{"class":340},[211,4225,379],{"class":340},[211,4227,4228,4231,4233,4235,4237],{"class":213,"line":422},[211,4229,4230],{"class":496},"    const",[211,4232,513],{"class":336},[211,4234,523],{"class":340},[211,4236,508],{"class":332},[211,4238,839],{"class":347},[211,4240,4241,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264],{"class":213,"line":940},[211,4242,4243],{"class":336},"    log",[211,4245,673],{"class":340},[211,4247,676],{"class":332},[211,4249,337],{"class":347},[211,4251,681],{"class":340},[211,4253,684],{"class":347},[211,4255,351],{"class":340},[211,4257,466],{"class":340},[211,4259,691],{"class":336},[211,4261,472],{"class":340},[211,4263,472],{"class":340},[211,4265,428],{"class":347},[211,4267,4268,4271,4273,4275,4277,4280,4282,4284,4287,4289],{"class":213,"line":1276},[211,4269,4270],{"class":325},"    return",[211,4272,466],{"class":340},[211,4274,691],{"class":336},[211,4276,505],{"class":340},[211,4278,4279],{"class":347}," name",[211,4281,351],{"class":340},[211,4283,400],{"class":340},[211,4285,4286],{"class":220},"Alice",[211,4288,357],{"class":340},[211,4290,937],{"class":340},[211,4292,4293],{"class":213,"line":1286},[211,4294,2156],{"class":340},[211,4296,4297],{"class":213,"line":1296},[211,4298,1074],{"class":340},[188,4300,4301],{},"The module supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,4303,4305],{"className":315,"code":4304,"filename":3830,"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,4306,4307,4325,4343,4361,4365,4375,4383,4395,4414,4434,4443,4470,4474,4487,4504,4529,4533,4550,4587,4592,4601,4608,4615],{"__ignoreMap":206},[211,4308,4309,4311,4313,4315,4317,4319,4321,4323],{"class":213,"line":214},[211,4310,463],{"class":325},[211,4312,466],{"class":340},[211,4314,3841],{"class":336},[211,4316,472],{"class":340},[211,4318,475],{"class":325},[211,4320,400],{"class":340},[211,4322,3850],{"class":220},[211,4324,483],{"class":340},[211,4326,4327,4329,4331,4333,4335,4337,4339,4341],{"class":213,"line":344},[211,4328,463],{"class":325},[211,4330,466],{"class":340},[211,4332,3861],{"class":336},[211,4334,472],{"class":340},[211,4336,475],{"class":325},[211,4338,400],{"class":340},[211,4340,3784],{"class":220},[211,4342,483],{"class":340},[211,4344,4345,4347,4349,4351,4353,4355,4357,4359],{"class":213,"line":371},[211,4346,463],{"class":325},[211,4348,466],{"class":340},[211,4350,2383],{"class":336},[211,4352,472],{"class":340},[211,4354,475],{"class":325},[211,4356,400],{"class":340},[211,4358,2392],{"class":220},[211,4360,483],{"class":340},[211,4362,4363],{"class":213,"line":382},[211,4364,489],{"emptyLinePlaceholder":488},[211,4366,4367,4369,4371,4373],{"class":213,"line":392},[211,4368,3880],{"class":340},[211,4370,3883],{"class":332},[211,4372,337],{"class":336},[211,4374,341],{"class":340},[211,4376,4377,4379,4381],{"class":213,"line":410},[211,4378,3892],{"class":347},[211,4380,351],{"class":340},[211,4382,2700],{"class":336},[211,4384,4385,4387,4389,4391,4393],{"class":213,"line":416},[211,4386,3901],{"class":336},[211,4388,673],{"class":340},[211,4390,3906],{"class":332},[211,4392,337],{"class":336},[211,4394,341],{"class":340},[211,4396,4397,4400,4402,4404,4406,4408,4410,4412],{"class":213,"line":422},[211,4398,4399],{"class":347},"      include",[211,4401,351],{"class":340},[211,4403,354],{"class":336},[211,4405,357],{"class":340},[211,4407,2470],{"class":220},[211,4409,357],{"class":340},[211,4411,365],{"class":336},[211,4413,368],{"class":340},[211,4415,4416,4419,4421,4423,4425,4428,4430,4432],{"class":213,"line":940},[211,4417,4418],{"class":347},"      exclude",[211,4420,351],{"class":340},[211,4422,354],{"class":336},[211,4424,357],{"class":340},[211,4426,4427],{"class":220},"/_internal/**",[211,4429,357],{"class":340},[211,4431,365],{"class":336},[211,4433,368],{"class":340},[211,4435,4436,4439,4441],{"class":213,"line":1276},[211,4437,4438],{"class":347},"      routes",[211,4440,351],{"class":340},[211,4442,379],{"class":340},[211,4444,4445,4448,4451,4453,4455,4457,4459,4461,4463,4466,4468],{"class":213,"line":1286},[211,4446,4447],{"class":340},"        '",[211,4449,4450],{"class":347},"/api/auth/**",[211,4452,357],{"class":340},[211,4454,351],{"class":340},[211,4456,466],{"class":340},[211,4458,1230],{"class":347},[211,4460,351],{"class":340},[211,4462,400],{"class":340},[211,4464,4465],{"class":220},"auth-service",[211,4467,357],{"class":340},[211,4469,2732],{"class":340},[211,4471,4472],{"class":213,"line":1296},[211,4473,3593],{"class":340},[211,4475,4476,4479,4481,4483,4485],{"class":213,"line":1302},[211,4477,4478],{"class":347},"      drain",[211,4480,351],{"class":340},[211,4482,2383],{"class":332},[211,4484,1360],{"class":336},[211,4486,368],{"class":340},[211,4488,4489,4492,4494,4496,4498,4500,4502],{"class":213,"line":2560},[211,4490,4491],{"class":332},"      enrich",[211,4493,351],{"class":340},[211,4495,631],{"class":340},[211,4497,2501],{"class":634},[211,4499,642],{"class":340},[211,4501,645],{"class":496},[211,4503,379],{"class":340},[211,4505,4506,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527],{"class":213,"line":2606},[211,4507,4508],{"class":336},"        ctx",[211,4510,673],{"class":340},[211,4512,2517],{"class":336},[211,4514,673],{"class":340},[211,4516,2522],{"class":336},[211,4518,523],{"class":340},[211,4520,2527],{"class":336},[211,4522,673],{"class":340},[211,4524,1531],{"class":336},[211,4526,673],{"class":340},[211,4528,2536],{"class":336},[211,4530,4531],{"class":213,"line":2611},[211,4532,3593],{"class":340},[211,4534,4535,4538,4540,4542,4544,4546,4548],{"class":213,"line":3600},[211,4536,4537],{"class":332},"      keep",[211,4539,351],{"class":340},[211,4541,631],{"class":340},[211,4543,2501],{"class":634},[211,4545,642],{"class":340},[211,4547,645],{"class":496},[211,4549,379],{"class":340},[211,4551,4552,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585],{"class":213,"line":3605},[211,4553,4554],{"class":325},"        if",[211,4556,631],{"class":347},[211,4558,2501],{"class":336},[211,4560,673],{"class":340},[211,4562,2572],{"class":336},[211,4564,2575],{"class":340},[211,4566,2578],{"class":336},[211,4568,673],{"class":340},[211,4570,2572],{"class":336},[211,4572,2585],{"class":340},[211,4574,2589],{"class":2588},[211,4576,918],{"class":347},[211,4578,2501],{"class":336},[211,4580,673],{"class":340},[211,4582,2598],{"class":336},[211,4584,523],{"class":340},[211,4586,2603],{"class":731},[211,4588,4590],{"class":213,"line":4589},19,[211,4591,3593],{"class":340},[211,4593,4595,4597,4599],{"class":213,"line":4594},20,[211,4596,2737],{"class":340},[211,4598,642],{"class":336},[211,4600,368],{"class":340},[211,4602,4604,4606],{"class":213,"line":4603},21,[211,4605,2744],{"class":336},[211,4607,368],{"class":340},[211,4609,4611,4613],{"class":213,"line":4610},22,[211,4612,425],{"class":340},[211,4614,428],{"class":336},[211,4616,4618,4620,4622,4624],{"class":213,"line":4617},23,[211,4619,326],{"class":325},[211,4621,3929],{"class":496},[211,4623,3932],{"class":217},[211,4625,2171],{"class":340},[188,4627,4628,4629,4632,4633,351],{},"For async configuration (e.g. from ",[208,4630,4631],{},"ConfigService","), use ",[208,4634,4635],{},"forRootAsync()",[200,4637,4639],{"className":315,"code":4638,"filename":3830,"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,4640,4641,4654,4665,4677,4702,4744,4753],{"__ignoreMap":206},[211,4642,4643,4645,4647,4650,4652],{"class":213,"line":214},[211,4644,3825],{"class":336},[211,4646,673],{"class":340},[211,4648,4649],{"class":332},"forRootAsync",[211,4651,337],{"class":336},[211,4653,341],{"class":340},[211,4655,4656,4658,4660,4663],{"class":213,"line":344},[211,4657,3892],{"class":347},[211,4659,351],{"class":340},[211,4661,4662],{"class":336}," [ConfigModule]",[211,4664,368],{"class":340},[211,4666,4667,4670,4672,4675],{"class":213,"line":371},[211,4668,4669],{"class":347},"  inject",[211,4671,351],{"class":340},[211,4673,4674],{"class":336}," [ConfigService]",[211,4676,368],{"class":340},[211,4678,4679,4682,4684,4686,4689,4691,4694,4696,4698,4700],{"class":213,"line":382},[211,4680,4681],{"class":332},"  useFactory",[211,4683,351],{"class":340},[211,4685,631],{"class":340},[211,4687,4688],{"class":634},"config",[211,4690,351],{"class":340},[211,4692,4693],{"class":217}," ConfigService",[211,4695,642],{"class":340},[211,4697,645],{"class":496},[211,4699,631],{"class":336},[211,4701,341],{"class":340},[211,4703,4704,4707,4709,4711,4713,4715,4718,4720,4723,4725,4727,4729,4731,4734,4736,4738,4740,4742],{"class":213,"line":392},[211,4705,4706],{"class":347},"    drain",[211,4708,351],{"class":340},[211,4710,2383],{"class":332},[211,4712,337],{"class":336},[211,4714,681],{"class":340},[211,4716,4717],{"class":347}," token",[211,4719,351],{"class":340},[211,4721,4722],{"class":336}," config",[211,4724,673],{"class":340},[211,4726,906],{"class":332},[211,4728,337],{"class":336},[211,4730,357],{"class":340},[211,4732,4733],{"class":220},"AXIOM_TOKEN",[211,4735,357],{"class":340},[211,4737,918],{"class":336},[211,4739,425],{"class":340},[211,4741,642],{"class":336},[211,4743,368],{"class":340},[211,4745,4746,4749,4751],{"class":213,"line":410},[211,4747,4748],{"class":340},"  }",[211,4750,642],{"class":336},[211,4752,368],{"class":340},[211,4754,4755,4757],{"class":213,"line":416},[211,4756,425],{"class":340},[211,4758,428],{"class":336},[188,4760,4761,4762,959,4764,351],{},"Handle errors with a NestJS exception filter using ",[208,4763,1770],{},[208,4765,4766],{},"parseError()",[200,4768,4771],{"className":315,"code":4769,"filename":4770,"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,4772,4773,4792,4818,4837,4855,4859,4868,4884,4912,4937,4980,4984,5013,5017,5034,5063,5105,5111,5115],{"__ignoreMap":206},[211,4774,4775,4777,4779,4782,4784,4786,4788,4790],{"class":213,"line":214},[211,4776,463],{"class":325},[211,4778,466],{"class":340},[211,4780,4781],{"class":336}," Catch",[211,4783,472],{"class":340},[211,4785,475],{"class":325},[211,4787,400],{"class":340},[211,4789,3850],{"class":220},[211,4791,483],{"class":340},[211,4793,4794,4796,4798,4800,4803,4805,4808,4810,4812,4814,4816],{"class":213,"line":344},[211,4795,463],{"class":325},[211,4797,2087],{"class":325},[211,4799,466],{"class":340},[211,4801,4802],{"class":336}," ExceptionFilter",[211,4804,505],{"class":340},[211,4806,4807],{"class":336}," ArgumentsHost",[211,4809,472],{"class":340},[211,4811,475],{"class":325},[211,4813,400],{"class":340},[211,4815,3850],{"class":220},[211,4817,483],{"class":340},[211,4819,4820,4822,4824,4827,4829,4831,4833,4835],{"class":213,"line":371},[211,4821,463],{"class":325},[211,4823,466],{"class":340},[211,4825,4826],{"class":336}," parseError",[211,4828,472],{"class":340},[211,4830,475],{"class":325},[211,4832,400],{"class":340},[211,4834,1983],{"class":220},[211,4836,483],{"class":340},[211,4838,4839,4841,4843,4845,4847,4849,4851,4853],{"class":213,"line":382},[211,4840,463],{"class":325},[211,4842,466],{"class":340},[211,4844,508],{"class":336},[211,4846,472],{"class":340},[211,4848,475],{"class":325},[211,4850,400],{"class":340},[211,4852,3784],{"class":220},[211,4854,483],{"class":340},[211,4856,4857],{"class":213,"line":392},[211,4858,489],{"emptyLinePlaceholder":488},[211,4860,4861,4863,4866],{"class":213,"line":410},[211,4862,3880],{"class":340},[211,4864,4865],{"class":332},"Catch",[211,4867,839],{"class":336},[211,4869,4870,4872,4874,4877,4880,4882],{"class":213,"line":416},[211,4871,326],{"class":325},[211,4873,3929],{"class":496},[211,4875,4876],{"class":217}," EvlogExceptionFilter",[211,4878,4879],{"class":496}," implements",[211,4881,4802],{"class":217},[211,4883,379],{"class":340},[211,4885,4886,4889,4891,4894,4896,4899,4901,4904,4906,4908,4910],{"class":213,"line":422},[211,4887,4888],{"class":347},"  catch",[211,4890,337],{"class":340},[211,4892,4893],{"class":634},"exception",[211,4895,351],{"class":340},[211,4897,4898],{"class":217}," unknown",[211,4900,505],{"class":340},[211,4902,4903],{"class":634}," host",[211,4905,351],{"class":340},[211,4907,4807],{"class":217},[211,4909,642],{"class":340},[211,4911,379],{"class":340},[211,4913,4914,4916,4919,4921,4923,4925,4928,4930,4932,4935],{"class":213,"line":940},[211,4915,4230],{"class":496},[211,4917,4918],{"class":336}," response",[211,4920,523],{"class":340},[211,4922,4903],{"class":336},[211,4924,673],{"class":340},[211,4926,4927],{"class":332},"switchToHttp",[211,4929,1360],{"class":347},[211,4931,673],{"class":340},[211,4933,4934],{"class":332},"getResponse",[211,4936,839],{"class":347},[211,4938,4939,4941,4944,4946,4949,4952,4955,4958,4960,4963,4966,4968,4970,4973,4975,4977],{"class":213,"line":1276},[211,4940,4230],{"class":496},[211,4942,4943],{"class":336}," error",[211,4945,523],{"class":340},[211,4947,4948],{"class":336}," exception",[211,4950,4951],{"class":340}," instanceof",[211,4953,4954],{"class":217}," Error",[211,4956,4957],{"class":340}," ?",[211,4959,4948],{"class":336},[211,4961,4962],{"class":340}," :",[211,4964,4965],{"class":340}," new",[211,4967,4954],{"class":332},[211,4969,337],{"class":347},[211,4971,4972],{"class":332},"String",[211,4974,337],{"class":347},[211,4976,4893],{"class":336},[211,4978,4979],{"class":347},"))\n",[211,4981,4982],{"class":213,"line":1286},[211,4983,489],{"emptyLinePlaceholder":488},[211,4985,4986,4989,4991,4993,4995,4997,5000,5002,5004,5006,5008,5011],{"class":213,"line":1296},[211,4987,4988],{"class":325},"    try",[211,4990,466],{"class":340},[211,4992,508],{"class":332},[211,4994,1360],{"class":347},[211,4996,673],{"class":340},[211,4998,4999],{"class":332},"error",[211,5001,337],{"class":347},[211,5003,4999],{"class":336},[211,5005,918],{"class":347},[211,5007,425],{"class":340},[211,5009,5010],{"class":325}," catch",[211,5012,2171],{"class":340},[211,5014,5015],{"class":213,"line":1302},[211,5016,489],{"emptyLinePlaceholder":488},[211,5018,5019,5021,5024,5026,5028,5030,5032],{"class":213,"line":2560},[211,5020,4230],{"class":496},[211,5022,5023],{"class":336}," parsed",[211,5025,523],{"class":340},[211,5027,4826],{"class":332},[211,5029,337],{"class":347},[211,5031,4999],{"class":336},[211,5033,428],{"class":347},[211,5035,5036,5039,5041,5044,5046,5049,5051,5053,5055,5057,5059,5061],{"class":213,"line":2606},[211,5037,5038],{"class":336},"    response",[211,5040,673],{"class":340},[211,5042,5043],{"class":332},"status",[211,5045,337],{"class":347},[211,5047,5048],{"class":336},"parsed",[211,5050,673],{"class":340},[211,5052,5043],{"class":336},[211,5054,642],{"class":347},[211,5056,673],{"class":340},[211,5058,719],{"class":332},[211,5060,337],{"class":347},[211,5062,341],{"class":340},[211,5064,5065,5068,5070,5072,5074,5077,5079,5082,5084,5086,5088,5090,5092,5095,5097,5099,5101,5103],{"class":213,"line":2611},[211,5066,5067],{"class":347},"      message",[211,5069,351],{"class":340},[211,5071,5023],{"class":336},[211,5073,673],{"class":340},[211,5075,5076],{"class":336},"message",[211,5078,505],{"class":340},[211,5080,5081],{"class":347}," why",[211,5083,351],{"class":340},[211,5085,5023],{"class":336},[211,5087,673],{"class":340},[211,5089,3631],{"class":336},[211,5091,505],{"class":340},[211,5093,5094],{"class":347}," fix",[211,5096,351],{"class":340},[211,5098,5023],{"class":336},[211,5100,673],{"class":340},[211,5102,3634],{"class":336},[211,5104,368],{"class":340},[211,5106,5107,5109],{"class":213,"line":3600},[211,5108,2737],{"class":340},[211,5110,428],{"class":347},[211,5112,5113],{"class":213,"line":3605},[211,5114,2156],{"class":340},[211,5116,5117],{"class":213,"line":4589},[211,5118,1074],{"class":340},[946,5120,2618,5121,2622],{"color":1886,"icon":1887},[299,5122,5123],{"href":158},"NestJS example",[269,5125,162],{"id":5126},"express",[188,5128,5129,5130,3789,5133,3793,5135,3796],{},"evlog provides Express middleware at ",[208,5131,5132],{},"evlog/express",[208,5134,3792],{},[208,5136,1770],{},[200,5138,5140],{"className":202,"code":5139,"language":205,"meta":206,"style":206},"npm install evlog express\n",[208,5141,5142],{"__ignoreMap":206},[211,5143,5144,5146,5148,5150],{"class":213,"line":214},[211,5145,228],{"class":217},[211,5147,237],{"class":220},[211,5149,3810],{"class":220},[211,5151,5152],{"class":220}," express\n",[200,5154,5157],{"className":315,"code":5155,"filename":5156,"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","src/index.ts",[208,5158,5159,5174,5192,5210,5214,5222,5244,5250,5254,5267,5271,5288,5292,5327,5365,5389,5395,5399],{"__ignoreMap":206},[211,5160,5161,5163,5166,5168,5170,5172],{"class":213,"line":214},[211,5162,463],{"class":325},[211,5164,5165],{"class":336}," express ",[211,5167,2668],{"class":325},[211,5169,400],{"class":340},[211,5171,5126],{"class":220},[211,5173,483],{"class":340},[211,5175,5176,5178,5180,5182,5184,5186,5188,5190],{"class":213,"line":344},[211,5177,463],{"class":325},[211,5179,466],{"class":340},[211,5181,1974],{"class":336},[211,5183,472],{"class":340},[211,5185,475],{"class":325},[211,5187,400],{"class":340},[211,5189,1983],{"class":220},[211,5191,483],{"class":340},[211,5193,5194,5196,5198,5200,5202,5204,5206,5208],{"class":213,"line":371},[211,5195,463],{"class":325},[211,5197,466],{"class":340},[211,5199,3810],{"class":336},[211,5201,472],{"class":340},[211,5203,475],{"class":325},[211,5205,400],{"class":340},[211,5207,5132],{"class":220},[211,5209,483],{"class":340},[211,5211,5212],{"class":213,"line":382},[211,5213,489],{"emptyLinePlaceholder":488},[211,5215,5216,5218,5220],{"class":213,"line":392},[211,5217,2014],{"class":332},[211,5219,337],{"class":336},[211,5221,341],{"class":340},[211,5223,5224,5227,5229,5231,5233,5235,5237,5240,5242],{"class":213,"line":410},[211,5225,5226],{"class":347},"  env",[211,5228,351],{"class":340},[211,5230,466],{"class":340},[211,5232,1230],{"class":347},[211,5234,351],{"class":340},[211,5236,400],{"class":340},[211,5238,5239],{"class":220},"express-api",[211,5241,357],{"class":340},[211,5243,2732],{"class":340},[211,5245,5246,5248],{"class":213,"line":416},[211,5247,425],{"class":340},[211,5249,428],{"class":336},[211,5251,5252],{"class":213,"line":422},[211,5253,489],{"emptyLinePlaceholder":488},[211,5255,5256,5258,5260,5262,5265],{"class":213,"line":940},[211,5257,4044],{"class":496},[211,5259,4047],{"class":336},[211,5261,621],{"class":340},[211,5263,5264],{"class":332}," express",[211,5266,839],{"class":336},[211,5268,5269],{"class":213,"line":1276},[211,5270,489],{"emptyLinePlaceholder":488},[211,5272,5273,5276,5278,5281,5283,5285],{"class":213,"line":1286},[211,5274,5275],{"class":336},"app",[211,5277,673],{"class":340},[211,5279,5280],{"class":332},"use",[211,5282,337],{"class":336},[211,5284,1983],{"class":332},[211,5286,5287],{"class":336},"())\n",[211,5289,5290],{"class":213,"line":1296},[211,5291,489],{"emptyLinePlaceholder":488},[211,5293,5294,5296,5298,5300,5302,5304,5307,5309,5311,5313,5316,5318,5321,5323,5325],{"class":213,"line":1302},[211,5295,5275],{"class":336},[211,5297,673],{"class":340},[211,5299,906],{"class":332},[211,5301,337],{"class":336},[211,5303,357],{"class":340},[211,5305,5306],{"class":220},"/api/users",[211,5308,357],{"class":340},[211,5310,505],{"class":340},[211,5312,631],{"class":340},[211,5314,5315],{"class":634},"req",[211,5317,505],{"class":340},[211,5319,5320],{"class":634}," res",[211,5322,642],{"class":340},[211,5324,645],{"class":496},[211,5326,379],{"class":340},[211,5328,5329,5332,5334,5336,5338,5340,5342,5344,5347,5349,5351,5354,5356,5359,5361,5363],{"class":213,"line":2560},[211,5330,5331],{"class":336},"  req",[211,5333,673],{"class":340},[211,5335,1310],{"class":336},[211,5337,673],{"class":340},[211,5339,676],{"class":332},[211,5341,337],{"class":347},[211,5343,681],{"class":340},[211,5345,5346],{"class":347}," users",[211,5348,351],{"class":340},[211,5350,466],{"class":340},[211,5352,5353],{"class":347}," count",[211,5355,351],{"class":340},[211,5357,5358],{"class":2588}," 42",[211,5360,472],{"class":340},[211,5362,472],{"class":340},[211,5364,428],{"class":347},[211,5366,5367,5370,5372,5374,5376,5378,5380,5382,5385,5387],{"class":213,"line":2606},[211,5368,5369],{"class":336},"  res",[211,5371,673],{"class":340},[211,5373,719],{"class":332},[211,5375,337],{"class":347},[211,5377,681],{"class":340},[211,5379,5346],{"class":347},[211,5381,351],{"class":340},[211,5383,5384],{"class":347}," [] ",[211,5386,425],{"class":340},[211,5388,428],{"class":347},[211,5390,5391,5393],{"class":213,"line":2611},[211,5392,425],{"class":340},[211,5394,428],{"class":336},[211,5396,5397],{"class":213,"line":3600},[211,5398,489],{"emptyLinePlaceholder":488},[211,5400,5401,5403,5405,5407,5409,5411],{"class":213,"line":3605},[211,5402,5275],{"class":336},[211,5404,673],{"class":340},[211,5406,4075],{"class":332},[211,5408,337],{"class":336},[211,5410,4080],{"class":2588},[211,5412,428],{"class":336},[188,5414,5415],{},"The middleware supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,5417,5419],{"className":315,"code":5418,"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,5420,5421,5439,5459,5463,5476,5480,5496,5514,5533,5542,5567,5571,5583,5599,5610,5634,5638,5654,5690,5694],{"__ignoreMap":206},[211,5422,5423,5425,5427,5429,5431,5433,5435,5437],{"class":213,"line":214},[211,5424,463],{"class":325},[211,5426,466],{"class":340},[211,5428,2383],{"class":336},[211,5430,472],{"class":340},[211,5432,475],{"class":325},[211,5434,400],{"class":340},[211,5436,2392],{"class":220},[211,5438,483],{"class":340},[211,5440,5441,5443,5445,5448,5450,5452,5454,5457],{"class":213,"line":344},[211,5442,463],{"class":325},[211,5444,466],{"class":340},[211,5446,5447],{"class":336}," createUserAgentEnricher",[211,5449,472],{"class":340},[211,5451,475],{"class":325},[211,5453,400],{"class":340},[211,5455,5456],{"class":220},"evlog/enrichers",[211,5458,483],{"class":340},[211,5460,5461],{"class":213,"line":371},[211,5462,489],{"emptyLinePlaceholder":488},[211,5464,5465,5467,5470,5472,5474],{"class":213,"line":382},[211,5466,4044],{"class":496},[211,5468,5469],{"class":336}," userAgent ",[211,5471,621],{"class":340},[211,5473,5447],{"class":332},[211,5475,839],{"class":336},[211,5477,5478],{"class":213,"line":392},[211,5479,489],{"emptyLinePlaceholder":488},[211,5481,5482,5484,5486,5488,5490,5492,5494],{"class":213,"line":410},[211,5483,5275],{"class":336},[211,5485,673],{"class":340},[211,5487,5280],{"class":332},[211,5489,337],{"class":336},[211,5491,1983],{"class":332},[211,5493,337],{"class":336},[211,5495,341],{"class":340},[211,5497,5498,5500,5502,5504,5506,5508,5510,5512],{"class":213,"line":416},[211,5499,2461],{"class":347},[211,5501,351],{"class":340},[211,5503,354],{"class":336},[211,5505,357],{"class":340},[211,5507,2470],{"class":220},[211,5509,357],{"class":340},[211,5511,365],{"class":336},[211,5513,368],{"class":340},[211,5515,5516,5519,5521,5523,5525,5527,5529,5531],{"class":213,"line":422},[211,5517,5518],{"class":347},"  exclude",[211,5520,351],{"class":340},[211,5522,354],{"class":336},[211,5524,357],{"class":340},[211,5526,4427],{"class":220},[211,5528,357],{"class":340},[211,5530,365],{"class":336},[211,5532,368],{"class":340},[211,5534,5535,5538,5540],{"class":213,"line":940},[211,5536,5537],{"class":347},"  routes",[211,5539,351],{"class":340},[211,5541,379],{"class":340},[211,5543,5544,5547,5549,5551,5553,5555,5557,5559,5561,5563,5565],{"class":213,"line":1276},[211,5545,5546],{"class":340},"    '",[211,5548,4450],{"class":347},[211,5550,357],{"class":340},[211,5552,351],{"class":340},[211,5554,466],{"class":340},[211,5556,1230],{"class":347},[211,5558,351],{"class":340},[211,5560,400],{"class":340},[211,5562,4465],{"class":220},[211,5564,357],{"class":340},[211,5566,2732],{"class":340},[211,5568,5569],{"class":213,"line":1286},[211,5570,419],{"class":340},[211,5572,5573,5575,5577,5579,5581],{"class":213,"line":1296},[211,5574,2481],{"class":347},[211,5576,351],{"class":340},[211,5578,2383],{"class":332},[211,5580,1360],{"class":336},[211,5582,368],{"class":340},[211,5584,5585,5587,5589,5591,5593,5595,5597],{"class":213,"line":1302},[211,5586,2494],{"class":332},[211,5588,351],{"class":340},[211,5590,631],{"class":340},[211,5592,2501],{"class":634},[211,5594,642],{"class":340},[211,5596,645],{"class":496},[211,5598,379],{"class":340},[211,5600,5601,5604,5606,5608],{"class":213,"line":2560},[211,5602,5603],{"class":332},"    userAgent",[211,5605,337],{"class":347},[211,5607,2501],{"class":336},[211,5609,428],{"class":347},[211,5611,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632],{"class":213,"line":2606},[211,5613,2512],{"class":336},[211,5615,673],{"class":340},[211,5617,2517],{"class":336},[211,5619,673],{"class":340},[211,5621,2522],{"class":336},[211,5623,523],{"class":340},[211,5625,2527],{"class":336},[211,5627,673],{"class":340},[211,5629,1531],{"class":336},[211,5631,673],{"class":340},[211,5633,2536],{"class":336},[211,5635,5636],{"class":213,"line":2611},[211,5637,419],{"class":340},[211,5639,5640,5642,5644,5646,5648,5650,5652],{"class":213,"line":3600},[211,5641,2545],{"class":332},[211,5643,351],{"class":340},[211,5645,631],{"class":340},[211,5647,2501],{"class":634},[211,5649,642],{"class":340},[211,5651,645],{"class":496},[211,5653,379],{"class":340},[211,5655,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688],{"class":213,"line":3605},[211,5657,2563],{"class":325},[211,5659,631],{"class":347},[211,5661,2501],{"class":336},[211,5663,673],{"class":340},[211,5665,2572],{"class":336},[211,5667,2575],{"class":340},[211,5669,2578],{"class":336},[211,5671,673],{"class":340},[211,5673,2572],{"class":336},[211,5675,2585],{"class":340},[211,5677,2589],{"class":2588},[211,5679,918],{"class":347},[211,5681,2501],{"class":336},[211,5683,673],{"class":340},[211,5685,2598],{"class":336},[211,5687,523],{"class":340},[211,5689,2603],{"class":731},[211,5691,5692],{"class":213,"line":4589},[211,5693,419],{"class":340},[211,5695,5696,5698],{"class":213,"line":4594},[211,5697,425],{"class":340},[211,5699,4979],{"class":336},[188,5701,5702],{},"Handle errors with Express's error handler middleware:",[200,5704,5706],{"className":315,"code":5705,"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,5707,5708,5731,5735,5760,5810,5816,5820,5854,5872,5888,5952],{"__ignoreMap":206},[211,5709,5710,5712,5714,5717,5719,5721,5723,5725,5727,5729],{"class":213,"line":214},[211,5711,463],{"class":325},[211,5713,466],{"class":340},[211,5715,5716],{"class":336}," createError",[211,5718,505],{"class":340},[211,5720,4826],{"class":336},[211,5722,472],{"class":340},[211,5724,475],{"class":325},[211,5726,400],{"class":340},[211,5728,1983],{"class":220},[211,5730,483],{"class":340},[211,5732,5733],{"class":213,"line":344},[211,5734,489],{"emptyLinePlaceholder":488},[211,5736,5737,5739,5741,5743,5745,5747,5750,5752,5754,5756,5758],{"class":213,"line":371},[211,5738,5275],{"class":336},[211,5740,673],{"class":340},[211,5742,906],{"class":332},[211,5744,337],{"class":336},[211,5746,357],{"class":340},[211,5748,5749],{"class":220},"/checkout",[211,5751,357],{"class":340},[211,5753,505],{"class":340},[211,5755,3463],{"class":340},[211,5757,645],{"class":496},[211,5759,379],{"class":340},[211,5761,5762,5765,5767,5769,5771,5774,5776,5778,5781,5783,5785,5788,5790,5793,5795,5797,5799,5801,5804,5806,5808],{"class":213,"line":382},[211,5763,5764],{"class":325},"  throw",[211,5766,5716],{"class":332},[211,5768,337],{"class":347},[211,5770,681],{"class":340},[211,5772,5773],{"class":347}," message",[211,5775,351],{"class":340},[211,5777,400],{"class":340},[211,5779,5780],{"class":220},"Payment failed",[211,5782,357],{"class":340},[211,5784,505],{"class":340},[211,5786,5787],{"class":347}," status",[211,5789,351],{"class":340},[211,5791,5792],{"class":2588}," 402",[211,5794,505],{"class":340},[211,5796,5081],{"class":347},[211,5798,351],{"class":340},[211,5800,400],{"class":340},[211,5802,5803],{"class":220},"Card declined",[211,5805,357],{"class":340},[211,5807,472],{"class":340},[211,5809,428],{"class":347},[211,5811,5812,5814],{"class":213,"line":392},[211,5813,425],{"class":340},[211,5815,428],{"class":336},[211,5817,5818],{"class":213,"line":410},[211,5819,489],{"emptyLinePlaceholder":488},[211,5821,5822,5824,5826,5828,5830,5832,5835,5837,5839,5841,5843,5845,5848,5850,5852],{"class":213,"line":416},[211,5823,5275],{"class":336},[211,5825,673],{"class":340},[211,5827,5280],{"class":332},[211,5829,337],{"class":336},[211,5831,337],{"class":340},[211,5833,5834],{"class":634},"err",[211,5836,505],{"class":340},[211,5838,3475],{"class":634},[211,5840,505],{"class":340},[211,5842,5320],{"class":634},[211,5844,505],{"class":340},[211,5846,5847],{"class":634}," next",[211,5849,642],{"class":340},[211,5851,645],{"class":496},[211,5853,379],{"class":340},[211,5855,5856,5858,5860,5862,5864,5866,5868,5870],{"class":213,"line":422},[211,5857,5331],{"class":336},[211,5859,673],{"class":340},[211,5861,1310],{"class":336},[211,5863,673],{"class":340},[211,5865,4999],{"class":332},[211,5867,337],{"class":347},[211,5869,5834],{"class":336},[211,5871,428],{"class":347},[211,5873,5874,5876,5878,5880,5882,5884,5886],{"class":213,"line":940},[211,5875,652],{"class":496},[211,5877,5023],{"class":336},[211,5879,523],{"class":340},[211,5881,4826],{"class":332},[211,5883,337],{"class":347},[211,5885,5834],{"class":336},[211,5887,428],{"class":347},[211,5889,5890,5892,5894,5896,5898,5900,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934,5936,5938,5940,5942,5944,5946,5948,5950],{"class":213,"line":1276},[211,5891,5369],{"class":336},[211,5893,673],{"class":340},[211,5895,5043],{"class":332},[211,5897,337],{"class":347},[211,5899,5048],{"class":336},[211,5901,673],{"class":340},[211,5903,5043],{"class":336},[211,5905,642],{"class":347},[211,5907,673],{"class":340},[211,5909,719],{"class":332},[211,5911,337],{"class":347},[211,5913,681],{"class":340},[211,5915,5773],{"class":347},[211,5917,351],{"class":340},[211,5919,5023],{"class":336},[211,5921,673],{"class":340},[211,5923,5076],{"class":336},[211,5925,505],{"class":340},[211,5927,5081],{"class":347},[211,5929,351],{"class":340},[211,5931,5023],{"class":336},[211,5933,673],{"class":340},[211,5935,3631],{"class":336},[211,5937,505],{"class":340},[211,5939,5094],{"class":347},[211,5941,351],{"class":340},[211,5943,5023],{"class":336},[211,5945,673],{"class":340},[211,5947,3634],{"class":336},[211,5949,472],{"class":340},[211,5951,428],{"class":347},[211,5953,5954,5956],{"class":213,"line":1286},[211,5955,425],{"class":340},[211,5957,428],{"class":336},[946,5959,2618,5960,2622],{"color":1886,"icon":1887},[299,5961,5962],{"href":163},"Express example",[269,5964,167],{"id":5965},"hono",[188,5967,5968,5969,5972],{},"evlog provides a first-class Hono middleware at ",[208,5970,5971],{},"evlog/hono",". It auto-creates a request-scoped logger and emits a wide event on response.",[200,5974,5976],{"className":202,"code":5975,"language":205,"meta":206,"style":206},"bun add evlog hono\n",[208,5977,5978],{"__ignoreMap":206},[211,5979,5980,5982,5984,5986],{"class":213,"line":214},[211,5981,257],{"class":217},[211,5983,221],{"class":220},[211,5985,3810],{"class":220},[211,5987,5988],{"class":220}," hono\n",[200,5990,5992],{"className":315,"code":5991,"filename":5156,"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,5993,5994,6014,6033,6051,6076,6080,6088,6109,6115,6119,6142,6146,6160,6164,6193,6218,6248,6272,6278,6282],{"__ignoreMap":206},[211,5995,5996,5998,6000,6003,6005,6007,6009,6012],{"class":213,"line":214},[211,5997,463],{"class":325},[211,5999,466],{"class":340},[211,6001,6002],{"class":336}," serve",[211,6004,472],{"class":340},[211,6006,475],{"class":325},[211,6008,400],{"class":340},[211,6010,6011],{"class":220},"@hono/node-server",[211,6013,483],{"class":340},[211,6015,6016,6018,6020,6023,6025,6027,6029,6031],{"class":213,"line":344},[211,6017,463],{"class":325},[211,6019,466],{"class":340},[211,6021,6022],{"class":336}," Hono",[211,6024,472],{"class":340},[211,6026,475],{"class":325},[211,6028,400],{"class":340},[211,6030,5965],{"class":220},[211,6032,483],{"class":340},[211,6034,6035,6037,6039,6041,6043,6045,6047,6049],{"class":213,"line":371},[211,6036,463],{"class":325},[211,6038,466],{"class":340},[211,6040,1974],{"class":336},[211,6042,472],{"class":340},[211,6044,475],{"class":325},[211,6046,400],{"class":340},[211,6048,1983],{"class":220},[211,6050,483],{"class":340},[211,6052,6053,6055,6057,6059,6061,6063,6066,6068,6070,6072,6074],{"class":213,"line":382},[211,6054,463],{"class":325},[211,6056,466],{"class":340},[211,6058,3810],{"class":336},[211,6060,505],{"class":340},[211,6062,2087],{"class":325},[211,6064,6065],{"class":336}," EvlogVariables",[211,6067,472],{"class":340},[211,6069,475],{"class":325},[211,6071,400],{"class":340},[211,6073,5971],{"class":220},[211,6075,483],{"class":340},[211,6077,6078],{"class":213,"line":392},[211,6079,489],{"emptyLinePlaceholder":488},[211,6081,6082,6084,6086],{"class":213,"line":410},[211,6083,2014],{"class":332},[211,6085,337],{"class":336},[211,6087,341],{"class":340},[211,6089,6090,6092,6094,6096,6098,6100,6102,6105,6107],{"class":213,"line":416},[211,6091,5226],{"class":347},[211,6093,351],{"class":340},[211,6095,466],{"class":340},[211,6097,1230],{"class":347},[211,6099,351],{"class":340},[211,6101,400],{"class":340},[211,6103,6104],{"class":220},"hono-api",[211,6106,357],{"class":340},[211,6108,2732],{"class":340},[211,6110,6111,6113],{"class":213,"line":422},[211,6112,425],{"class":340},[211,6114,428],{"class":336},[211,6116,6117],{"class":213,"line":940},[211,6118,489],{"emptyLinePlaceholder":488},[211,6120,6121,6123,6125,6127,6129,6131,6134,6137,6140],{"class":213,"line":1276},[211,6122,4044],{"class":496},[211,6124,4047],{"class":336},[211,6126,621],{"class":340},[211,6128,4965],{"class":340},[211,6130,6022],{"class":332},[211,6132,6133],{"class":340},"\u003C",[211,6135,6136],{"class":217},"EvlogVariables",[211,6138,6139],{"class":340},">",[211,6141,839],{"class":336},[211,6143,6144],{"class":213,"line":1286},[211,6145,489],{"emptyLinePlaceholder":488},[211,6147,6148,6150,6152,6154,6156,6158],{"class":213,"line":1296},[211,6149,5275],{"class":336},[211,6151,673],{"class":340},[211,6153,5280],{"class":332},[211,6155,337],{"class":336},[211,6157,1983],{"class":332},[211,6159,5287],{"class":336},[211,6161,6162],{"class":213,"line":1302},[211,6163,489],{"emptyLinePlaceholder":488},[211,6165,6166,6168,6170,6172,6174,6176,6178,6180,6182,6184,6187,6189,6191],{"class":213,"line":2560},[211,6167,5275],{"class":336},[211,6169,673],{"class":340},[211,6171,906],{"class":332},[211,6173,337],{"class":336},[211,6175,357],{"class":340},[211,6177,5306],{"class":220},[211,6179,357],{"class":340},[211,6181,505],{"class":340},[211,6183,631],{"class":340},[211,6185,6186],{"class":634},"c",[211,6188,642],{"class":340},[211,6190,645],{"class":496},[211,6192,379],{"class":340},[211,6194,6195,6197,6199,6201,6204,6206,6208,6210,6212,6214,6216],{"class":213,"line":2606},[211,6196,652],{"class":496},[211,6198,513],{"class":336},[211,6200,523],{"class":340},[211,6202,6203],{"class":336}," c",[211,6205,673],{"class":340},[211,6207,906],{"class":332},[211,6209,337],{"class":347},[211,6211,357],{"class":340},[211,6213,1310],{"class":220},[211,6215,357],{"class":340},[211,6217,428],{"class":347},[211,6219,6220,6222,6224,6226,6228,6230,6232,6234,6236,6238,6240,6242,6244,6246],{"class":213,"line":2611},[211,6221,670],{"class":336},[211,6223,673],{"class":340},[211,6225,676],{"class":332},[211,6227,337],{"class":347},[211,6229,681],{"class":340},[211,6231,5346],{"class":347},[211,6233,351],{"class":340},[211,6235,466],{"class":340},[211,6237,5353],{"class":347},[211,6239,351],{"class":340},[211,6241,5358],{"class":2588},[211,6243,472],{"class":340},[211,6245,472],{"class":340},[211,6247,428],{"class":347},[211,6249,6250,6252,6254,6256,6258,6260,6262,6264,6266,6268,6270],{"class":213,"line":3600},[211,6251,711],{"class":325},[211,6253,6203],{"class":336},[211,6255,673],{"class":340},[211,6257,719],{"class":332},[211,6259,337],{"class":347},[211,6261,681],{"class":340},[211,6263,5346],{"class":347},[211,6265,351],{"class":340},[211,6267,5384],{"class":347},[211,6269,425],{"class":340},[211,6271,428],{"class":347},[211,6273,6274,6276],{"class":213,"line":3605},[211,6275,425],{"class":340},[211,6277,428],{"class":336},[211,6279,6280],{"class":213,"line":4589},[211,6281,489],{"emptyLinePlaceholder":488},[211,6283,6284,6287,6289,6291,6294,6296,6298,6300,6303,6305,6308,6310,6313,6315],{"class":213,"line":4594},[211,6285,6286],{"class":332},"serve",[211,6288,337],{"class":336},[211,6290,681],{"class":340},[211,6292,6293],{"class":347}," fetch",[211,6295,351],{"class":340},[211,6297,4070],{"class":336},[211,6299,673],{"class":340},[211,6301,6302],{"class":336},"fetch",[211,6304,505],{"class":340},[211,6306,6307],{"class":347}," port",[211,6309,351],{"class":340},[211,6311,6312],{"class":2588}," 3000",[211,6314,472],{"class":340},[211,6316,428],{"class":336},[188,6318,6319,6320,6323],{},"The ",[208,6321,6322],{},"evlog()"," middleware supports the same features as Nuxt/Next.js — drain adapters, enrichers, and tail sampling:",[200,6325,6326],{"className":315,"code":5418,"language":318,"meta":206,"style":206},[208,6327,6328,6346,6364,6368,6380,6384,6400,6418,6436,6444,6468,6472,6484,6500,6510,6534,6538,6554,6590,6594],{"__ignoreMap":206},[211,6329,6330,6332,6334,6336,6338,6340,6342,6344],{"class":213,"line":214},[211,6331,463],{"class":325},[211,6333,466],{"class":340},[211,6335,2383],{"class":336},[211,6337,472],{"class":340},[211,6339,475],{"class":325},[211,6341,400],{"class":340},[211,6343,2392],{"class":220},[211,6345,483],{"class":340},[211,6347,6348,6350,6352,6354,6356,6358,6360,6362],{"class":213,"line":344},[211,6349,463],{"class":325},[211,6351,466],{"class":340},[211,6353,5447],{"class":336},[211,6355,472],{"class":340},[211,6357,475],{"class":325},[211,6359,400],{"class":340},[211,6361,5456],{"class":220},[211,6363,483],{"class":340},[211,6365,6366],{"class":213,"line":371},[211,6367,489],{"emptyLinePlaceholder":488},[211,6369,6370,6372,6374,6376,6378],{"class":213,"line":382},[211,6371,4044],{"class":496},[211,6373,5469],{"class":336},[211,6375,621],{"class":340},[211,6377,5447],{"class":332},[211,6379,839],{"class":336},[211,6381,6382],{"class":213,"line":392},[211,6383,489],{"emptyLinePlaceholder":488},[211,6385,6386,6388,6390,6392,6394,6396,6398],{"class":213,"line":410},[211,6387,5275],{"class":336},[211,6389,673],{"class":340},[211,6391,5280],{"class":332},[211,6393,337],{"class":336},[211,6395,1983],{"class":332},[211,6397,337],{"class":336},[211,6399,341],{"class":340},[211,6401,6402,6404,6406,6408,6410,6412,6414,6416],{"class":213,"line":416},[211,6403,2461],{"class":347},[211,6405,351],{"class":340},[211,6407,354],{"class":336},[211,6409,357],{"class":340},[211,6411,2470],{"class":220},[211,6413,357],{"class":340},[211,6415,365],{"class":336},[211,6417,368],{"class":340},[211,6419,6420,6422,6424,6426,6428,6430,6432,6434],{"class":213,"line":422},[211,6421,5518],{"class":347},[211,6423,351],{"class":340},[211,6425,354],{"class":336},[211,6427,357],{"class":340},[211,6429,4427],{"class":220},[211,6431,357],{"class":340},[211,6433,365],{"class":336},[211,6435,368],{"class":340},[211,6437,6438,6440,6442],{"class":213,"line":940},[211,6439,5537],{"class":347},[211,6441,351],{"class":340},[211,6443,379],{"class":340},[211,6445,6446,6448,6450,6452,6454,6456,6458,6460,6462,6464,6466],{"class":213,"line":1276},[211,6447,5546],{"class":340},[211,6449,4450],{"class":347},[211,6451,357],{"class":340},[211,6453,351],{"class":340},[211,6455,466],{"class":340},[211,6457,1230],{"class":347},[211,6459,351],{"class":340},[211,6461,400],{"class":340},[211,6463,4465],{"class":220},[211,6465,357],{"class":340},[211,6467,2732],{"class":340},[211,6469,6470],{"class":213,"line":1286},[211,6471,419],{"class":340},[211,6473,6474,6476,6478,6480,6482],{"class":213,"line":1296},[211,6475,2481],{"class":347},[211,6477,351],{"class":340},[211,6479,2383],{"class":332},[211,6481,1360],{"class":336},[211,6483,368],{"class":340},[211,6485,6486,6488,6490,6492,6494,6496,6498],{"class":213,"line":1302},[211,6487,2494],{"class":332},[211,6489,351],{"class":340},[211,6491,631],{"class":340},[211,6493,2501],{"class":634},[211,6495,642],{"class":340},[211,6497,645],{"class":496},[211,6499,379],{"class":340},[211,6501,6502,6504,6506,6508],{"class":213,"line":2560},[211,6503,5603],{"class":332},[211,6505,337],{"class":347},[211,6507,2501],{"class":336},[211,6509,428],{"class":347},[211,6511,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530,6532],{"class":213,"line":2606},[211,6513,2512],{"class":336},[211,6515,673],{"class":340},[211,6517,2517],{"class":336},[211,6519,673],{"class":340},[211,6521,2522],{"class":336},[211,6523,523],{"class":340},[211,6525,2527],{"class":336},[211,6527,673],{"class":340},[211,6529,1531],{"class":336},[211,6531,673],{"class":340},[211,6533,2536],{"class":336},[211,6535,6536],{"class":213,"line":2611},[211,6537,419],{"class":340},[211,6539,6540,6542,6544,6546,6548,6550,6552],{"class":213,"line":3600},[211,6541,2545],{"class":332},[211,6543,351],{"class":340},[211,6545,631],{"class":340},[211,6547,2501],{"class":634},[211,6549,642],{"class":340},[211,6551,645],{"class":496},[211,6553,379],{"class":340},[211,6555,6556,6558,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584,6586,6588],{"class":213,"line":3605},[211,6557,2563],{"class":325},[211,6559,631],{"class":347},[211,6561,2501],{"class":336},[211,6563,673],{"class":340},[211,6565,2572],{"class":336},[211,6567,2575],{"class":340},[211,6569,2578],{"class":336},[211,6571,673],{"class":340},[211,6573,2572],{"class":336},[211,6575,2585],{"class":340},[211,6577,2589],{"class":2588},[211,6579,918],{"class":347},[211,6581,2501],{"class":336},[211,6583,673],{"class":340},[211,6585,2598],{"class":336},[211,6587,523],{"class":340},[211,6589,2603],{"class":731},[211,6591,6592],{"class":213,"line":4589},[211,6593,419],{"class":340},[211,6595,6596,6598],{"class":213,"line":4594},[211,6597,425],{"class":340},[211,6599,4979],{"class":336},[188,6601,6602,6603,6605,6606,673],{},"Use the ",[208,6604,6136],{}," type to get typed access to ",[208,6607,6608],{},"c.get('log')",[946,6610,2618,6611,2622],{"color":1886,"icon":1887},[299,6612,6613],{"href":168},"Hono example",[269,6615,172],{"id":6616},"fastify",[188,6618,6619,6620,3789,6623,3793,6626,3796],{},"evlog provides a Fastify plugin at ",[208,6621,6622],{},"evlog/fastify",[208,6624,6625],{},"request.log",[208,6627,1770],{},[200,6629,6631],{"className":202,"code":6630,"language":205,"meta":206,"style":206},"npm install evlog fastify\n",[208,6632,6633],{"__ignoreMap":206},[211,6634,6635,6637,6639,6641],{"class":213,"line":214},[211,6636,228],{"class":217},[211,6638,237],{"class":220},[211,6640,3810],{"class":220},[211,6642,6643],{"class":220}," fastify\n",[200,6645,6647],{"className":315,"code":6646,"filename":5156,"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,6648,6649,6664,6682,6700,6704,6712,6733,6739,6743,6770,6774,6788,6792,6822,6857,6871,6877,6881],{"__ignoreMap":206},[211,6650,6651,6653,6656,6658,6660,6662],{"class":213,"line":214},[211,6652,463],{"class":325},[211,6654,6655],{"class":336}," Fastify ",[211,6657,2668],{"class":325},[211,6659,400],{"class":340},[211,6661,6616],{"class":220},[211,6663,483],{"class":340},[211,6665,6666,6668,6670,6672,6674,6676,6678,6680],{"class":213,"line":344},[211,6667,463],{"class":325},[211,6669,466],{"class":340},[211,6671,1974],{"class":336},[211,6673,472],{"class":340},[211,6675,475],{"class":325},[211,6677,400],{"class":340},[211,6679,1983],{"class":220},[211,6681,483],{"class":340},[211,6683,6684,6686,6688,6690,6692,6694,6696,6698],{"class":213,"line":371},[211,6685,463],{"class":325},[211,6687,466],{"class":340},[211,6689,3810],{"class":336},[211,6691,472],{"class":340},[211,6693,475],{"class":325},[211,6695,400],{"class":340},[211,6697,6622],{"class":220},[211,6699,483],{"class":340},[211,6701,6702],{"class":213,"line":382},[211,6703,489],{"emptyLinePlaceholder":488},[211,6705,6706,6708,6710],{"class":213,"line":392},[211,6707,2014],{"class":332},[211,6709,337],{"class":336},[211,6711,341],{"class":340},[211,6713,6714,6716,6718,6720,6722,6724,6726,6729,6731],{"class":213,"line":410},[211,6715,5226],{"class":347},[211,6717,351],{"class":340},[211,6719,466],{"class":340},[211,6721,1230],{"class":347},[211,6723,351],{"class":340},[211,6725,400],{"class":340},[211,6727,6728],{"class":220},"fastify-api",[211,6730,357],{"class":340},[211,6732,2732],{"class":340},[211,6734,6735,6737],{"class":213,"line":416},[211,6736,425],{"class":340},[211,6738,428],{"class":336},[211,6740,6741],{"class":213,"line":422},[211,6742,489],{"emptyLinePlaceholder":488},[211,6744,6745,6747,6749,6751,6754,6756,6758,6761,6763,6766,6768],{"class":213,"line":940},[211,6746,4044],{"class":496},[211,6748,4047],{"class":336},[211,6750,621],{"class":340},[211,6752,6753],{"class":332}," Fastify",[211,6755,337],{"class":336},[211,6757,681],{"class":340},[211,6759,6760],{"class":347}," logger",[211,6762,351],{"class":340},[211,6764,6765],{"class":731}," false",[211,6767,472],{"class":340},[211,6769,428],{"class":336},[211,6771,6772],{"class":213,"line":1276},[211,6773,489],{"emptyLinePlaceholder":488},[211,6775,6776,6778,6780,6782,6785],{"class":213,"line":1286},[211,6777,4067],{"class":325},[211,6779,4070],{"class":336},[211,6781,673],{"class":340},[211,6783,6784],{"class":332},"register",[211,6786,6787],{"class":336},"(evlog)\n",[211,6789,6790],{"class":213,"line":1296},[211,6791,489],{"emptyLinePlaceholder":488},[211,6793,6794,6796,6798,6800,6802,6804,6806,6808,6810,6812,6814,6816,6818,6820],{"class":213,"line":1302},[211,6795,5275],{"class":336},[211,6797,673],{"class":340},[211,6799,906],{"class":332},[211,6801,337],{"class":336},[211,6803,357],{"class":340},[211,6805,5306],{"class":220},[211,6807,357],{"class":340},[211,6809,505],{"class":340},[211,6811,3460],{"class":496},[211,6813,631],{"class":340},[211,6815,635],{"class":634},[211,6817,642],{"class":340},[211,6819,645],{"class":496},[211,6821,379],{"class":340},[211,6823,6824,6827,6829,6831,6833,6835,6837,6839,6841,6843,6845,6847,6849,6851,6853,6855],{"class":213,"line":2560},[211,6825,6826],{"class":336},"  request",[211,6828,673],{"class":340},[211,6830,1310],{"class":336},[211,6832,673],{"class":340},[211,6834,676],{"class":332},[211,6836,337],{"class":347},[211,6838,681],{"class":340},[211,6840,5346],{"class":347},[211,6842,351],{"class":340},[211,6844,466],{"class":340},[211,6846,5353],{"class":347},[211,6848,351],{"class":340},[211,6850,5358],{"class":2588},[211,6852,472],{"class":340},[211,6854,472],{"class":340},[211,6856,428],{"class":347},[211,6858,6859,6861,6863,6865,6867,6869],{"class":213,"line":2606},[211,6860,711],{"class":325},[211,6862,466],{"class":340},[211,6864,5346],{"class":347},[211,6866,351],{"class":340},[211,6868,5384],{"class":347},[211,6870,1074],{"class":340},[211,6872,6873,6875],{"class":213,"line":2611},[211,6874,425],{"class":340},[211,6876,428],{"class":336},[211,6878,6879],{"class":213,"line":3600},[211,6880,489],{"emptyLinePlaceholder":488},[211,6882,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903],{"class":213,"line":3605},[211,6884,4067],{"class":325},[211,6886,4070],{"class":336},[211,6888,673],{"class":340},[211,6890,4075],{"class":332},[211,6892,337],{"class":336},[211,6894,681],{"class":340},[211,6896,6307],{"class":347},[211,6898,351],{"class":340},[211,6900,6312],{"class":2588},[211,6902,472],{"class":340},[211,6904,428],{"class":336},[188,6906,6907],{},"The plugin supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[200,6909,6911],{"className":315,"code":6910,"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,6912,6913,6931,6949,6953,6965,6969,6986,7004,7022,7030,7054,7058,7070,7086,7096,7120,7124,7140,7176,7180],{"__ignoreMap":206},[211,6914,6915,6917,6919,6921,6923,6925,6927,6929],{"class":213,"line":214},[211,6916,463],{"class":325},[211,6918,466],{"class":340},[211,6920,2383],{"class":336},[211,6922,472],{"class":340},[211,6924,475],{"class":325},[211,6926,400],{"class":340},[211,6928,2392],{"class":220},[211,6930,483],{"class":340},[211,6932,6933,6935,6937,6939,6941,6943,6945,6947],{"class":213,"line":344},[211,6934,463],{"class":325},[211,6936,466],{"class":340},[211,6938,5447],{"class":336},[211,6940,472],{"class":340},[211,6942,475],{"class":325},[211,6944,400],{"class":340},[211,6946,5456],{"class":220},[211,6948,483],{"class":340},[211,6950,6951],{"class":213,"line":371},[211,6952,489],{"emptyLinePlaceholder":488},[211,6954,6955,6957,6959,6961,6963],{"class":213,"line":382},[211,6956,4044],{"class":496},[211,6958,5469],{"class":336},[211,6960,621],{"class":340},[211,6962,5447],{"class":332},[211,6964,839],{"class":336},[211,6966,6967],{"class":213,"line":392},[211,6968,489],{"emptyLinePlaceholder":488},[211,6970,6971,6973,6975,6977,6979,6982,6984],{"class":213,"line":410},[211,6972,4067],{"class":325},[211,6974,4070],{"class":336},[211,6976,673],{"class":340},[211,6978,6784],{"class":332},[211,6980,6981],{"class":336},"(evlog",[211,6983,505],{"class":340},[211,6985,379],{"class":340},[211,6987,6988,6990,6992,6994,6996,6998,7000,7002],{"class":213,"line":416},[211,6989,2461],{"class":347},[211,6991,351],{"class":340},[211,6993,354],{"class":336},[211,6995,357],{"class":340},[211,6997,2470],{"class":220},[211,6999,357],{"class":340},[211,7001,365],{"class":336},[211,7003,368],{"class":340},[211,7005,7006,7008,7010,7012,7014,7016,7018,7020],{"class":213,"line":422},[211,7007,5518],{"class":347},[211,7009,351],{"class":340},[211,7011,354],{"class":336},[211,7013,357],{"class":340},[211,7015,4427],{"class":220},[211,7017,357],{"class":340},[211,7019,365],{"class":336},[211,7021,368],{"class":340},[211,7023,7024,7026,7028],{"class":213,"line":940},[211,7025,5537],{"class":347},[211,7027,351],{"class":340},[211,7029,379],{"class":340},[211,7031,7032,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052],{"class":213,"line":1276},[211,7033,5546],{"class":340},[211,7035,4450],{"class":347},[211,7037,357],{"class":340},[211,7039,351],{"class":340},[211,7041,466],{"class":340},[211,7043,1230],{"class":347},[211,7045,351],{"class":340},[211,7047,400],{"class":340},[211,7049,4465],{"class":220},[211,7051,357],{"class":340},[211,7053,2732],{"class":340},[211,7055,7056],{"class":213,"line":1286},[211,7057,419],{"class":340},[211,7059,7060,7062,7064,7066,7068],{"class":213,"line":1296},[211,7061,2481],{"class":347},[211,7063,351],{"class":340},[211,7065,2383],{"class":332},[211,7067,1360],{"class":336},[211,7069,368],{"class":340},[211,7071,7072,7074,7076,7078,7080,7082,7084],{"class":213,"line":1302},[211,7073,2494],{"class":332},[211,7075,351],{"class":340},[211,7077,631],{"class":340},[211,7079,2501],{"class":634},[211,7081,642],{"class":340},[211,7083,645],{"class":496},[211,7085,379],{"class":340},[211,7087,7088,7090,7092,7094],{"class":213,"line":2560},[211,7089,5603],{"class":332},[211,7091,337],{"class":347},[211,7093,2501],{"class":336},[211,7095,428],{"class":347},[211,7097,7098,7100,7102,7104,7106,7108,7110,7112,7114,7116,7118],{"class":213,"line":2606},[211,7099,2512],{"class":336},[211,7101,673],{"class":340},[211,7103,2517],{"class":336},[211,7105,673],{"class":340},[211,7107,2522],{"class":336},[211,7109,523],{"class":340},[211,7111,2527],{"class":336},[211,7113,673],{"class":340},[211,7115,1531],{"class":336},[211,7117,673],{"class":340},[211,7119,2536],{"class":336},[211,7121,7122],{"class":213,"line":2611},[211,7123,419],{"class":340},[211,7125,7126,7128,7130,7132,7134,7136,7138],{"class":213,"line":3600},[211,7127,2545],{"class":332},[211,7129,351],{"class":340},[211,7131,631],{"class":340},[211,7133,2501],{"class":634},[211,7135,642],{"class":340},[211,7137,645],{"class":496},[211,7139,379],{"class":340},[211,7141,7142,7144,7146,7148,7150,7152,7154,7156,7158,7160,7162,7164,7166,7168,7170,7172,7174],{"class":213,"line":3605},[211,7143,2563],{"class":325},[211,7145,631],{"class":347},[211,7147,2501],{"class":336},[211,7149,673],{"class":340},[211,7151,2572],{"class":336},[211,7153,2575],{"class":340},[211,7155,2578],{"class":336},[211,7157,673],{"class":340},[211,7159,2572],{"class":336},[211,7161,2585],{"class":340},[211,7163,2589],{"class":2588},[211,7165,918],{"class":347},[211,7167,2501],{"class":336},[211,7169,673],{"class":340},[211,7171,2598],{"class":336},[211,7173,523],{"class":340},[211,7175,2603],{"class":731},[211,7177,7178],{"class":213,"line":4589},[211,7179,419],{"class":340},[211,7181,7182,7184],{"class":213,"line":4594},[211,7183,425],{"class":340},[211,7185,428],{"class":336},[188,7187,4085,7188,7190],{},[208,7189,1770],{}," to access the logger from anywhere in the call stack:",[200,7192,7194],{"className":315,"code":7193,"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,7195,7196,7214,7218,7238,7250,7276],{"__ignoreMap":206},[211,7197,7198,7200,7202,7204,7206,7208,7210,7212],{"class":213,"line":214},[211,7199,463],{"class":325},[211,7201,466],{"class":340},[211,7203,508],{"class":336},[211,7205,472],{"class":340},[211,7207,475],{"class":325},[211,7209,400],{"class":340},[211,7211,6622],{"class":220},[211,7213,483],{"class":340},[211,7215,7216],{"class":213,"line":344},[211,7217,489],{"emptyLinePlaceholder":488},[211,7219,7220,7223,7226,7228,7230,7232,7234,7236],{"class":213,"line":371},[211,7221,7222],{"class":496},"function",[211,7224,7225],{"class":332}," findUser",[211,7227,337],{"class":340},[211,7229,2294],{"class":634},[211,7231,351],{"class":340},[211,7233,4221],{"class":217},[211,7235,642],{"class":340},[211,7237,379],{"class":340},[211,7239,7240,7242,7244,7246,7248],{"class":213,"line":382},[211,7241,652],{"class":496},[211,7243,513],{"class":336},[211,7245,523],{"class":340},[211,7247,508],{"class":332},[211,7249,839],{"class":347},[211,7251,7252,7254,7256,7258,7260,7262,7264,7266,7268,7270,7272,7274],{"class":213,"line":392},[211,7253,670],{"class":336},[211,7255,673],{"class":340},[211,7257,676],{"class":332},[211,7259,337],{"class":347},[211,7261,681],{"class":340},[211,7263,684],{"class":347},[211,7265,351],{"class":340},[211,7267,466],{"class":340},[211,7269,691],{"class":336},[211,7271,472],{"class":340},[211,7273,472],{"class":340},[211,7275,428],{"class":347},[211,7277,7278],{"class":213,"line":410},[211,7279,1074],{"class":340},[946,7281,7282,3151,7284,7286,7287,7290],{"color":948,"icon":13},[1958,7283,3150],{},[208,7285,6625],{}," is the evlog wide-event logger (shadows Fastify's built-in pino logger on the request). Fastify's pino logger remains accessible via ",[208,7288,7289],{},"fastify.log"," for server-level structured logging.",[946,7292,2618,7293,2622],{"color":1886,"icon":1887},[299,7294,7295],{"href":173},"Fastify example",[269,7297,177],{"id":7298},"elysia",[188,7300,7301,7302,3789,7305,7307,7308,7310],{},"evlog provides an Elysia plugin at ",[208,7303,7304],{},"evlog/elysia",[208,7306,1310],{}," in route context or ",[208,7309,1770],{}," and emits a wide event when the response completes.",[200,7312,7314],{"className":202,"code":7313,"language":205,"meta":206,"style":206},"bun add evlog elysia\n",[208,7315,7316],{"__ignoreMap":206},[211,7317,7318,7320,7322,7324],{"class":213,"line":214},[211,7319,257],{"class":217},[211,7321,221],{"class":220},[211,7323,3810],{"class":220},[211,7325,7326],{"class":220}," elysia\n",[200,7328,7330],{"className":315,"code":7329,"filename":5156,"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,7331,7332,7351,7369,7387,7391,7399,7420,7426,7430,7444,7457,7483,7513,7527,7533],{"__ignoreMap":206},[211,7333,7334,7336,7338,7341,7343,7345,7347,7349],{"class":213,"line":214},[211,7335,463],{"class":325},[211,7337,466],{"class":340},[211,7339,7340],{"class":336}," Elysia",[211,7342,472],{"class":340},[211,7344,475],{"class":325},[211,7346,400],{"class":340},[211,7348,7298],{"class":220},[211,7350,483],{"class":340},[211,7352,7353,7355,7357,7359,7361,7363,7365,7367],{"class":213,"line":344},[211,7354,463],{"class":325},[211,7356,466],{"class":340},[211,7358,1974],{"class":336},[211,7360,472],{"class":340},[211,7362,475],{"class":325},[211,7364,400],{"class":340},[211,7366,1983],{"class":220},[211,7368,483],{"class":340},[211,7370,7371,7373,7375,7377,7379,7381,7383,7385],{"class":213,"line":371},[211,7372,463],{"class":325},[211,7374,466],{"class":340},[211,7376,3810],{"class":336},[211,7378,472],{"class":340},[211,7380,475],{"class":325},[211,7382,400],{"class":340},[211,7384,7304],{"class":220},[211,7386,483],{"class":340},[211,7388,7389],{"class":213,"line":382},[211,7390,489],{"emptyLinePlaceholder":488},[211,7392,7393,7395,7397],{"class":213,"line":392},[211,7394,2014],{"class":332},[211,7396,337],{"class":336},[211,7398,341],{"class":340},[211,7400,7401,7403,7405,7407,7409,7411,7413,7416,7418],{"class":213,"line":410},[211,7402,5226],{"class":347},[211,7404,351],{"class":340},[211,7406,466],{"class":340},[211,7408,1230],{"class":347},[211,7410,351],{"class":340},[211,7412,400],{"class":340},[211,7414,7415],{"class":220},"elysia-api",[211,7417,357],{"class":340},[211,7419,2732],{"class":340},[211,7421,7422,7424],{"class":213,"line":416},[211,7423,425],{"class":340},[211,7425,428],{"class":336},[211,7427,7428],{"class":213,"line":422},[211,7429,489],{"emptyLinePlaceholder":488},[211,7431,7432,7434,7436,7438,7440,7442],{"class":213,"line":940},[211,7433,4044],{"class":496},[211,7435,4047],{"class":336},[211,7437,621],{"class":340},[211,7439,4965],{"class":340},[211,7441,7340],{"class":332},[211,7443,839],{"class":336},[211,7445,7446,7449,7451,7453,7455],{"class":213,"line":1276},[211,7447,7448],{"class":340},"  .",[211,7450,5280],{"class":332},[211,7452,337],{"class":336},[211,7454,1983],{"class":332},[211,7456,5287],{"class":336},[211,7458,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481],{"class":213,"line":1286},[211,7460,7448],{"class":340},[211,7462,906],{"class":332},[211,7464,337],{"class":336},[211,7466,357],{"class":340},[211,7468,5306],{"class":220},[211,7470,357],{"class":340},[211,7472,505],{"class":340},[211,7474,2246],{"class":340},[211,7476,513],{"class":634},[211,7478,1177],{"class":340},[211,7480,645],{"class":496},[211,7482,379],{"class":340},[211,7484,7485,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505,7507,7509,7511],{"class":213,"line":1296},[211,7486,4243],{"class":336},[211,7488,673],{"class":340},[211,7490,676],{"class":332},[211,7492,337],{"class":347},[211,7494,681],{"class":340},[211,7496,5346],{"class":347},[211,7498,351],{"class":340},[211,7500,466],{"class":340},[211,7502,5353],{"class":347},[211,7504,351],{"class":340},[211,7506,5358],{"class":2588},[211,7508,472],{"class":340},[211,7510,472],{"class":340},[211,7512,428],{"class":347},[211,7514,7515,7517,7519,7521,7523,7525],{"class":213,"line":1302},[211,7516,4270],{"class":325},[211,7518,466],{"class":340},[211,7520,5346],{"class":347},[211,7522,351],{"class":340},[211,7524,5384],{"class":347},[211,7526,1074],{"class":340},[211,7528,7529,7531],{"class":213,"line":2560},[211,7530,4748],{"class":340},[211,7532,428],{"class":336},[211,7534,7535,7537,7539,7541,7543],{"class":213,"line":2606},[211,7536,7448],{"class":340},[211,7538,4075],{"class":332},[211,7540,337],{"class":336},[211,7542,4080],{"class":2588},[211,7544,428],{"class":336},[188,7546,6907],{},[200,7548,7549],{"className":315,"code":5418,"language":318,"meta":206,"style":206},[208,7550,7551,7569,7587,7591,7603,7607,7623,7641,7659,7667,7691,7695,7707,7723,7733,7757,7761,7777,7813,7817],{"__ignoreMap":206},[211,7552,7553,7555,7557,7559,7561,7563,7565,7567],{"class":213,"line":214},[211,7554,463],{"class":325},[211,7556,466],{"class":340},[211,7558,2383],{"class":336},[211,7560,472],{"class":340},[211,7562,475],{"class":325},[211,7564,400],{"class":340},[211,7566,2392],{"class":220},[211,7568,483],{"class":340},[211,7570,7571,7573,7575,7577,7579,7581,7583,7585],{"class":213,"line":344},[211,7572,463],{"class":325},[211,7574,466],{"class":340},[211,7576,5447],{"class":336},[211,7578,472],{"class":340},[211,7580,475],{"class":325},[211,7582,400],{"class":340},[211,7584,5456],{"class":220},[211,7586,483],{"class":340},[211,7588,7589],{"class":213,"line":371},[211,7590,489],{"emptyLinePlaceholder":488},[211,7592,7593,7595,7597,7599,7601],{"class":213,"line":382},[211,7594,4044],{"class":496},[211,7596,5469],{"class":336},[211,7598,621],{"class":340},[211,7600,5447],{"class":332},[211,7602,839],{"class":336},[211,7604,7605],{"class":213,"line":392},[211,7606,489],{"emptyLinePlaceholder":488},[211,7608,7609,7611,7613,7615,7617,7619,7621],{"class":213,"line":410},[211,7610,5275],{"class":336},[211,7612,673],{"class":340},[211,7614,5280],{"class":332},[211,7616,337],{"class":336},[211,7618,1983],{"class":332},[211,7620,337],{"class":336},[211,7622,341],{"class":340},[211,7624,7625,7627,7629,7631,7633,7635,7637,7639],{"class":213,"line":416},[211,7626,2461],{"class":347},[211,7628,351],{"class":340},[211,7630,354],{"class":336},[211,7632,357],{"class":340},[211,7634,2470],{"class":220},[211,7636,357],{"class":340},[211,7638,365],{"class":336},[211,7640,368],{"class":340},[211,7642,7643,7645,7647,7649,7651,7653,7655,7657],{"class":213,"line":422},[211,7644,5518],{"class":347},[211,7646,351],{"class":340},[211,7648,354],{"class":336},[211,7650,357],{"class":340},[211,7652,4427],{"class":220},[211,7654,357],{"class":340},[211,7656,365],{"class":336},[211,7658,368],{"class":340},[211,7660,7661,7663,7665],{"class":213,"line":940},[211,7662,5537],{"class":347},[211,7664,351],{"class":340},[211,7666,379],{"class":340},[211,7668,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687,7689],{"class":213,"line":1276},[211,7670,5546],{"class":340},[211,7672,4450],{"class":347},[211,7674,357],{"class":340},[211,7676,351],{"class":340},[211,7678,466],{"class":340},[211,7680,1230],{"class":347},[211,7682,351],{"class":340},[211,7684,400],{"class":340},[211,7686,4465],{"class":220},[211,7688,357],{"class":340},[211,7690,2732],{"class":340},[211,7692,7693],{"class":213,"line":1286},[211,7694,419],{"class":340},[211,7696,7697,7699,7701,7703,7705],{"class":213,"line":1296},[211,7698,2481],{"class":347},[211,7700,351],{"class":340},[211,7702,2383],{"class":332},[211,7704,1360],{"class":336},[211,7706,368],{"class":340},[211,7708,7709,7711,7713,7715,7717,7719,7721],{"class":213,"line":1302},[211,7710,2494],{"class":332},[211,7712,351],{"class":340},[211,7714,631],{"class":340},[211,7716,2501],{"class":634},[211,7718,642],{"class":340},[211,7720,645],{"class":496},[211,7722,379],{"class":340},[211,7724,7725,7727,7729,7731],{"class":213,"line":2560},[211,7726,5603],{"class":332},[211,7728,337],{"class":347},[211,7730,2501],{"class":336},[211,7732,428],{"class":347},[211,7734,7735,7737,7739,7741,7743,7745,7747,7749,7751,7753,7755],{"class":213,"line":2606},[211,7736,2512],{"class":336},[211,7738,673],{"class":340},[211,7740,2517],{"class":336},[211,7742,673],{"class":340},[211,7744,2522],{"class":336},[211,7746,523],{"class":340},[211,7748,2527],{"class":336},[211,7750,673],{"class":340},[211,7752,1531],{"class":336},[211,7754,673],{"class":340},[211,7756,2536],{"class":336},[211,7758,7759],{"class":213,"line":2611},[211,7760,419],{"class":340},[211,7762,7763,7765,7767,7769,7771,7773,7775],{"class":213,"line":3600},[211,7764,2545],{"class":332},[211,7766,351],{"class":340},[211,7768,631],{"class":340},[211,7770,2501],{"class":634},[211,7772,642],{"class":340},[211,7774,645],{"class":496},[211,7776,379],{"class":340},[211,7778,7779,7781,7783,7785,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811],{"class":213,"line":3605},[211,7780,2563],{"class":325},[211,7782,631],{"class":347},[211,7784,2501],{"class":336},[211,7786,673],{"class":340},[211,7788,2572],{"class":336},[211,7790,2575],{"class":340},[211,7792,2578],{"class":336},[211,7794,673],{"class":340},[211,7796,2572],{"class":336},[211,7798,2585],{"class":340},[211,7800,2589],{"class":2588},[211,7802,918],{"class":347},[211,7804,2501],{"class":336},[211,7806,673],{"class":340},[211,7808,2598],{"class":336},[211,7810,523],{"class":340},[211,7812,2603],{"class":731},[211,7814,7815],{"class":213,"line":4589},[211,7816,419],{"class":340},[211,7818,7819,7821],{"class":213,"line":4594},[211,7820,425],{"class":340},[211,7822,4979],{"class":336},[188,7824,7825,7826,7829],{},"Handle errors with Elysia's ",[208,7827,7828],{},"onError"," hook (evlog captures them automatically):",[200,7831,7833],{"className":315,"code":7832,"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,7834,7835,7857,7861,7866,7878,7900,7945,7951,7974,7990,8008,8050],{"__ignoreMap":206},[211,7836,7837,7839,7841,7843,7845,7847,7849,7851,7853,7855],{"class":213,"line":214},[211,7838,463],{"class":325},[211,7840,466],{"class":340},[211,7842,5716],{"class":336},[211,7844,505],{"class":340},[211,7846,4826],{"class":336},[211,7848,472],{"class":340},[211,7850,475],{"class":325},[211,7852,400],{"class":340},[211,7854,1983],{"class":220},[211,7856,483],{"class":340},[211,7858,7859],{"class":213,"line":344},[211,7860,489],{"emptyLinePlaceholder":488},[211,7862,7863],{"class":213,"line":371},[211,7864,7865],{"class":336},"app\n",[211,7867,7868,7870,7872,7874,7876],{"class":213,"line":382},[211,7869,7448],{"class":340},[211,7871,5280],{"class":332},[211,7873,337],{"class":336},[211,7875,1983],{"class":332},[211,7877,5287],{"class":336},[211,7879,7880,7882,7884,7886,7888,7890,7892,7894,7896,7898],{"class":213,"line":392},[211,7881,7448],{"class":340},[211,7883,906],{"class":332},[211,7885,337],{"class":336},[211,7887,357],{"class":340},[211,7889,5749],{"class":220},[211,7891,357],{"class":340},[211,7893,505],{"class":340},[211,7895,3463],{"class":340},[211,7897,645],{"class":496},[211,7899,379],{"class":340},[211,7901,7902,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943],{"class":213,"line":410},[211,7903,7904],{"class":325},"    throw",[211,7906,5716],{"class":332},[211,7908,337],{"class":347},[211,7910,681],{"class":340},[211,7912,5773],{"class":347},[211,7914,351],{"class":340},[211,7916,400],{"class":340},[211,7918,5780],{"class":220},[211,7920,357],{"class":340},[211,7922,505],{"class":340},[211,7924,5787],{"class":347},[211,7926,351],{"class":340},[211,7928,5792],{"class":2588},[211,7930,505],{"class":340},[211,7932,5081],{"class":347},[211,7934,351],{"class":340},[211,7936,400],{"class":340},[211,7938,5803],{"class":220},[211,7940,357],{"class":340},[211,7942,472],{"class":340},[211,7944,428],{"class":347},[211,7946,7947,7949],{"class":213,"line":416},[211,7948,4748],{"class":340},[211,7950,428],{"class":336},[211,7952,7953,7955,7957,7959,7961,7963,7965,7968,7970,7972],{"class":213,"line":422},[211,7954,7448],{"class":340},[211,7956,7828],{"class":332},[211,7958,337],{"class":336},[211,7960,1154],{"class":340},[211,7962,4943],{"class":634},[211,7964,505],{"class":340},[211,7966,7967],{"class":634}," set",[211,7969,1177],{"class":340},[211,7971,645],{"class":496},[211,7973,379],{"class":340},[211,7975,7976,7978,7980,7982,7984,7986,7988],{"class":213,"line":940},[211,7977,4230],{"class":496},[211,7979,5023],{"class":336},[211,7981,523],{"class":340},[211,7983,4826],{"class":332},[211,7985,337],{"class":347},[211,7987,4999],{"class":336},[211,7989,428],{"class":347},[211,7991,7992,7995,7997,7999,8001,8003,8005],{"class":213,"line":1276},[211,7993,7994],{"class":336},"    set",[211,7996,673],{"class":340},[211,7998,5043],{"class":336},[211,8000,523],{"class":340},[211,8002,5023],{"class":336},[211,8004,673],{"class":340},[211,8006,8007],{"class":336},"status\n",[211,8009,8010,8012,8014,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8048],{"class":213,"line":1286},[211,8011,4270],{"class":325},[211,8013,466],{"class":340},[211,8015,5773],{"class":347},[211,8017,351],{"class":340},[211,8019,5023],{"class":336},[211,8021,673],{"class":340},[211,8023,5076],{"class":336},[211,8025,505],{"class":340},[211,8027,5081],{"class":347},[211,8029,351],{"class":340},[211,8031,5023],{"class":336},[211,8033,673],{"class":340},[211,8035,3631],{"class":336},[211,8037,505],{"class":340},[211,8039,5094],{"class":347},[211,8041,351],{"class":340},[211,8043,5023],{"class":336},[211,8045,673],{"class":340},[211,8047,3634],{"class":336},[211,8049,937],{"class":340},[211,8051,8052,8054],{"class":213,"line":1296},[211,8053,4748],{"class":340},[211,8055,428],{"class":336},[946,8057,2618,8058,2622],{"color":1886,"icon":1887},[299,8059,8060],{"href":178},"Elysia example",[269,8062,8064],{"id":8063},"cloudflare-workers","Cloudflare Workers",[188,8066,8067],{},"Use the Workers adapter for structured logs and correct platform severity.",[200,8069,8071],{"className":315,"code":8070,"filename":5156,"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",[208,8072,8073,8098,8102,8111,8132,8138,8142,8150,8170,8186,8190,8196,8224,8261,8288,8296,8310,8328,8351,8359,8363,8367],{"__ignoreMap":206},[211,8074,8075,8077,8079,8082,8084,8087,8089,8091,8093,8096],{"class":213,"line":214},[211,8076,463],{"class":325},[211,8078,466],{"class":340},[211,8080,8081],{"class":336}," initWorkersLogger",[211,8083,505],{"class":340},[211,8085,8086],{"class":336}," createWorkersLogger",[211,8088,472],{"class":340},[211,8090,475],{"class":325},[211,8092,400],{"class":340},[211,8094,8095],{"class":220},"evlog/workers",[211,8097,483],{"class":340},[211,8099,8100],{"class":213,"line":344},[211,8101,489],{"emptyLinePlaceholder":488},[211,8103,8104,8107,8109],{"class":213,"line":371},[211,8105,8106],{"class":332},"initWorkersLogger",[211,8108,337],{"class":336},[211,8110,341],{"class":340},[211,8112,8113,8115,8117,8119,8121,8123,8125,8128,8130],{"class":213,"line":382},[211,8114,5226],{"class":347},[211,8116,351],{"class":340},[211,8118,466],{"class":340},[211,8120,1230],{"class":347},[211,8122,351],{"class":340},[211,8124,400],{"class":340},[211,8126,8127],{"class":220},"edge-api",[211,8129,357],{"class":340},[211,8131,2732],{"class":340},[211,8133,8134,8136],{"class":213,"line":392},[211,8135,425],{"class":340},[211,8137,428],{"class":336},[211,8139,8140],{"class":213,"line":410},[211,8141,489],{"emptyLinePlaceholder":488},[211,8143,8144,8146,8148],{"class":213,"line":416},[211,8145,326],{"class":325},[211,8147,329],{"class":325},[211,8149,379],{"class":340},[211,8151,8152,8155,8157,8159,8161,8163,8166,8168],{"class":213,"line":422},[211,8153,8154],{"class":496},"  async",[211,8156,6293],{"class":347},[211,8158,337],{"class":340},[211,8160,635],{"class":634},[211,8162,351],{"class":340},[211,8164,8165],{"class":217}," Request",[211,8167,642],{"class":340},[211,8169,379],{"class":340},[211,8171,8172,8174,8176,8178,8180,8182,8184],{"class":213,"line":940},[211,8173,4230],{"class":496},[211,8175,513],{"class":336},[211,8177,523],{"class":340},[211,8179,8086],{"class":332},[211,8181,337],{"class":347},[211,8183,635],{"class":336},[211,8185,428],{"class":347},[211,8187,8188],{"class":213,"line":1276},[211,8189,489],{"emptyLinePlaceholder":488},[211,8191,8192,8194],{"class":213,"line":1286},[211,8193,4988],{"class":325},[211,8195,379],{"class":340},[211,8197,8198,8200,8202,8204,8206,8208,8211,8213,8215,8218,8220,8222],{"class":213,"line":1296},[211,8199,2141],{"class":336},[211,8201,673],{"class":340},[211,8203,676],{"class":332},[211,8205,337],{"class":347},[211,8207,681],{"class":340},[211,8209,8210],{"class":347}," route",[211,8212,351],{"class":340},[211,8214,400],{"class":340},[211,8216,8217],{"class":220},"health",[211,8219,357],{"class":340},[211,8221,472],{"class":340},[211,8223,428],{"class":347},[211,8225,8226,8229,8231,8233,8235,8237,8239,8241,8244,8246,8248,8250,8252,8254,8257,8259],{"class":213,"line":1302},[211,8227,8228],{"class":496},"      const",[211,8230,4918],{"class":336},[211,8232,523],{"class":340},[211,8234,4965],{"class":340},[211,8236,714],{"class":332},[211,8238,337],{"class":347},[211,8240,357],{"class":340},[211,8242,8243],{"class":220},"ok",[211,8245,357],{"class":340},[211,8247,505],{"class":340},[211,8249,466],{"class":340},[211,8251,5787],{"class":347},[211,8253,351],{"class":340},[211,8255,8256],{"class":2588}," 200",[211,8258,472],{"class":340},[211,8260,428],{"class":347},[211,8262,8263,8265,8267,8270,8272,8274,8276,8278,8280,8282,8284,8286],{"class":213,"line":2560},[211,8264,2141],{"class":336},[211,8266,673],{"class":340},[211,8268,8269],{"class":332},"emit",[211,8271,337],{"class":347},[211,8273,681],{"class":340},[211,8275,5787],{"class":347},[211,8277,351],{"class":340},[211,8279,4918],{"class":336},[211,8281,673],{"class":340},[211,8283,5043],{"class":336},[211,8285,472],{"class":340},[211,8287,428],{"class":347},[211,8289,8290,8293],{"class":213,"line":2606},[211,8291,8292],{"class":325},"      return",[211,8294,8295],{"class":336}," response\n",[211,8297,8298,8300,8302,8304,8306,8308],{"class":213,"line":2611},[211,8299,2737],{"class":340},[211,8301,5010],{"class":325},[211,8303,631],{"class":347},[211,8305,4999],{"class":336},[211,8307,918],{"class":347},[211,8309,341],{"class":340},[211,8311,8312,8314,8316,8318,8320,8322,8324,8326],{"class":213,"line":3600},[211,8313,2141],{"class":336},[211,8315,673],{"class":340},[211,8317,4999],{"class":332},[211,8319,337],{"class":347},[211,8321,4999],{"class":336},[211,8323,3503],{"class":325},[211,8325,4954],{"class":217},[211,8327,428],{"class":347},[211,8329,8330,8332,8334,8336,8338,8340,8342,8344,8347,8349],{"class":213,"line":3605},[211,8331,2141],{"class":336},[211,8333,673],{"class":340},[211,8335,8269],{"class":332},[211,8337,337],{"class":347},[211,8339,681],{"class":340},[211,8341,5787],{"class":347},[211,8343,351],{"class":340},[211,8345,8346],{"class":2588}," 500",[211,8348,472],{"class":340},[211,8350,428],{"class":347},[211,8352,8353,8356],{"class":213,"line":4589},[211,8354,8355],{"class":325},"      throw",[211,8357,8358],{"class":336}," error\n",[211,8360,8361],{"class":213,"line":4594},[211,8362,2151],{"class":340},[211,8364,8365],{"class":213,"line":4603},[211,8366,419],{"class":340},[211,8368,8369],{"class":213,"line":4610},[211,8370,1074],{"class":340},[188,8372,8373],{},"Disable invocation logs to avoid duplicate request logs:",[200,8375,8380],{"className":8376,"code":8377,"filename":8378,"language":8379,"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,8381,8382,8387],{"__ignoreMap":206},[211,8383,8384],{"class":213,"line":214},[211,8385,8386],{},"[observability.logs]\n",[211,8388,8389],{"class":213,"line":344},[211,8390,8391],{},"invocation_logs = false\n",[188,8393,8394],{},"Notes:",[8396,8397,8398,8408,8414],"ul",{},[8399,8400,8401,8403,8404,8407],"li",{},[208,8402,1083],{}," defaults to ",[208,8405,8406],{},"cf-ray"," when available",[8399,8409,8410,8413],{},[208,8411,8412],{},"request.cf"," is included (colo, country, asn) unless disabled",[8399,8415,4085,8416,8419],{},[208,8417,8418],{},"headerAllowlist"," to avoid logging sensitive headers",[946,8421,8422,8423,8429],{"color":1886,"icon":1887},"See the full ",[299,8424,8428],{"href":8425,"rel":8426},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[8427],"nofollow","workers example"," for a complete working project.",[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,1974],{"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,1983],{"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,2014],{"class":332},[211,8475,337],{"class":336},[211,8477,341],{"class":340},[211,8479,8480,8482,8484],{"class":213,"line":382},[211,8481,5226],{"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,4044],{"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,2294],{"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":2588}," 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,8269],{"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,1983],{"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,4044],{"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,6602,8754,8756,8757,8759,8760,8763,8764,8767],{},[208,8755,1644],{}," option in ",[208,8758,2014],{}," 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,2087],{"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,1983],{"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,1974],{"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,1983],{"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,2383],{"class":336},[211,8829,472],{"class":340},[211,8831,475],{"class":325},[211,8833,400],{"class":340},[211,8835,2392],{"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,4044],{"class":496},[211,8867,8868],{"class":336}," pipeline ",[211,8870,621],{"class":340},[211,8872,8846],{"class":332},[211,8874,6133],{"class":340},[211,8876,8877],{"class":217},"DrainContext",[211,8879,6139],{"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":2588}," 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,4044],{"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,5287],{"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,2014],{"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,5226],{"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,2732],{"class":340},[211,8971,8972,8974],{"class":213,"line":1286},[211,8973,2481],{"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":2560},[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":2606},[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":2611},[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":3600},[211,9025,4044],{"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":3605},[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":2588},[211,9098,472],{"class":340},[211,9100,428],{"class":336},[211,9102,9103,9105,9107,9109,9111],{"class":213,"line":4589},[211,9104,9082],{"class":336},[211,9106,673],{"class":340},[211,9108,8269],{"class":332},[211,9110,8624],{"class":336},[211,9112,9113],{"class":664},"// drained automatically\n",[211,9115,9116],{"class":213,"line":4594},[211,9117,489],{"emptyLinePlaceholder":488},[211,9119,9120],{"class":213,"line":4603},[211,9121,9122],{"class":664},"// Flush remaining events before exit\n",[211,9124,9125,9127,9130,9132,9135],{"class":213,"line":4610},[211,9126,4067],{"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,8422,9139,9144],{"color":1886,"icon":1887},[299,9140,9143],{"href":9141,"rel":9142},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[8427],"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 ",[1958,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,2470],{},"). 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,4085,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,2470],{"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,2700],{"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,2648],{"class":336},[211,9554,472],{"class":340},[211,9556,475],{"class":325},[211,9558,400],{"class":340},[211,9560,2632],{"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,2665],{"class":336},[211,9570,2668],{"class":325},[211,9572,400],{"class":340},[211,9574,2673],{"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,2648],{"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,2700],{"class":336},[211,9602,9603,9605,9607],{"class":213,"line":410},[211,9604,2705],{"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,4399],{"class":347},[211,9614,351],{"class":340},[211,9616,354],{"class":336},[211,9618,357],{"class":340},[211,9620,2470],{"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,4418],{"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,2737],{"class":340},[211,9650,428],{"class":336},[211,9652,9653,9655],{"class":213,"line":1276},[211,9654,2744],{"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,2915],{"class":336},[211,9678,472],{"class":340},[211,9680,475],{"class":325},[211,9682,400],{"class":340},[211,9684,2924],{"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,2665],{"class":336},[211,9694,2668],{"class":325},[211,9696,400],{"class":340},[211,9698,2939],{"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,2915],{"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,2700],{"class":336},[211,9726,9727,9729,9731],{"class":213,"line":410},[211,9728,2705],{"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,4399],{"class":347},[211,9738,351],{"class":340},[211,9740,354],{"class":336},[211,9742,357],{"class":340},[211,9744,2470],{"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,4418],{"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,2737],{"class":340},[211,9774,428],{"class":336},[211,9776,9777,9779],{"class":213,"line":1276},[211,9778,2744],{"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},[1958,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,4450],{"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,4465],{"class":220},[211,9907,357],{"class":340},[211,9909,2732],{"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,2732],{"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,2732],{"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,2648],{"class":336},[211,9990,472],{"class":340},[211,9992,475],{"class":325},[211,9994,400],{"class":340},[211,9996,2632],{"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,2665],{"class":336},[211,10006,2668],{"class":325},[211,10008,400],{"class":340},[211,10010,2673],{"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,2648],{"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,2700],{"class":336},[211,10038,10039,10041,10043],{"class":213,"line":410},[211,10040,2705],{"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,2714],{"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,2732],{"class":340},[211,10066,10067,10069,10071],{"class":213,"line":422},[211,10068,4438],{"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,4447],{"class":340},[211,10078,4450],{"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,4465],{"class":220},[211,10094,357],{"class":340},[211,10096,2732],{"class":340},[211,10098,10099,10101,10103,10105,10107,10109,10111,10113,10115,10117,10119],{"class":213,"line":1276},[211,10100,4447],{"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,2732],{"class":340},[211,10122,10123],{"class":213,"line":1286},[211,10124,3593],{"class":340},[211,10126,10127,10129],{"class":213,"line":1296},[211,10128,2737],{"class":340},[211,10130,428],{"class":336},[211,10132,10133,10135],{"class":213,"line":1302},[211,10134,2744],{"class":336},[211,10136,368],{"class":340},[211,10138,10139,10141],{"class":213,"line":2560},[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,2915],{"class":336},[211,10157,472],{"class":340},[211,10159,475],{"class":325},[211,10161,400],{"class":340},[211,10163,2924],{"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,2665],{"class":336},[211,10173,2668],{"class":325},[211,10175,400],{"class":340},[211,10177,2939],{"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,2915],{"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,2700],{"class":336},[211,10205,10206,10208,10210],{"class":213,"line":410},[211,10207,2705],{"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,2714],{"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,2732],{"class":340},[211,10233,10234,10236,10238],{"class":213,"line":422},[211,10235,4438],{"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,4447],{"class":340},[211,10245,4450],{"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,4465],{"class":220},[211,10261,357],{"class":340},[211,10263,2732],{"class":340},[211,10265,10266,10268,10270,10272,10274,10276,10278,10280,10282,10284,10286],{"class":213,"line":1276},[211,10267,4447],{"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,2732],{"class":340},[211,10289,10290],{"class":213,"line":1286},[211,10291,3593],{"class":340},[211,10293,10294,10296],{"class":213,"line":1296},[211,10295,2737],{"class":340},[211,10297,428],{"class":336},[211,10299,10300,10302],{"class":213,"line":1302},[211,10301,2744],{"class":336},[211,10303,368],{"class":340},[211,10305,10306,10308],{"class":213,"line":2560},[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 ",[1958,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":2588},[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":2588}," 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":2588}," 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":2588}," 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,3593],{"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,2648],{"class":336},[211,10492,472],{"class":340},[211,10494,475],{"class":325},[211,10496,400],{"class":340},[211,10498,2632],{"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,2665],{"class":336},[211,10508,2668],{"class":325},[211,10510,400],{"class":340},[211,10512,2673],{"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,2648],{"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,2700],{"class":336},[211,10540,10541,10543,10545],{"class":213,"line":410},[211,10542,2705],{"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":2588},[211,10573,505],{"class":340},[211,10575,10576],{"class":347}," warn",[211,10578,351],{"class":340},[211,10580,10424],{"class":2588},[211,10582,505],{"class":340},[211,10584,10585],{"class":347}," debug",[211,10587,351],{"class":340},[211,10589,10439],{"class":2588},[211,10591,2732],{"class":340},[211,10593,10594],{"class":213,"line":940},[211,10595,3593],{"class":340},[211,10597,10598,10600],{"class":213,"line":1276},[211,10599,2737],{"class":340},[211,10601,428],{"class":336},[211,10603,10604,10606],{"class":213,"line":1286},[211,10605,2744],{"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,2915],{"class":336},[211,10628,472],{"class":340},[211,10630,475],{"class":325},[211,10632,400],{"class":340},[211,10634,2924],{"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,2665],{"class":336},[211,10644,2668],{"class":325},[211,10646,400],{"class":340},[211,10648,2939],{"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,2915],{"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,2700],{"class":336},[211,10676,10677,10679,10681],{"class":213,"line":410},[211,10678,2705],{"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":2588},[211,10706,505],{"class":340},[211,10708,10576],{"class":347},[211,10710,351],{"class":340},[211,10712,10424],{"class":2588},[211,10714,505],{"class":340},[211,10716,10585],{"class":347},[211,10718,351],{"class":340},[211,10720,10439],{"class":2588},[211,10722,2732],{"class":340},[211,10724,10725],{"class":213,"line":940},[211,10726,3593],{"class":340},[211,10728,10729,10731],{"class":213,"line":1276},[211,10730,2737],{"class":340},[211,10732,428],{"class":336},[211,10734,10735,10737],{"class":213,"line":1286},[211,10736,2744],{"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",[1958,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 ",[1958,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":2588},[211,10804,2732],{"class":340},[211,10806,10807,10809,10811],{"class":213,"line":382},[211,10808,2545],{"class":217},[211,10810,351],{"class":340},[211,10812,2700],{"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":2588}," 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,5787],{"class":347},[211,10839,351],{"class":340},[211,10841,10842],{"class":2588}," 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,2744],{"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,2501],{"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,4230],{"class":496},[211,10968,684],{"class":336},[211,10970,523],{"class":340},[211,10972,2578],{"class":336},[211,10974,673],{"class":340},[211,10976,3496],{"class":336},[211,10978,673],{"class":340},[211,10980,10981],{"class":336},"user",[211,10983,3503],{"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,2563],{"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,2598],{"class":336},[211,11035,523],{"class":340},[211,11037,2603],{"class":731},[211,11039,11040],{"class":213,"line":416},[211,11041,2151],{"class":340},[211,11043,11044,11046],{"class":213,"line":422},[211,11045,4748],{"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":2588},[211,11146,2732],{"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,5787],{"class":347},[211,11161,351],{"class":340},[211,11163,10842],{"class":2588},[211,11165,10828],{"class":340},[211,11167,466],{"class":340},[211,11169,10820],{"class":347},[211,11171,351],{"class":340},[211,11173,10825],{"class":2588},[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,2545],{"class":332},[211,11189,351],{"class":340},[211,11191,631],{"class":340},[211,11193,2501],{"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,4230],{"class":496},[211,11205,684],{"class":336},[211,11207,523],{"class":340},[211,11209,2578],{"class":336},[211,11211,673],{"class":340},[211,11213,3496],{"class":336},[211,11215,673],{"class":340},[211,11217,10981],{"class":336},[211,11219,3503],{"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,2563],{"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,2501],{"class":336},[211,11251,673],{"class":340},[211,11253,2598],{"class":336},[211,11255,523],{"class":340},[211,11257,2603],{"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,3785,11274,435,11276,435,11278,435,11280,11282,11283,673],{},"The callback receives a ",[208,11272,11273],{},"TailSamplingContext",[208,11275,5043],{},[208,11277,2572],{},[208,11279,8639],{},[208,11281,8636],{},", and the full accumulated ",[208,11284,3496],{},[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 ",[1958,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,3460],{"class":496},[211,11349,631],{"class":340},[211,11351,2501],{"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,6293],{"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,4733],{"class":336},[211,11428,11429],{"class":340},"}`",[211,11431,2732],{"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,2501],{"class":336},[211,11452,673],{"class":340},[211,11454,2517],{"class":336},[211,11456,11457],{"class":347},"])",[211,11459,368],{"class":340},[211,11461,11462,11464],{"class":213,"line":416},[211,11463,2737],{"class":340},[211,11465,428],{"class":347},[211,11467,11468,11470],{"class":213,"line":422},[211,11469,4748],{"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,2383],{"class":336},[211,11510,472],{"class":340},[211,11512,475],{"class":325},[211,11514,400],{"class":340},[211,11516,2392],{"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,4044],{"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":2588},[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,2481],{"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,2527],{"class":336},[211,11657,673],{"class":340},[211,11659,1531],{"class":336},[211,11661,673],{"class":340},[211,11663,4733],{"class":336},[211,11665,11666],{"class":340},"!,\n",[211,11668,11669,11671,11674],{"class":213,"line":1296},[211,11670,4748],{"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:",[8396,11689,11690,11699,11710],{},[8399,11691,11692,11694,11695,11698],{},[208,11693,2517],{},": The complete ",[208,11696,11697],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[8399,11700,11701,11703,11704,435,11706,435,11708,642],{},[208,11702,635],{},": Optional request metadata (",[208,11705,8636],{},[208,11707,8639],{},[208,11709,1083],{},[8399,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},[1958,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,6319,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,2501],{"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,2563],{"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,4230],{"class":496},[211,11852,11853],{"class":336}," sessionId",[211,11855,523],{"class":340},[211,11857,2578],{"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,4230],{"class":496},[211,11882,11883],{"class":336}," distinctId",[211,11885,523],{"class":340},[211,11887,2578],{"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,2563],{"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":2560},[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":2606},[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":2611},[211,11977,11978],{"class":340},"        ...",[211,11980,2501],{"class":336},[211,11982,673],{"class":340},[211,11984,2517],{"class":336},[211,11986,368],{"class":340},[211,11988,11989,11992,11994,11996],{"class":213,"line":3600},[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":3605},[211,12001,3593],{"class":340},[211,12003,12004,12006],{"class":213,"line":4589},[211,12005,2737],{"class":340},[211,12007,428],{"class":347},[211,12009,12010,12012],{"class":213,"line":4594},[211,12011,4748],{"class":340},[211,12013,428],{"class":347},[211,12015,12016,12018],{"class":213,"line":4603},[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,5456],{"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,2700],{"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":2560},[211,12155,12156],{"class":347},"  ]\n",[211,12158,12159],{"class":213,"line":2606},[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":2611},[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,2501],{"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":3600},[211,12196,12197],{"class":325},"    for",[211,12199,631],{"class":347},[211,12201,4044],{"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,2501],{"class":336},[211,12220,428],{"class":347},[211,12222,12223,12225],{"class":213,"line":3605},[211,12224,4748],{"class":340},[211,12226,428],{"class":347},[211,12228,12229,12231],{"class":213,"line":4589},[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,5447],{"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,5456],{"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,4044],{"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,2494],{"class":332},[211,12353,351],{"class":340},[211,12355,631],{"class":340},[211,12357,2501],{"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,4044],{"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,2501],{"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,2512],{"class":336},[211,12393,673],{"class":340},[211,12395,2517],{"class":336},[211,12397,673],{"class":340},[211,12399,12400],{"class":336},"deploymentId",[211,12402,523],{"class":340},[211,12404,2527],{"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,2501],{"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,2512],{"class":336},[211,12566,673],{"class":340},[211,12568,2517],{"class":336},[211,12570,673],{"class":340},[211,12572,12400],{"class":336},[211,12574,523],{"class":340},[211,12576,2527],{"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,4748],{"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,2618,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",{},[8399,12883,12884,12885],{},"Client calls ",[208,12886,12887],{},"log.info({ action: 'click', button: 'submit' })",[8399,12889,12890,12891,12893],{},"Log is sent to ",[208,12892,12694],{}," via POST",[8399,12895,12896],{},"Server enriches with environment context (service, version, region, etc.)",[8399,12898,12899,12901,12902],{},[208,12900,1807],{}," hook is called with ",[208,12903,12904],{},"source: 'client'",[8399,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,3460],{"class":496},[211,12978,631],{"class":340},[211,12980,2501],{"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,2563],{"class":325},[211,12992,631],{"class":347},[211,12994,2501],{"class":336},[211,12996,673],{"class":340},[211,12998,2517],{"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,2578],{"class":336},[211,13040,673],{"class":340},[211,13042,2517],{"class":336},[211,13044,428],{"class":347},[211,13046,13047],{"class":213,"line":392},[211,13048,2151],{"class":340},[211,13050,13051,13053],{"class":213,"line":410},[211,13052,4748],{"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,2294],{"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,4748],{"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,2156],{"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],{},[1958,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,2732],{"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,2705],{"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,6765],{"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":2588},[211,13646,505],{"class":340},[211,13648,10576],{"class":347},[211,13650,351],{"class":340},[211,13652,10424],{"class":2588},[211,13654,505],{"class":340},[211,13656,10585],{"class":347},[211,13658,351],{"class":340},[211,13660,13661],{"class":2588}," 0",[211,13663,2732],{"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":2588},[211,13682,10828],{"class":340},[211,13684,466],{"class":340},[211,13686,5787],{"class":347},[211,13688,351],{"class":340},[211,13690,10842],{"class":2588},[211,13692,472],{"class":340},[211,13694,365],{"class":336},[211,13696,368],{"class":340},[211,13698,13699],{"class":213,"line":1296},[211,13700,3593],{"class":340},[211,13702,13703],{"class":213,"line":1302},[211,13704,413],{"class":340},[211,13706,13707],{"class":213,"line":2560},[211,13708,419],{"class":340},[211,13710,13711,13713],{"class":213,"line":2606},[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",[8396,13731,13732,13737],{},[8399,13733,13734,13736],{},[299,13735,20],{"href":21}," - Learn the core concepts and start using evlog",[8399,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":147},{"id":2625,"depth":371,"text":2626},{"id":2894,"depth":371,"text":2895},{"id":3169,"depth":371,"text":152},{"id":3778,"depth":371,"text":157},{"id":5126,"depth":371,"text":162},{"id":5965,"depth":371,"text":167},{"id":6616,"depth":371,"text":172},{"id":7298,"depth":371,"text":177},{"id":8063,"depth":371,"text":8064},{"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, SvelteKit, Nitro, NestJS, or any 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},"191XeL8afhiqYaLWpFQRn8M-GY4r43Y38xjnuNxYo_I",[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.",1772900816055]