[{"data":1,"prerenderedAt":13802},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":191,"-getting-started-installation-surround":13797},[4,30,65,115,132,146],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"icon":54},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields","i-simple-icons-typescript",{"title":56,"path":57,"stem":58,"icon":59},"Sampling","/core-concepts/sampling","2.core-concepts/5.sampling","i-lucide-filter",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","/core-concepts/client-logging","2.core-concepts/6.client-logging","i-lucide-monitor",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Adapters","/adapters","3.adapters",[70,75,80,85,90,95,100,105,110],{"title":71,"path":72,"stem":73,"icon":74},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":76,"path":77,"stem":78,"icon":79},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":81,"path":82,"stem":83,"icon":84},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":86,"path":87,"stem":88,"icon":89},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":91,"path":92,"stem":93,"icon":94},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":96,"path":97,"stem":98,"icon":99},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":101,"path":102,"stem":103,"icon":104},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":106,"path":107,"stem":108,"icon":109},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":111,"path":112,"stem":113,"icon":114},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Enrichers","/enrichers","4.enrichers",[120,123,128],{"title":71,"path":121,"stem":122,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":124,"path":125,"stem":126,"icon":127},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":129,"path":130,"stem":131,"icon":104},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":133,"path":134,"stem":135,"children":136,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[137,141],{"title":71,"path":138,"stem":139,"icon":140},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":142,"path":143,"stem":144,"icon":145},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":147,"path":148,"stem":149,"children":150,"page":29},"Examples","/examples","6.examples",[151,156,161,166,171,176,181,186],{"title":152,"path":153,"stem":154,"icon":155},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":157,"path":158,"stem":159,"icon":160},"SvelteKit","/examples/sveltekit","6.examples/2.sveltekit","i-simple-icons-svelte",{"title":162,"path":163,"stem":164,"icon":165},"TanStack Start","/examples/tanstack-start","6.examples/3.tanstack-start","i-custom-tanstack",{"title":167,"path":168,"stem":169,"icon":170},"NestJS","/examples/nestjs","6.examples/4.nestjs","i-simple-icons-nestjs",{"title":172,"path":173,"stem":174,"icon":175},"Express","/examples/express","6.examples/5.express","i-simple-icons-express",{"title":177,"path":178,"stem":179,"icon":180},"Hono","/examples/hono","6.examples/6.hono","i-simple-icons-hono",{"title":182,"path":183,"stem":184,"icon":185},"Fastify","/examples/fastify","6.examples/7.fastify","i-simple-icons-fastify",{"title":187,"path":188,"stem":189,"icon":190},"Elysia","/examples/elysia","6.examples/8.elysia","i-custom-elysia",{"id":192,"title":193,"body":194,"description":13788,"extension":13789,"links":13790,"meta":13793,"navigation":13794,"path":16,"seo":13795,"stem":17,"__hash__":13796},"docs/1.getting-started/2.installation.md","Install evlog",{"type":195,"value":196,"toc":13756},"minimark",[197,201,206,278,283,286,305,312,316,320,323,439,454,457,463,561,567,753,758,763,955,978,982,999,1085,1095,1108,1112,1118,1315,1322,1443,1447,1452,1727,1731,1894,1903,1906,1927,1965,1970,2080,2085,2182,2187,2339,2344,2626,2633,2637,2644,2763,2768,2902,2906,2912,3022,3026,3156,3177,3180,3193,3205,3336,3347,3620,3632,3649,3780,3786,3789,3807,3830,3837,3945,3948,4093,4099,4309,4312,4636,4646,4769,4777,5129,5134,5137,5147,5163,5423,5426,5710,5713,5968,5973,5976,5983,5999,6327,6334,6610,6619,6624,6627,6638,6654,6915,6918,7196,7201,7290,7301,7306,7309,7321,7337,7555,7557,7833,7840,8066,8071,8075,8078,8381,8384,8402,8405,8430,8440,8444,8447,8638,8651,8664,8751,8758,8762,8778,9147,9155,9159,9166,9390,9404,9408,9415,9796,9807,9811,9814,10319,10330,10333,10336,10340,10347,10754,10768,10772,10779,10887,10894,10898,10907,11277,11294,11298,11305,11691,11697,11725,11750,11754,11759,12029,12033,12036,12433,12509,12512,12607,12613,12616,12626,12884,12888,12917,12930,12936,13070,13074,13081,13307,13317,13320,13379,13383,13386,13522,13724,13728,13731,13735,13739,13752],[198,199,200],"p",{},"evlog supports multiple environments: Nuxt, Next.js, SvelteKit, Nitro, NestJS, and any TypeScript server framework.",[202,203,205],"h2",{"id":204},"install","Install",[207,208,209,235,250,264],"code-group",{},[210,211,217],"pre",{"className":212,"code":213,"filename":214,"language":215,"meta":216,"style":216},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[218,219,220],"code",{"__ignoreMap":216},[221,222,225,228,232],"span",{"class":223,"line":224},"line",1,[221,226,214],{"class":227},"sBMFI",[221,229,231],{"class":230},"sfazB"," add",[221,233,234],{"class":230}," evlog\n",[210,236,239],{"className":212,"code":237,"filename":238,"language":215,"meta":216,"style":216},"npm install evlog\n","npm",[218,240,241],{"__ignoreMap":216},[221,242,243,245,248],{"class":223,"line":224},[221,244,238],{"class":227},[221,246,247],{"class":230}," install",[221,249,234],{"class":230},[210,251,254],{"className":212,"code":252,"filename":253,"language":215,"meta":216,"style":216},"yarn add evlog\n","yarn",[218,255,256],{"__ignoreMap":216},[221,257,258,260,262],{"class":223,"line":224},[221,259,253],{"class":227},[221,261,231],{"class":230},[221,263,234],{"class":230},[210,265,268],{"className":212,"code":266,"filename":267,"language":215,"meta":216,"style":216},"bun add evlog\n","bun",[218,269,270],{"__ignoreMap":216},[221,271,272,274,276],{"class":223,"line":224},[221,273,267],{"class":227},[221,275,231],{"class":230},[221,277,234],{"class":230},[279,280,282],"h3",{"id":281},"using-agent-skills","Using Agent Skills",[198,284,285],{},"If you use an AI assistant (Claude Code, Cursor, etc.), install the evlog skill for guided setup and code review:",[210,287,290],{"className":212,"code":288,"filename":289,"language":215,"meta":216,"style":216},"npx skills add hugorcd/evlog\n","Terminal",[218,291,292],{"__ignoreMap":216},[221,293,294,297,300,302],{"class":223,"line":224},[221,295,296],{"class":227},"npx",[221,298,299],{"class":230}," skills",[221,301,231],{"class":230},[221,303,304],{"class":230}," hugorcd/evlog\n",[198,306,307,308,311],{},"Your AI assistant can then help you set up evlog, review your logging patterns, and migrate existing code to wide events. See ",[309,310,25],"a",{"href":26}," for details.",[202,313,315],{"id":314},"setup","Setup",[279,317,319],{"id":318},"nuxt","Nuxt",[198,321,322],{},"Add evlog to your Nuxt config:",[210,324,329],{"className":325,"code":326,"filename":327,"language":328,"meta":216,"style":216},"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",[218,330,331,352,379,390,400,418,424,430],{"__ignoreMap":216},[221,332,333,337,340,344,348],{"class":223,"line":224},[221,334,336],{"class":335},"s7zQu","export",[221,338,339],{"class":335}," default",[221,341,343],{"class":342},"s2Zo4"," defineNuxtConfig",[221,345,347],{"class":346},"sTEyZ","(",[221,349,351],{"class":350},"sMK4o","{\n",[221,353,355,359,362,365,368,371,373,376],{"class":223,"line":354},2,[221,356,358],{"class":357},"swJcz","  modules",[221,360,361],{"class":350},":",[221,363,364],{"class":346}," [",[221,366,367],{"class":350},"'",[221,369,370],{"class":230},"evlog/nuxt",[221,372,367],{"class":350},[221,374,375],{"class":346},"]",[221,377,378],{"class":350},",\n",[221,380,382,385,387],{"class":223,"line":381},3,[221,383,384],{"class":357},"  evlog",[221,386,361],{"class":350},[221,388,389],{"class":350}," {\n",[221,391,393,396,398],{"class":223,"line":392},4,[221,394,395],{"class":357},"    env",[221,397,361],{"class":350},[221,399,389],{"class":350},[221,401,403,406,408,411,414,416],{"class":223,"line":402},5,[221,404,405],{"class":357},"      service",[221,407,361],{"class":350},[221,409,410],{"class":350}," '",[221,412,413],{"class":230},"my-app",[221,415,367],{"class":350},[221,417,378],{"class":350},[221,419,421],{"class":223,"line":420},6,[221,422,423],{"class":350},"    },\n",[221,425,427],{"class":223,"line":426},7,[221,428,429],{"class":350},"  },\n",[221,431,433,436],{"class":223,"line":432},8,[221,434,435],{"class":350},"}",[221,437,438],{"class":346},")\n",[198,440,441,442,445,446,449,450,453],{},"That's it. ",[218,443,444],{},"useLogger",", ",[218,447,448],{},"createError",", and ",[218,451,452],{},"parseError"," are auto-imported.",[279,455,152],{"id":456},"nextjs",[198,458,459,460,361],{},"Create a shared evlog instance with ",[218,461,462],{},"createEvlog()",[210,464,467],{"className":325,"code":465,"filename":466,"language":328,"meta":216,"style":216},"import { createEvlog } from 'evlog/next'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib/evlog.ts",[218,468,469,494,500,540,555],{"__ignoreMap":216},[221,470,471,474,477,480,483,486,488,491],{"class":223,"line":224},[221,472,473],{"class":335},"import",[221,475,476],{"class":350}," {",[221,478,479],{"class":346}," createEvlog",[221,481,482],{"class":350}," }",[221,484,485],{"class":335}," from",[221,487,410],{"class":350},[221,489,490],{"class":230},"evlog/next",[221,492,493],{"class":350},"'\n",[221,495,496],{"class":223,"line":354},[221,497,499],{"emptyLinePlaceholder":498},true,"\n",[221,501,502,504,508,510,513,516,519,521,524,526,529,531,534,536,538],{"class":223,"line":381},[221,503,336],{"class":335},[221,505,507],{"class":506},"spNyl"," const",[221,509,476],{"class":350},[221,511,512],{"class":346}," withEvlog",[221,514,515],{"class":350},",",[221,517,518],{"class":346}," useLogger",[221,520,515],{"class":350},[221,522,523],{"class":346}," log",[221,525,515],{"class":350},[221,527,528],{"class":346}," createError ",[221,530,435],{"class":350},[221,532,533],{"class":350}," =",[221,535,479],{"class":342},[221,537,347],{"class":346},[221,539,351],{"class":350},[221,541,542,545,547,549,551,553],{"class":223,"line":392},[221,543,544],{"class":357},"  service",[221,546,361],{"class":350},[221,548,410],{"class":350},[221,550,413],{"class":230},[221,552,367],{"class":350},[221,554,378],{"class":350},[221,556,557,559],{"class":223,"line":402},[221,558,435],{"class":350},[221,560,438],{"class":346},[198,562,563,564,361],{},"Wrap your route handlers with ",[218,565,566],{},"withEvlog()",[210,568,571],{"className":325,"code":569,"filename":570,"language":328,"meta":216,"style":216},"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",[218,572,573,593,616,620,658,676,717,747],{"__ignoreMap":216},[221,574,575,577,579,582,584,586,588,591],{"class":223,"line":224},[221,576,473],{"class":335},[221,578,476],{"class":350},[221,580,581],{"class":346}," NextRequest",[221,583,482],{"class":350},[221,585,485],{"class":335},[221,587,410],{"class":350},[221,589,590],{"class":230},"next/server",[221,592,493],{"class":350},[221,594,595,597,599,601,603,605,607,609,611,614],{"class":223,"line":354},[221,596,473],{"class":335},[221,598,476],{"class":350},[221,600,512],{"class":346},[221,602,515],{"class":350},[221,604,518],{"class":346},[221,606,482],{"class":350},[221,608,485],{"class":335},[221,610,410],{"class":350},[221,612,613],{"class":230},"@/lib/evlog",[221,615,493],{"class":350},[221,617,618],{"class":223,"line":381},[221,619,499],{"emptyLinePlaceholder":498},[221,621,622,624,626,629,632,634,636,639,642,646,648,650,653,656],{"class":223,"line":392},[221,623,336],{"class":335},[221,625,507],{"class":506},[221,627,628],{"class":346}," POST ",[221,630,631],{"class":350},"=",[221,633,512],{"class":342},[221,635,347],{"class":346},[221,637,638],{"class":506},"async",[221,640,641],{"class":350}," (",[221,643,645],{"class":644},"sHdIc","request",[221,647,361],{"class":350},[221,649,581],{"class":227},[221,651,652],{"class":350},")",[221,654,655],{"class":506}," =>",[221,657,389],{"class":350},[221,659,660,663,665,667,669,672],{"class":223,"line":402},[221,661,662],{"class":506},"  const",[221,664,523],{"class":346},[221,666,533],{"class":350},[221,668,518],{"class":342},[221,670,671],{"class":357},"()  ",[221,673,675],{"class":674},"sHwdD","// Zero arguments — AsyncLocalStorage\n",[221,677,678,681,684,687,689,692,695,697,699,702,704,706,709,711,713,715],{"class":223,"line":420},[221,679,680],{"class":346},"  log",[221,682,683],{"class":350},".",[221,685,686],{"class":342},"set",[221,688,347],{"class":357},[221,690,691],{"class":350},"{",[221,693,694],{"class":357}," user",[221,696,361],{"class":350},[221,698,476],{"class":350},[221,700,701],{"class":357}," id",[221,703,361],{"class":350},[221,705,410],{"class":350},[221,707,708],{"class":230},"123",[221,710,367],{"class":350},[221,712,482],{"class":350},[221,714,482],{"class":350},[221,716,438],{"class":357},[221,718,719,722,725,727,730,732,734,737,739,743,745],{"class":223,"line":426},[221,720,721],{"class":335},"  return",[221,723,724],{"class":346}," Response",[221,726,683],{"class":350},[221,728,729],{"class":342},"json",[221,731,347],{"class":357},[221,733,691],{"class":350},[221,735,736],{"class":357}," success",[221,738,361],{"class":350},[221,740,742],{"class":741},"sfNiH"," true",[221,744,482],{"class":350},[221,746,438],{"class":357},[221,748,749,751],{"class":223,"line":432},[221,750,435],{"class":350},[221,752,438],{"class":346},[754,755,757],"h4",{"id":756},"server-actions","Server Actions",[198,759,760,762],{},[218,761,566],{}," works with server actions — just wrap the function:",[210,764,767],{"className":325,"code":765,"filename":766,"language":328,"meta":216,"style":216},"'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",[218,768,769,778,800,804,837,850,892,933,948],{"__ignoreMap":216},[221,770,771,773,776],{"class":223,"line":224},[221,772,367],{"class":350},[221,774,775],{"class":230},"use server",[221,777,493],{"class":350},[221,779,780,782,784,786,788,790,792,794,796,798],{"class":223,"line":354},[221,781,473],{"class":335},[221,783,476],{"class":350},[221,785,512],{"class":346},[221,787,515],{"class":350},[221,789,518],{"class":346},[221,791,482],{"class":350},[221,793,485],{"class":335},[221,795,410],{"class":350},[221,797,613],{"class":230},[221,799,493],{"class":350},[221,801,802],{"class":223,"line":381},[221,803,499],{"emptyLinePlaceholder":498},[221,805,806,808,810,813,815,817,819,821,823,826,828,831,833,835],{"class":223,"line":392},[221,807,336],{"class":335},[221,809,507],{"class":506},[221,811,812],{"class":346}," checkout ",[221,814,631],{"class":350},[221,816,512],{"class":342},[221,818,347],{"class":346},[221,820,638],{"class":506},[221,822,641],{"class":350},[221,824,825],{"class":644},"formData",[221,827,361],{"class":350},[221,829,830],{"class":227}," FormData",[221,832,652],{"class":350},[221,834,655],{"class":506},[221,836,389],{"class":350},[221,838,839,841,843,845,847],{"class":223,"line":402},[221,840,662],{"class":506},[221,842,523],{"class":346},[221,844,533],{"class":350},[221,846,518],{"class":342},[221,848,849],{"class":357},"()\n",[221,851,852,854,856,858,860,862,865,867,869,872,874,876,879,881,883,886,888,890],{"class":223,"line":420},[221,853,680],{"class":346},[221,855,683],{"class":350},[221,857,686],{"class":342},[221,859,347],{"class":357},[221,861,691],{"class":350},[221,863,864],{"class":357}," action",[221,866,361],{"class":350},[221,868,410],{"class":350},[221,870,871],{"class":230},"checkout",[221,873,367],{"class":350},[221,875,515],{"class":350},[221,877,878],{"class":357}," source",[221,880,361],{"class":350},[221,882,410],{"class":350},[221,884,885],{"class":230},"server-action",[221,887,367],{"class":350},[221,889,482],{"class":350},[221,891,438],{"class":357},[221,893,894,896,898,900,902,904,907,909,912,914,917,919,921,924,926,929,931],{"class":223,"line":426},[221,895,680],{"class":346},[221,897,683],{"class":350},[221,899,686],{"class":342},[221,901,347],{"class":357},[221,903,691],{"class":350},[221,905,906],{"class":357}," item",[221,908,361],{"class":350},[221,910,911],{"class":346}," formData",[221,913,683],{"class":350},[221,915,916],{"class":342},"get",[221,918,347],{"class":357},[221,920,367],{"class":350},[221,922,923],{"class":230},"item",[221,925,367],{"class":350},[221,927,928],{"class":357},") ",[221,930,435],{"class":350},[221,932,438],{"class":357},[221,934,935,937,939,941,943,945],{"class":223,"line":432},[221,936,721],{"class":335},[221,938,476],{"class":350},[221,940,736],{"class":357},[221,942,361],{"class":350},[221,944,742],{"class":741},[221,946,947],{"class":350}," }\n",[221,949,951,953],{"class":223,"line":950},9,[221,952,435],{"class":350},[221,954,438],{"class":346},[956,957,959,960,445,963,965,966,969,970,973,974,977],"callout",{"color":958,"icon":13},"info","When the first argument is not a ",[218,961,962],{},"Request",[218,964,566],{}," still creates a logger but with ",[218,967,968],{},"method: 'UNKNOWN'"," and ",[218,971,972],{},"path: '/'",". Use ",[218,975,976],{},"log.set()"," to add context.",[754,979,981],{"id":980},"middleware","Middleware",[198,983,984,985,988,989,969,992,995,996,998],{},"The optional ",[218,986,987],{},"evlogMiddleware()"," sets ",[218,990,991],{},"x-request-id",[218,993,994],{},"x-evlog-start"," headers so ",[218,997,566],{}," can reuse them for consistent timing and request correlation across the middleware → handler chain.",[210,1000,1003],{"className":325,"code":1001,"filename":1002,"language":328,"meta":216,"style":216},"import { evlogMiddleware } from 'evlog/next'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['/api/:path*'],\n}\n","proxy.ts",[218,1004,1005,1024,1028,1043,1047,1060,1080],{"__ignoreMap":216},[221,1006,1007,1009,1011,1014,1016,1018,1020,1022],{"class":223,"line":224},[221,1008,473],{"class":335},[221,1010,476],{"class":350},[221,1012,1013],{"class":346}," evlogMiddleware",[221,1015,482],{"class":350},[221,1017,485],{"class":335},[221,1019,410],{"class":350},[221,1021,490],{"class":230},[221,1023,493],{"class":350},[221,1025,1026],{"class":223,"line":354},[221,1027,499],{"emptyLinePlaceholder":498},[221,1029,1030,1032,1034,1037,1039,1041],{"class":223,"line":381},[221,1031,336],{"class":335},[221,1033,507],{"class":506},[221,1035,1036],{"class":346}," proxy ",[221,1038,631],{"class":350},[221,1040,1013],{"class":342},[221,1042,849],{"class":346},[221,1044,1045],{"class":223,"line":392},[221,1046,499],{"emptyLinePlaceholder":498},[221,1048,1049,1051,1053,1056,1058],{"class":223,"line":402},[221,1050,336],{"class":335},[221,1052,507],{"class":506},[221,1054,1055],{"class":346}," config ",[221,1057,631],{"class":350},[221,1059,389],{"class":350},[221,1061,1062,1065,1067,1069,1071,1074,1076,1078],{"class":223,"line":420},[221,1063,1064],{"class":357},"  matcher",[221,1066,361],{"class":350},[221,1068,364],{"class":346},[221,1070,367],{"class":350},[221,1072,1073],{"class":230},"/api/:path*",[221,1075,367],{"class":350},[221,1077,375],{"class":346},[221,1079,378],{"class":350},[221,1081,1082],{"class":223,"line":426},[221,1083,1084],{"class":350},"}\n",[198,1086,1087,1088,1090,1091,1094],{},"Without the middleware, ",[218,1089,566],{}," generates its own ",[218,1092,1093],{},"requestId"," and measures timing internally.",[956,1096,1097,1098,1101,1102,1104,1105,1107],{"color":958,"icon":13},"Older versions of Next.js use ",[218,1099,1100],{},"middleware.ts"," instead of ",[218,1103,1002],{},". The evlog middleware works with both — import from ",[218,1106,490],{}," regardless.",[754,1109,1111],{"id":1110},"client-provider","Client Provider",[198,1113,1114,1115,361],{},"For client-side logging, wrap your root layout with ",[218,1116,1117],{},"EvlogProvider",[210,1119,1124],{"className":1120,"code":1121,"filename":1122,"language":1123,"meta":216,"style":216},"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",[218,1125,1126,1146,1150,1190,1197,1221,1231,1265,1275,1284,1294,1304,1310],{"__ignoreMap":216},[221,1127,1128,1130,1132,1135,1137,1139,1141,1144],{"class":223,"line":224},[221,1129,473],{"class":335},[221,1131,476],{"class":350},[221,1133,1134],{"class":346}," EvlogProvider",[221,1136,482],{"class":350},[221,1138,485],{"class":335},[221,1140,410],{"class":350},[221,1142,1143],{"class":230},"evlog/next/client",[221,1145,493],{"class":350},[221,1147,1148],{"class":223,"line":354},[221,1149,499],{"emptyLinePlaceholder":498},[221,1151,1152,1154,1156,1159,1162,1165,1168,1171,1173,1175,1177,1180,1182,1185,1188],{"class":223,"line":381},[221,1153,336],{"class":335},[221,1155,339],{"class":335},[221,1157,1158],{"class":506}," function",[221,1160,1161],{"class":342}," Layout",[221,1163,1164],{"class":350},"({",[221,1166,1167],{"class":644}," children",[221,1169,1170],{"class":350}," }:",[221,1172,476],{"class":350},[221,1174,1167],{"class":357},[221,1176,361],{"class":350},[221,1178,1179],{"class":227}," React",[221,1181,683],{"class":350},[221,1183,1184],{"class":227},"ReactNode",[221,1186,1187],{"class":350}," })",[221,1189,389],{"class":350},[221,1191,1192,1194],{"class":223,"line":392},[221,1193,721],{"class":335},[221,1195,1196],{"class":357}," (\n",[221,1198,1199,1202,1205,1208,1210,1213,1216,1218],{"class":223,"line":402},[221,1200,1201],{"class":350},"    \u003C",[221,1203,1204],{"class":357},"html",[221,1206,1207],{"class":506}," lang",[221,1209,631],{"class":350},[221,1211,1212],{"class":350},"\"",[221,1214,1215],{"class":230},"en",[221,1217,1212],{"class":350},[221,1219,1220],{"class":350},">\n",[221,1222,1223,1226,1229],{"class":223,"line":420},[221,1224,1225],{"class":350},"      \u003C",[221,1227,1228],{"class":357},"body",[221,1230,1220],{"class":350},[221,1232,1233,1236,1238,1241,1243,1245,1247,1249,1252,1255,1258,1260,1262],{"class":223,"line":426},[221,1234,1235],{"class":350},"        \u003C",[221,1237,1117],{"class":227},[221,1239,1240],{"class":506}," service",[221,1242,631],{"class":350},[221,1244,1212],{"class":350},[221,1246,413],{"class":230},[221,1248,1212],{"class":350},[221,1250,1251],{"class":506}," transport",[221,1253,1254],{"class":350},"={{",[221,1256,1257],{"class":357}," enabled",[221,1259,361],{"class":350},[221,1261,742],{"class":741},[221,1263,1264],{"class":350}," }}>\n",[221,1266,1267,1270,1273],{"class":223,"line":432},[221,1268,1269],{"class":350},"          {",[221,1271,1272],{"class":346},"children",[221,1274,1084],{"class":350},[221,1276,1277,1280,1282],{"class":223,"line":950},[221,1278,1279],{"class":350},"        \u003C/",[221,1281,1117],{"class":227},[221,1283,1220],{"class":350},[221,1285,1287,1290,1292],{"class":223,"line":1286},10,[221,1288,1289],{"class":350},"      \u003C/",[221,1291,1228],{"class":357},[221,1293,1220],{"class":350},[221,1295,1297,1300,1302],{"class":223,"line":1296},11,[221,1298,1299],{"class":350},"    \u003C/",[221,1301,1204],{"class":357},[221,1303,1220],{"class":350},[221,1305,1307],{"class":223,"line":1306},12,[221,1308,1309],{"class":357},"  )\n",[221,1311,1313],{"class":223,"line":1312},13,[221,1314,1084],{"class":350},[198,1316,1317,1318,1321],{},"Then use ",[218,1319,1320],{},"log"," in any client component:",[210,1323,1326],{"className":1120,"code":1324,"filename":1325,"language":1123,"meta":216,"style":216},"'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",[218,1327,1328,1337,1355,1359,1373,1379,1422,1427,1435,1439],{"__ignoreMap":216},[221,1329,1330,1332,1335],{"class":223,"line":224},[221,1331,367],{"class":350},[221,1333,1334],{"class":230},"use client",[221,1336,493],{"class":350},[221,1338,1339,1341,1343,1345,1347,1349,1351,1353],{"class":223,"line":354},[221,1340,473],{"class":335},[221,1342,476],{"class":350},[221,1344,523],{"class":346},[221,1346,482],{"class":350},[221,1348,485],{"class":335},[221,1350,410],{"class":350},[221,1352,1143],{"class":230},[221,1354,493],{"class":350},[221,1356,1357],{"class":223,"line":381},[221,1358,499],{"emptyLinePlaceholder":498},[221,1360,1361,1363,1365,1368,1371],{"class":223,"line":392},[221,1362,336],{"class":335},[221,1364,1158],{"class":506},[221,1366,1367],{"class":342}," CheckoutButton",[221,1369,1370],{"class":350},"()",[221,1372,389],{"class":350},[221,1374,1375,1377],{"class":223,"line":402},[221,1376,721],{"class":335},[221,1378,1196],{"class":357},[221,1380,1381,1383,1386,1389,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1413,1415,1417,1419],{"class":223,"line":420},[221,1382,1201],{"class":350},[221,1384,1385],{"class":357},"button",[221,1387,1388],{"class":506}," onClick",[221,1390,1391],{"class":350},"={()",[221,1393,655],{"class":506},[221,1395,523],{"class":346},[221,1397,683],{"class":350},[221,1399,958],{"class":342},[221,1401,347],{"class":346},[221,1403,691],{"class":350},[221,1405,864],{"class":357},[221,1407,361],{"class":350},[221,1409,410],{"class":350},[221,1411,1412],{"class":230},"checkout_click",[221,1414,367],{"class":350},[221,1416,482],{"class":350},[221,1418,652],{"class":346},[221,1420,1421],{"class":350},"}>\n",[221,1423,1424],{"class":223,"line":426},[221,1425,1426],{"class":346},"      Checkout\n",[221,1428,1429,1431,1433],{"class":223,"line":432},[221,1430,1299],{"class":350},[221,1432,1385],{"class":357},[221,1434,1220],{"class":350},[221,1436,1437],{"class":223,"line":950},[221,1438,1309],{"class":357},[221,1440,1441],{"class":223,"line":1286},[221,1442,1084],{"class":350},[754,1444,1446],{"id":1445},"configuration-reference","Configuration Reference",[198,1448,1449,1450,361],{},"All options for ",[218,1451,462],{},[1453,1454,1455,1474],"table",{},[1456,1457,1458],"thead",{},[1459,1460,1461,1465,1468,1471],"tr",{},[1462,1463,1464],"th",{},"Option",[1462,1466,1467],{},"Type",[1462,1469,1470],{},"Default",[1462,1472,1473],{},"Description",[1475,1476,1477,1498,1518,1535,1553,1573,1592,1611,1629,1648,1667,1686,1709],"tbody",{},[1459,1478,1479,1485,1490,1495],{},[1480,1481,1482],"td",{},[218,1483,1484],{},"service",[1480,1486,1487],{},[218,1488,1489],{},"string",[1480,1491,1492],{},[218,1493,1494],{},"'app'",[1480,1496,1497],{},"Service name shown in logs",[1459,1499,1500,1505,1510,1515],{},[1480,1501,1502],{},[218,1503,1504],{},"enabled",[1480,1506,1507],{},[218,1508,1509],{},"boolean",[1480,1511,1512],{},[218,1513,1514],{},"true",[1480,1516,1517],{},"Globally enable/disable all logging",[1459,1519,1520,1525,1529,1532],{},[1480,1521,1522],{},[218,1523,1524],{},"pretty",[1480,1526,1527],{},[218,1528,1509],{},[1480,1530,1531],{},"Auto",[1480,1533,1534],{},"Pretty print (true in dev, false in prod)",[1459,1536,1537,1542,1547,1550],{},[1480,1538,1539],{},[218,1540,1541],{},"env",[1480,1543,1544],{},[218,1545,1546],{},"Partial\u003CEnvironmentContext>",[1480,1548,1549],{},"Auto-detected",[1480,1551,1552],{},"Environment, version, commitHash, region",[1459,1554,1555,1560,1565,1570],{},[1480,1556,1557],{},[218,1558,1559],{},"sampling.rates",[1480,1561,1562],{},[218,1563,1564],{},"SamplingRates",[1480,1566,1567],{},[218,1568,1569],{},"undefined",[1480,1571,1572],{},"Head sampling rates per level (0-100%)",[1459,1574,1575,1580,1585,1589],{},[1480,1576,1577],{},[218,1578,1579],{},"sampling.keep",[1480,1581,1582],{},[218,1583,1584],{},"TailSamplingCondition[]",[1480,1586,1587],{},[218,1588,1569],{},[1480,1590,1591],{},"Tail sampling conditions (OR logic)",[1459,1593,1594,1599,1604,1608],{},[1480,1595,1596],{},[218,1597,1598],{},"include",[1480,1600,1601],{},[218,1602,1603],{},"string[]",[1480,1605,1606],{},[218,1607,1569],{},[1480,1609,1610],{},"Route patterns to log (glob)",[1459,1612,1613,1618,1622,1626],{},[1480,1614,1615],{},[218,1616,1617],{},"exclude",[1480,1619,1620],{},[218,1621,1603],{},[1480,1623,1624],{},[218,1625,1569],{},[1480,1627,1628],{},"Route patterns to exclude (glob, takes precedence)",[1459,1630,1631,1636,1641,1645],{},[1480,1632,1633],{},[218,1634,1635],{},"routes",[1480,1637,1638],{},[218,1639,1640],{},"Record\u003Cstring, RouteConfig>",[1480,1642,1643],{},[218,1644,1569],{},[1480,1646,1647],{},"Route-specific service names",[1459,1649,1650,1655,1660,1664],{},[1480,1651,1652],{},[218,1653,1654],{},"drain",[1480,1656,1657],{},[218,1658,1659],{},"(ctx: DrainContext) => void",[1480,1661,1662],{},[218,1663,1569],{},[1480,1665,1666],{},"Drain callback for external services",[1459,1668,1669,1674,1679,1683],{},[1480,1670,1671],{},[218,1672,1673],{},"enrich",[1480,1675,1676],{},[218,1677,1678],{},"(ctx: EnrichContext) => void",[1480,1680,1681],{},[218,1682,1569],{},[1480,1684,1685],{},"Enrich callback for derived context",[1459,1687,1688,1693,1698,1702],{},[1480,1689,1690],{},[218,1691,1692],{},"keep",[1480,1694,1695],{},[218,1696,1697],{},"(ctx: TailSamplingContext) => void",[1480,1699,1700],{},[218,1701,1569],{},[1480,1703,1704,1705,1708],{},"Custom tail sampling callback. Set ",[218,1706,1707],{},"ctx.shouldKeep = true"," to force-keep",[1459,1710,1711,1716,1720,1724],{},[1480,1712,1713],{},[218,1714,1715],{},"stringify",[1480,1717,1718],{},[218,1719,1509],{},[1480,1721,1722],{},[218,1723,1514],{},[1480,1725,1726],{},"JSON stringify output (false for raw objects)",[754,1728,1730],{"id":1729},"comparison-with-nuxt","Comparison with Nuxt",[1453,1732,1733,1750],{},[1456,1734,1735],{},[1459,1736,1737,1740,1745],{},[1462,1738,1739],{},"Feature",[1462,1741,1742,1743,652],{},"Nuxt (",[218,1744,370],{},[1462,1746,1747,1748,652],{},"Next.js (",[218,1749,490],{},[1475,1751,1752,1766,1782,1795,1808,1824,1838,1852,1866,1879],{},[1459,1753,1754,1756,1761],{},[1480,1755,315],{},[1480,1757,1758],{},[218,1759,1760],{},"modules: ['evlog/nuxt']",[1480,1762,1763,1765],{},[218,1764,462],{}," factory",[1459,1767,1768,1771,1776],{},[1480,1769,1770],{},"Logger",[1480,1772,1773],{},[218,1774,1775],{},"useLogger(event)",[1480,1777,1778,1781],{},[218,1779,1780],{},"useLogger()"," (zero args)",[1459,1783,1784,1787,1790],{},[1480,1785,1786],{},"Auto-import",[1480,1788,1789],{},"Yes",[1480,1791,1792,1793,652],{},"No (import from ",[218,1794,613],{},[1459,1796,1797,1800,1803],{},[1480,1798,1799],{},"Request scoping",[1480,1801,1802],{},"Nitro hooks",[1480,1804,1805],{},[218,1806,1807],{},"AsyncLocalStorage",[1459,1809,1810,1813,1819],{},[1480,1811,1812],{},"Drain",[1480,1814,1815,1818],{},[218,1816,1817],{},"evlog:drain"," hook",[1480,1820,1821,1823],{},[218,1822,1654],{}," callback",[1459,1825,1826,1829,1834],{},[1480,1827,1828],{},"Enrich",[1480,1830,1831,1818],{},[218,1832,1833],{},"evlog:enrich",[1480,1835,1836,1823],{},[218,1837,1673],{},[1459,1839,1840,1843,1848],{},[1480,1841,1842],{},"Tail sampling (rules)",[1480,1844,1845,1847],{},[218,1846,1579],{}," conditions",[1480,1849,1850,1847],{},[218,1851,1579],{},[1459,1853,1854,1857,1862],{},[1480,1855,1856],{},"Tail sampling (custom)",[1480,1858,1859,1818],{},[218,1860,1861],{},"evlog:emit:keep",[1480,1863,1864,1823],{},[218,1865,1692],{},[1459,1867,1868,1871,1874],{},[1480,1869,1870],{},"Client",[1480,1872,1873],{},"Auto-configured Vue plugin",[1480,1875,1876,1878],{},[218,1877,1117],{}," React component",[1459,1880,1881,1884,1887],{},[1480,1882,1883],{},"Emit",[1480,1885,1886],{},"Automatic (afterResponse hook)",[1480,1888,1889,1890,1893],{},"Automatic (",[218,1891,1892],{},"withEvlog"," wrapper)",[956,1895,1898,1899,1902],{"color":1896,"icon":1897},"neutral","i-lucide-arrow-right","See a full working ",[309,1900,1901],{"href":153},"Next.js example"," with enrichers, pipeline, drain, tail sampling, and client provider.",[279,1904,157],{"id":1905},"sveltekit",[198,1907,1908,1909,969,1912,1915,1916,1919,1920,1923,1924,1926],{},"SvelteKit integration via ",[218,1910,1911],{},"handle",[218,1913,1914],{},"handleError"," hooks in ",[218,1917,1918],{},"hooks.server.ts",". Access the logger via ",[218,1921,1922],{},"event.locals.log"," in route handlers or ",[218,1925,1780],{}," from services.",[207,1928,1929,1941,1953],{},[210,1930,1931],{"className":212,"code":237,"filename":238,"language":215,"meta":216,"style":216},[218,1932,1933],{"__ignoreMap":216},[221,1934,1935,1937,1939],{"class":223,"line":224},[221,1936,238],{"class":227},[221,1938,247],{"class":230},[221,1940,234],{"class":230},[210,1942,1943],{"className":212,"code":213,"filename":214,"language":215,"meta":216,"style":216},[218,1944,1945],{"__ignoreMap":216},[221,1946,1947,1949,1951],{"class":223,"line":224},[221,1948,214],{"class":227},[221,1950,231],{"class":230},[221,1952,234],{"class":230},[210,1954,1955],{"className":212,"code":266,"filename":267,"language":215,"meta":216,"style":216},[218,1956,1957],{"__ignoreMap":216},[221,1958,1959,1961,1963],{"class":223,"line":224},[221,1960,267],{"class":227},[221,1962,231],{"class":230},[221,1964,234],{"class":230},[198,1966,1967],{},[1968,1969,315],"strong",{},[210,1971,1974],{"className":325,"code":1972,"filename":1973,"language":328,"meta":216,"style":216},"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",[218,1975,1976,1996,2016,2020,2052,2056],{"__ignoreMap":216},[221,1977,1978,1980,1982,1985,1987,1989,1991,1994],{"class":223,"line":224},[221,1979,473],{"class":335},[221,1981,476],{"class":350},[221,1983,1984],{"class":346}," initLogger",[221,1986,482],{"class":350},[221,1988,485],{"class":335},[221,1990,410],{"class":350},[221,1992,1993],{"class":230},"evlog",[221,1995,493],{"class":350},[221,1997,1998,2000,2002,2005,2007,2009,2011,2014],{"class":223,"line":354},[221,1999,473],{"class":335},[221,2001,476],{"class":350},[221,2003,2004],{"class":346}," createEvlogHooks",[221,2006,482],{"class":350},[221,2008,485],{"class":335},[221,2010,410],{"class":350},[221,2012,2013],{"class":230},"evlog/sveltekit",[221,2015,493],{"class":350},[221,2017,2018],{"class":223,"line":381},[221,2019,499],{"emptyLinePlaceholder":498},[221,2021,2022,2025,2027,2029,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050],{"class":223,"line":392},[221,2023,2024],{"class":342},"initLogger",[221,2026,347],{"class":346},[221,2028,691],{"class":350},[221,2030,2031],{"class":357}," env",[221,2033,361],{"class":350},[221,2035,476],{"class":350},[221,2037,1240],{"class":357},[221,2039,361],{"class":350},[221,2041,410],{"class":350},[221,2043,413],{"class":230},[221,2045,367],{"class":350},[221,2047,482],{"class":350},[221,2049,482],{"class":350},[221,2051,438],{"class":346},[221,2053,2054],{"class":223,"line":402},[221,2055,499],{"emptyLinePlaceholder":498},[221,2057,2058,2060,2062,2064,2067,2069,2072,2074,2076,2078],{"class":223,"line":420},[221,2059,336],{"class":335},[221,2061,507],{"class":506},[221,2063,476],{"class":350},[221,2065,2066],{"class":346}," handle",[221,2068,515],{"class":350},[221,2070,2071],{"class":346}," handleError ",[221,2073,435],{"class":350},[221,2075,533],{"class":350},[221,2077,2004],{"class":342},[221,2079,849],{"class":346},[198,2081,2082],{},[1968,2083,2084],{},"Type your locals",[210,2086,2089],{"className":325,"code":2087,"filename":2088,"language":328,"meta":216,"style":216},"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",[218,2090,2091,2113,2117,2127,2137,2147,2157,2162,2167,2171,2175],{"__ignoreMap":216},[221,2092,2093,2095,2098,2100,2103,2105,2107,2109,2111],{"class":223,"line":224},[221,2094,473],{"class":335},[221,2096,2097],{"class":335}," type",[221,2099,476],{"class":350},[221,2101,2102],{"class":346}," RequestLogger",[221,2104,482],{"class":350},[221,2106,485],{"class":335},[221,2108,410],{"class":350},[221,2110,1993],{"class":230},[221,2112,493],{"class":350},[221,2114,2115],{"class":223,"line":354},[221,2116,499],{"emptyLinePlaceholder":498},[221,2118,2119,2122,2125],{"class":223,"line":381},[221,2120,2121],{"class":506},"declare",[221,2123,2124],{"class":346}," global ",[221,2126,351],{"class":350},[221,2128,2129,2132,2135],{"class":223,"line":392},[221,2130,2131],{"class":506},"  namespace",[221,2133,2134],{"class":227}," App",[221,2136,389],{"class":350},[221,2138,2139,2142,2145],{"class":223,"line":402},[221,2140,2141],{"class":506},"    interface",[221,2143,2144],{"class":227}," Locals",[221,2146,389],{"class":350},[221,2148,2149,2152,2154],{"class":223,"line":420},[221,2150,2151],{"class":357},"      log",[221,2153,361],{"class":350},[221,2155,2156],{"class":227}," RequestLogger\n",[221,2158,2159],{"class":223,"line":426},[221,2160,2161],{"class":350},"    }\n",[221,2163,2164],{"class":223,"line":432},[221,2165,2166],{"class":350},"  }\n",[221,2168,2169],{"class":223,"line":950},[221,2170,1084],{"class":350},[221,2172,2173],{"class":223,"line":1286},[221,2174,499],{"emptyLinePlaceholder":498},[221,2176,2177,2179],{"class":223,"line":1296},[221,2178,336],{"class":335},[221,2180,2181],{"class":350}," {}\n",[198,2183,2184],{},[1968,2185,2186],{},"Usage in routes",[210,2188,2191],{"className":325,"code":2189,"filename":2190,"language":328,"meta":216,"style":216},"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",[218,2192,2193,2213,2235,2239,2271,2311,2335],{"__ignoreMap":216},[221,2194,2195,2197,2199,2202,2204,2206,2208,2211],{"class":223,"line":224},[221,2196,473],{"class":335},[221,2198,476],{"class":350},[221,2200,2201],{"class":346}," json",[221,2203,482],{"class":350},[221,2205,485],{"class":335},[221,2207,410],{"class":350},[221,2209,2210],{"class":230},"@sveltejs/kit",[221,2212,493],{"class":350},[221,2214,2215,2217,2219,2221,2224,2226,2228,2230,2233],{"class":223,"line":354},[221,2216,473],{"class":335},[221,2218,2097],{"class":335},[221,2220,476],{"class":350},[221,2222,2223],{"class":346}," RequestHandler",[221,2225,482],{"class":350},[221,2227,485],{"class":335},[221,2229,410],{"class":350},[221,2231,2232],{"class":230},"./$types",[221,2234,493],{"class":350},[221,2236,2237],{"class":223,"line":381},[221,2238,499],{"emptyLinePlaceholder":498},[221,2240,2241,2243,2245,2248,2250,2252,2254,2257,2260,2262,2265,2267,2269],{"class":223,"line":392},[221,2242,336],{"class":335},[221,2244,507],{"class":506},[221,2246,2247],{"class":346}," GET",[221,2249,361],{"class":350},[221,2251,2223],{"class":227},[221,2253,533],{"class":350},[221,2255,2256],{"class":350}," ({",[221,2258,2259],{"class":644}," locals",[221,2261,515],{"class":350},[221,2263,2264],{"class":644}," params",[221,2266,1187],{"class":350},[221,2268,655],{"class":506},[221,2270,389],{"class":350},[221,2272,2273,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2305,2307,2309],{"class":223,"line":402},[221,2274,2275],{"class":346},"  locals",[221,2277,683],{"class":350},[221,2279,1320],{"class":346},[221,2281,683],{"class":350},[221,2283,686],{"class":342},[221,2285,347],{"class":357},[221,2287,691],{"class":350},[221,2289,694],{"class":357},[221,2291,361],{"class":350},[221,2293,476],{"class":350},[221,2295,701],{"class":357},[221,2297,361],{"class":350},[221,2299,2264],{"class":346},[221,2301,683],{"class":350},[221,2303,2304],{"class":346},"id",[221,2306,482],{"class":350},[221,2308,482],{"class":350},[221,2310,438],{"class":357},[221,2312,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333],{"class":223,"line":420},[221,2314,721],{"class":335},[221,2316,2201],{"class":342},[221,2318,347],{"class":357},[221,2320,691],{"class":350},[221,2322,701],{"class":357},[221,2324,361],{"class":350},[221,2326,2264],{"class":346},[221,2328,683],{"class":350},[221,2330,2304],{"class":346},[221,2332,482],{"class":350},[221,2334,438],{"class":357},[221,2336,2337],{"class":223,"line":426},[221,2338,1084],{"class":350},[198,2340,2341],{},[1968,2342,2343],{},"Full pipeline",[210,2345,2347],{"className":325,"code":2346,"filename":1973,"language":328,"meta":216,"style":216},"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",[218,2348,2349,2367,2385,2405,2409,2439,2443,2467,2487,2500,2518,2547,2551,2568,2614,2619],{"__ignoreMap":216},[221,2350,2351,2353,2355,2357,2359,2361,2363,2365],{"class":223,"line":224},[221,2352,473],{"class":335},[221,2354,476],{"class":350},[221,2356,1984],{"class":346},[221,2358,482],{"class":350},[221,2360,485],{"class":335},[221,2362,410],{"class":350},[221,2364,1993],{"class":230},[221,2366,493],{"class":350},[221,2368,2369,2371,2373,2375,2377,2379,2381,2383],{"class":223,"line":354},[221,2370,473],{"class":335},[221,2372,476],{"class":350},[221,2374,2004],{"class":346},[221,2376,482],{"class":350},[221,2378,485],{"class":335},[221,2380,410],{"class":350},[221,2382,2013],{"class":230},[221,2384,493],{"class":350},[221,2386,2387,2389,2391,2394,2396,2398,2400,2403],{"class":223,"line":381},[221,2388,473],{"class":335},[221,2390,476],{"class":350},[221,2392,2393],{"class":346}," createAxiomDrain",[221,2395,482],{"class":350},[221,2397,485],{"class":335},[221,2399,410],{"class":350},[221,2401,2402],{"class":230},"evlog/axiom",[221,2404,493],{"class":350},[221,2406,2407],{"class":223,"line":392},[221,2408,499],{"emptyLinePlaceholder":498},[221,2410,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437],{"class":223,"line":402},[221,2412,2024],{"class":342},[221,2414,347],{"class":346},[221,2416,691],{"class":350},[221,2418,2031],{"class":357},[221,2420,361],{"class":350},[221,2422,476],{"class":350},[221,2424,1240],{"class":357},[221,2426,361],{"class":350},[221,2428,410],{"class":350},[221,2430,413],{"class":230},[221,2432,367],{"class":350},[221,2434,482],{"class":350},[221,2436,482],{"class":350},[221,2438,438],{"class":346},[221,2440,2441],{"class":223,"line":420},[221,2442,499],{"emptyLinePlaceholder":498},[221,2444,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465],{"class":223,"line":426},[221,2446,336],{"class":335},[221,2448,507],{"class":506},[221,2450,476],{"class":350},[221,2452,2066],{"class":346},[221,2454,515],{"class":350},[221,2456,2071],{"class":346},[221,2458,435],{"class":350},[221,2460,533],{"class":350},[221,2462,2004],{"class":342},[221,2464,347],{"class":346},[221,2466,351],{"class":350},[221,2468,2469,2472,2474,2476,2478,2481,2483,2485],{"class":223,"line":432},[221,2470,2471],{"class":357},"  include",[221,2473,361],{"class":350},[221,2475,364],{"class":346},[221,2477,367],{"class":350},[221,2479,2480],{"class":230},"/api/**",[221,2482,367],{"class":350},[221,2484,375],{"class":346},[221,2486,378],{"class":350},[221,2488,2489,2492,2494,2496,2498],{"class":223,"line":950},[221,2490,2491],{"class":357},"  drain",[221,2493,361],{"class":350},[221,2495,2393],{"class":342},[221,2497,1370],{"class":346},[221,2499,378],{"class":350},[221,2501,2502,2505,2507,2509,2512,2514,2516],{"class":223,"line":1286},[221,2503,2504],{"class":342},"  enrich",[221,2506,361],{"class":350},[221,2508,641],{"class":350},[221,2510,2511],{"class":644},"ctx",[221,2513,652],{"class":350},[221,2515,655],{"class":506},[221,2517,389],{"class":350},[221,2519,2520,2523,2525,2528,2530,2533,2535,2538,2540,2542,2544],{"class":223,"line":1296},[221,2521,2522],{"class":346},"    ctx",[221,2524,683],{"class":350},[221,2526,2527],{"class":346},"event",[221,2529,683],{"class":350},[221,2531,2532],{"class":346},"region",[221,2534,533],{"class":350},[221,2536,2537],{"class":346}," process",[221,2539,683],{"class":350},[221,2541,1541],{"class":346},[221,2543,683],{"class":350},[221,2545,2546],{"class":346},"FLY_REGION\n",[221,2548,2549],{"class":223,"line":1306},[221,2550,429],{"class":350},[221,2552,2553,2556,2558,2560,2562,2564,2566],{"class":223,"line":1312},[221,2554,2555],{"class":342},"  keep",[221,2557,361],{"class":350},[221,2559,641],{"class":350},[221,2561,2511],{"class":644},[221,2563,652],{"class":350},[221,2565,655],{"class":506},[221,2567,389],{"class":350},[221,2569,2571,2574,2576,2578,2580,2583,2586,2589,2591,2593,2596,2600,2602,2604,2606,2609,2611],{"class":223,"line":2570},14,[221,2572,2573],{"class":335},"    if",[221,2575,641],{"class":357},[221,2577,2511],{"class":346},[221,2579,683],{"class":350},[221,2581,2582],{"class":346},"duration",[221,2584,2585],{"class":350}," &&",[221,2587,2588],{"class":346}," ctx",[221,2590,683],{"class":350},[221,2592,2582],{"class":346},[221,2594,2595],{"class":350}," >",[221,2597,2599],{"class":2598},"sbssI"," 2000",[221,2601,928],{"class":357},[221,2603,2511],{"class":346},[221,2605,683],{"class":350},[221,2607,2608],{"class":346},"shouldKeep",[221,2610,533],{"class":350},[221,2612,2613],{"class":741}," true\n",[221,2615,2617],{"class":223,"line":2616},15,[221,2618,429],{"class":350},[221,2620,2622,2624],{"class":223,"line":2621},16,[221,2623,435],{"class":350},[221,2625,438],{"class":346},[956,2627,2628,2629,2632],{"color":1896,"icon":1897},"See the ",[309,2630,2631],{"href":158},"SvelteKit example"," for a complete guide with drain, enrichers, tail sampling, and error handling.",[279,2634,2636],{"id":2635},"nitro-v3","Nitro v3",[198,2638,2639,2640,2643],{},"Register evlog as a Nitro module using the ",[218,2641,2642],{},"nitro"," package:",[210,2645,2648],{"className":325,"code":2646,"filename":2647,"language":328,"meta":216,"style":216},"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",[218,2649,2650,2669,2686,2690,2702,2711,2720,2743,2750,2757],{"__ignoreMap":216},[221,2651,2652,2654,2656,2659,2661,2663,2665,2667],{"class":223,"line":224},[221,2653,473],{"class":335},[221,2655,476],{"class":350},[221,2657,2658],{"class":346}," defineConfig",[221,2660,482],{"class":350},[221,2662,485],{"class":335},[221,2664,410],{"class":350},[221,2666,2642],{"class":230},[221,2668,493],{"class":350},[221,2670,2671,2673,2676,2679,2681,2684],{"class":223,"line":354},[221,2672,473],{"class":335},[221,2674,2675],{"class":346}," evlog ",[221,2677,2678],{"class":335},"from",[221,2680,410],{"class":350},[221,2682,2683],{"class":230},"evlog/nitro/v3",[221,2685,493],{"class":350},[221,2687,2688],{"class":223,"line":381},[221,2689,499],{"emptyLinePlaceholder":498},[221,2691,2692,2694,2696,2698,2700],{"class":223,"line":392},[221,2693,336],{"class":335},[221,2695,339],{"class":335},[221,2697,2658],{"class":342},[221,2699,347],{"class":346},[221,2701,351],{"class":350},[221,2703,2704,2706,2708],{"class":223,"line":402},[221,2705,358],{"class":357},[221,2707,361],{"class":350},[221,2709,2710],{"class":346}," [\n",[221,2712,2713,2716,2718],{"class":223,"line":420},[221,2714,2715],{"class":342},"    evlog",[221,2717,347],{"class":346},[221,2719,351],{"class":350},[221,2721,2722,2725,2727,2729,2731,2733,2735,2738,2740],{"class":223,"line":426},[221,2723,2724],{"class":357},"      env",[221,2726,361],{"class":350},[221,2728,476],{"class":350},[221,2730,1240],{"class":357},[221,2732,361],{"class":350},[221,2734,410],{"class":350},[221,2736,2737],{"class":230},"my-api",[221,2739,367],{"class":350},[221,2741,2742],{"class":350}," },\n",[221,2744,2745,2748],{"class":223,"line":432},[221,2746,2747],{"class":350},"    }",[221,2749,438],{"class":346},[221,2751,2752,2755],{"class":223,"line":950},[221,2753,2754],{"class":346},"  ]",[221,2756,378],{"class":350},[221,2758,2759,2761],{"class":223,"line":1286},[221,2760,435],{"class":350},[221,2762,438],{"class":346},[198,2764,1317,2765,2767],{},[218,2766,444],{}," in your routes:",[210,2769,2772],{"className":325,"code":2770,"filename":2771,"language":328,"meta":216,"style":216},"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",[218,2773,2774,2794,2812,2816,2838,2854,2881,2896],{"__ignoreMap":216},[221,2775,2776,2778,2780,2783,2785,2787,2789,2792],{"class":223,"line":224},[221,2777,473],{"class":335},[221,2779,476],{"class":350},[221,2781,2782],{"class":346}," defineHandler",[221,2784,482],{"class":350},[221,2786,485],{"class":335},[221,2788,410],{"class":350},[221,2790,2791],{"class":230},"nitro/h3",[221,2793,493],{"class":350},[221,2795,2796,2798,2800,2802,2804,2806,2808,2810],{"class":223,"line":354},[221,2797,473],{"class":335},[221,2799,476],{"class":350},[221,2801,518],{"class":346},[221,2803,482],{"class":350},[221,2805,485],{"class":335},[221,2807,410],{"class":350},[221,2809,2683],{"class":230},[221,2811,493],{"class":350},[221,2813,2814],{"class":223,"line":381},[221,2815,499],{"emptyLinePlaceholder":498},[221,2817,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836],{"class":223,"line":392},[221,2819,336],{"class":335},[221,2821,339],{"class":335},[221,2823,2782],{"class":342},[221,2825,347],{"class":346},[221,2827,638],{"class":506},[221,2829,641],{"class":350},[221,2831,2527],{"class":644},[221,2833,652],{"class":350},[221,2835,655],{"class":506},[221,2837,389],{"class":350},[221,2839,2840,2842,2844,2846,2848,2850,2852],{"class":223,"line":402},[221,2841,662],{"class":506},[221,2843,523],{"class":346},[221,2845,533],{"class":350},[221,2847,518],{"class":342},[221,2849,347],{"class":357},[221,2851,2527],{"class":346},[221,2853,438],{"class":357},[221,2855,2856,2858,2860,2862,2864,2866,2868,2870,2872,2875,2877,2879],{"class":223,"line":420},[221,2857,680],{"class":346},[221,2859,683],{"class":350},[221,2861,686],{"class":342},[221,2863,347],{"class":357},[221,2865,691],{"class":350},[221,2867,864],{"class":357},[221,2869,361],{"class":350},[221,2871,410],{"class":350},[221,2873,2874],{"class":230},"hello",[221,2876,367],{"class":350},[221,2878,482],{"class":350},[221,2880,438],{"class":357},[221,2882,2883,2885,2887,2890,2892,2894],{"class":223,"line":426},[221,2884,721],{"class":335},[221,2886,476],{"class":350},[221,2888,2889],{"class":357}," ok",[221,2891,361],{"class":350},[221,2893,742],{"class":741},[221,2895,947],{"class":350},[221,2897,2898,2900],{"class":223,"line":432},[221,2899,435],{"class":350},[221,2901,438],{"class":346},[279,2903,2905],{"id":2904},"nitro-v2","Nitro v2",[198,2907,2908,2909,361],{},"Same approach with ",[218,2910,2911],{},"nitropack",[210,2913,2915],{"className":325,"code":2914,"filename":2647,"language":328,"meta":216,"style":216},"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",[218,2916,2917,2937,2952,2956,2968,2976,2984,3004,3010,3016],{"__ignoreMap":216},[221,2918,2919,2921,2923,2926,2928,2930,2932,2935],{"class":223,"line":224},[221,2920,473],{"class":335},[221,2922,476],{"class":350},[221,2924,2925],{"class":346}," defineNitroConfig",[221,2927,482],{"class":350},[221,2929,485],{"class":335},[221,2931,410],{"class":350},[221,2933,2934],{"class":230},"nitropack/config",[221,2936,493],{"class":350},[221,2938,2939,2941,2943,2945,2947,2950],{"class":223,"line":354},[221,2940,473],{"class":335},[221,2942,2675],{"class":346},[221,2944,2678],{"class":335},[221,2946,410],{"class":350},[221,2948,2949],{"class":230},"evlog/nitro",[221,2951,493],{"class":350},[221,2953,2954],{"class":223,"line":381},[221,2955,499],{"emptyLinePlaceholder":498},[221,2957,2958,2960,2962,2964,2966],{"class":223,"line":392},[221,2959,336],{"class":335},[221,2961,339],{"class":335},[221,2963,2925],{"class":342},[221,2965,347],{"class":346},[221,2967,351],{"class":350},[221,2969,2970,2972,2974],{"class":223,"line":402},[221,2971,358],{"class":357},[221,2973,361],{"class":350},[221,2975,2710],{"class":346},[221,2977,2978,2980,2982],{"class":223,"line":420},[221,2979,2715],{"class":342},[221,2981,347],{"class":346},[221,2983,351],{"class":350},[221,2985,2986,2988,2990,2992,2994,2996,2998,3000,3002],{"class":223,"line":426},[221,2987,2724],{"class":357},[221,2989,361],{"class":350},[221,2991,476],{"class":350},[221,2993,1240],{"class":357},[221,2995,361],{"class":350},[221,2997,410],{"class":350},[221,2999,2737],{"class":230},[221,3001,367],{"class":350},[221,3003,2742],{"class":350},[221,3005,3006,3008],{"class":223,"line":432},[221,3007,2747],{"class":350},[221,3009,438],{"class":346},[221,3011,3012,3014],{"class":223,"line":950},[221,3013,2754],{"class":346},[221,3015,378],{"class":350},[221,3017,3018,3020],{"class":223,"line":1286},[221,3019,435],{"class":350},[221,3021,438],{"class":346},[198,3023,1317,3024,2767],{},[218,3025,444],{},[210,3027,3029],{"className":325,"code":3028,"filename":2771,"language":328,"meta":216,"style":216},"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",[218,3030,3031,3050,3068,3072,3094,3110,3136,3150],{"__ignoreMap":216},[221,3032,3033,3035,3037,3040,3042,3044,3046,3048],{"class":223,"line":224},[221,3034,473],{"class":335},[221,3036,476],{"class":350},[221,3038,3039],{"class":346}," defineEventHandler",[221,3041,482],{"class":350},[221,3043,485],{"class":335},[221,3045,410],{"class":350},[221,3047,279],{"class":230},[221,3049,493],{"class":350},[221,3051,3052,3054,3056,3058,3060,3062,3064,3066],{"class":223,"line":354},[221,3053,473],{"class":335},[221,3055,476],{"class":350},[221,3057,518],{"class":346},[221,3059,482],{"class":350},[221,3061,485],{"class":335},[221,3063,410],{"class":350},[221,3065,2949],{"class":230},[221,3067,493],{"class":350},[221,3069,3070],{"class":223,"line":381},[221,3071,499],{"emptyLinePlaceholder":498},[221,3073,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092],{"class":223,"line":392},[221,3075,336],{"class":335},[221,3077,339],{"class":335},[221,3079,3039],{"class":342},[221,3081,347],{"class":346},[221,3083,638],{"class":506},[221,3085,641],{"class":350},[221,3087,2527],{"class":644},[221,3089,652],{"class":350},[221,3091,655],{"class":506},[221,3093,389],{"class":350},[221,3095,3096,3098,3100,3102,3104,3106,3108],{"class":223,"line":402},[221,3097,662],{"class":506},[221,3099,523],{"class":346},[221,3101,533],{"class":350},[221,3103,518],{"class":342},[221,3105,347],{"class":357},[221,3107,2527],{"class":346},[221,3109,438],{"class":357},[221,3111,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134],{"class":223,"line":420},[221,3113,680],{"class":346},[221,3115,683],{"class":350},[221,3117,686],{"class":342},[221,3119,347],{"class":357},[221,3121,691],{"class":350},[221,3123,864],{"class":357},[221,3125,361],{"class":350},[221,3127,410],{"class":350},[221,3129,2874],{"class":230},[221,3131,367],{"class":350},[221,3133,482],{"class":350},[221,3135,438],{"class":357},[221,3137,3138,3140,3142,3144,3146,3148],{"class":223,"line":426},[221,3139,721],{"class":335},[221,3141,476],{"class":350},[221,3143,2889],{"class":357},[221,3145,361],{"class":350},[221,3147,742],{"class":741},[221,3149,947],{"class":350},[221,3151,3152,3154],{"class":223,"line":432},[221,3153,435],{"class":350},[221,3155,438],{"class":346},[956,3157,3158,3161,3162,3164,3165,3167,3168,3170,3171,3173,3174,3176],{"color":958,"icon":13},[1968,3159,3160],{},"Note:"," ",[218,3163,448],{}," is always imported from ",[218,3166,1993],{}," regardless of Nitro version. Only the module and ",[218,3169,444],{}," imports differ: ",[218,3172,2683],{}," for v3, ",[218,3175,2949],{}," for v2.",[279,3178,162],{"id":3179},"tanstack-start",[198,3181,3182,3183,3186,3187,3190,3191,361],{},"TanStack Start uses Nitro v3 under the hood. A project created with ",[218,3184,3185],{},"npm create @tanstack/start@latest"," already includes the ",[218,3188,3189],{},"nitro()"," Vite plugin — just install evlog and add a ",[218,3192,2647],{},[210,3194,3195],{"className":212,"code":237,"language":215,"meta":216,"style":216},[218,3196,3197],{"__ignoreMap":216},[221,3198,3199,3201,3203],{"class":223,"line":224},[221,3200,238],{"class":227},[221,3202,247],{"class":230},[221,3204,234],{"class":230},[210,3206,3208],{"className":325,"code":3207,"filename":2647,"language":328,"meta":216,"style":216},"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",[218,3209,3210,3228,3242,3246,3258,3267,3278,3282,3290,3298,3318,3324,3330],{"__ignoreMap":216},[221,3211,3212,3214,3216,3218,3220,3222,3224,3226],{"class":223,"line":224},[221,3213,473],{"class":335},[221,3215,476],{"class":350},[221,3217,2658],{"class":346},[221,3219,482],{"class":350},[221,3221,485],{"class":335},[221,3223,410],{"class":350},[221,3225,2642],{"class":230},[221,3227,493],{"class":350},[221,3229,3230,3232,3234,3236,3238,3240],{"class":223,"line":354},[221,3231,473],{"class":335},[221,3233,2675],{"class":346},[221,3235,2678],{"class":335},[221,3237,410],{"class":350},[221,3239,2683],{"class":230},[221,3241,493],{"class":350},[221,3243,3244],{"class":223,"line":381},[221,3245,499],{"emptyLinePlaceholder":498},[221,3247,3248,3250,3252,3254,3256],{"class":223,"line":392},[221,3249,336],{"class":335},[221,3251,339],{"class":335},[221,3253,2658],{"class":342},[221,3255,347],{"class":346},[221,3257,351],{"class":350},[221,3259,3260,3263,3265],{"class":223,"line":402},[221,3261,3262],{"class":357},"  experimental",[221,3264,361],{"class":350},[221,3266,389],{"class":350},[221,3268,3269,3272,3274,3276],{"class":223,"line":420},[221,3270,3271],{"class":357},"    asyncContext",[221,3273,361],{"class":350},[221,3275,742],{"class":741},[221,3277,378],{"class":350},[221,3279,3280],{"class":223,"line":426},[221,3281,429],{"class":350},[221,3283,3284,3286,3288],{"class":223,"line":432},[221,3285,358],{"class":357},[221,3287,361],{"class":350},[221,3289,2710],{"class":346},[221,3291,3292,3294,3296],{"class":223,"line":950},[221,3293,2715],{"class":342},[221,3295,347],{"class":346},[221,3297,351],{"class":350},[221,3299,3300,3302,3304,3306,3308,3310,3312,3314,3316],{"class":223,"line":1286},[221,3301,2724],{"class":357},[221,3303,361],{"class":350},[221,3305,476],{"class":350},[221,3307,1240],{"class":357},[221,3309,361],{"class":350},[221,3311,410],{"class":350},[221,3313,413],{"class":230},[221,3315,367],{"class":350},[221,3317,2742],{"class":350},[221,3319,3320,3322],{"class":223,"line":1296},[221,3321,2747],{"class":350},[221,3323,438],{"class":346},[221,3325,3326,3328],{"class":223,"line":1306},[221,3327,2754],{"class":346},[221,3329,378],{"class":350},[221,3331,3332,3334],{"class":223,"line":1312},[221,3333,435],{"class":350},[221,3335,438],{"class":346},[198,3337,3338,3339,3342,3343,3346],{},"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 ",[218,3340,3341],{},"useRequest()"," from ",[218,3344,3345],{},"nitro/context"," to access the request-scoped logger:",[210,3348,3351],{"className":325,"code":3349,"filename":3350,"language":328,"meta":216,"style":216},"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",[218,3352,3353,3373,3392,3412,3416,3443,3452,3461,3478,3492,3516,3520,3570,3574,3599,3604,3608,3613],{"__ignoreMap":216},[221,3354,3355,3357,3359,3362,3364,3366,3368,3371],{"class":223,"line":224},[221,3356,473],{"class":335},[221,3358,476],{"class":350},[221,3360,3361],{"class":346}," createFileRoute",[221,3363,482],{"class":350},[221,3365,485],{"class":335},[221,3367,410],{"class":350},[221,3369,3370],{"class":230},"@tanstack/react-router",[221,3372,493],{"class":350},[221,3374,3375,3377,3379,3382,3384,3386,3388,3390],{"class":223,"line":354},[221,3376,473],{"class":335},[221,3378,476],{"class":350},[221,3380,3381],{"class":346}," useRequest",[221,3383,482],{"class":350},[221,3385,485],{"class":335},[221,3387,410],{"class":350},[221,3389,3345],{"class":230},[221,3391,493],{"class":350},[221,3393,3394,3396,3398,3400,3402,3404,3406,3408,3410],{"class":223,"line":381},[221,3395,473],{"class":335},[221,3397,2097],{"class":335},[221,3399,476],{"class":350},[221,3401,2102],{"class":346},[221,3403,482],{"class":350},[221,3405,485],{"class":335},[221,3407,410],{"class":350},[221,3409,1993],{"class":230},[221,3411,493],{"class":350},[221,3413,3414],{"class":223,"line":392},[221,3415,499],{"emptyLinePlaceholder":498},[221,3417,3418,3420,3422,3425,3427,3429,3431,3433,3436,3438,3441],{"class":223,"line":402},[221,3419,336],{"class":335},[221,3421,507],{"class":506},[221,3423,3424],{"class":346}," Route ",[221,3426,631],{"class":350},[221,3428,3361],{"class":342},[221,3430,347],{"class":346},[221,3432,367],{"class":350},[221,3434,3435],{"class":230},"/api/hello",[221,3437,367],{"class":350},[221,3439,3440],{"class":346},")(",[221,3442,351],{"class":350},[221,3444,3445,3448,3450],{"class":223,"line":420},[221,3446,3447],{"class":357},"  server",[221,3449,361],{"class":350},[221,3451,389],{"class":350},[221,3453,3454,3457,3459],{"class":223,"line":426},[221,3455,3456],{"class":357},"    handlers",[221,3458,361],{"class":350},[221,3460,389],{"class":350},[221,3462,3463,3466,3468,3471,3474,3476],{"class":223,"line":432},[221,3464,3465],{"class":342},"      GET",[221,3467,361],{"class":350},[221,3469,3470],{"class":506}," async",[221,3472,3473],{"class":350}," ()",[221,3475,655],{"class":506},[221,3477,389],{"class":350},[221,3479,3480,3483,3486,3488,3490],{"class":223,"line":950},[221,3481,3482],{"class":506},"        const",[221,3484,3485],{"class":346}," req",[221,3487,533],{"class":350},[221,3489,3381],{"class":342},[221,3491,849],{"class":357},[221,3493,3494,3496,3498,3500,3502,3504,3507,3509,3511,3514],{"class":223,"line":1286},[221,3495,3482],{"class":506},[221,3497,523],{"class":346},[221,3499,533],{"class":350},[221,3501,3485],{"class":346},[221,3503,683],{"class":350},[221,3505,3506],{"class":346},"context",[221,3508,683],{"class":350},[221,3510,1320],{"class":346},[221,3512,3513],{"class":335}," as",[221,3515,2156],{"class":227},[221,3517,3518],{"class":223,"line":1296},[221,3519,499],{"emptyLinePlaceholder":498},[221,3521,3522,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3548,3550,3552,3555,3557,3559,3562,3564,3566,3568],{"class":223,"line":1306},[221,3523,3524],{"class":346},"        log",[221,3526,683],{"class":350},[221,3528,686],{"class":342},[221,3530,347],{"class":357},[221,3532,691],{"class":350},[221,3534,694],{"class":357},[221,3536,361],{"class":350},[221,3538,476],{"class":350},[221,3540,701],{"class":357},[221,3542,361],{"class":350},[221,3544,410],{"class":350},[221,3546,3547],{"class":230},"user_123",[221,3549,367],{"class":350},[221,3551,515],{"class":350},[221,3553,3554],{"class":357}," plan",[221,3556,361],{"class":350},[221,3558,410],{"class":350},[221,3560,3561],{"class":230},"pro",[221,3563,367],{"class":350},[221,3565,482],{"class":350},[221,3567,482],{"class":350},[221,3569,438],{"class":357},[221,3571,3572],{"class":223,"line":1312},[221,3573,499],{"emptyLinePlaceholder":498},[221,3575,3576,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597],{"class":223,"line":2570},[221,3577,3578],{"class":335},"        return",[221,3580,724],{"class":346},[221,3582,683],{"class":350},[221,3584,729],{"class":342},[221,3586,347],{"class":357},[221,3588,691],{"class":350},[221,3590,2889],{"class":357},[221,3592,361],{"class":350},[221,3594,742],{"class":741},[221,3596,482],{"class":350},[221,3598,438],{"class":357},[221,3600,3601],{"class":223,"line":2616},[221,3602,3603],{"class":350},"      },\n",[221,3605,3606],{"class":223,"line":2621},[221,3607,423],{"class":350},[221,3609,3611],{"class":223,"line":3610},17,[221,3612,429],{"class":350},[221,3614,3616,3618],{"class":223,"line":3615},18,[221,3617,435],{"class":350},[221,3619,438],{"class":346},[956,3621,3622,3624,3625,3627,3628,3631],{"color":958,"icon":13},[218,3623,3341],{}," is an experimental Nitro v3 feature that uses ",[218,3626,1807],{}," to access the current request from anywhere in the call stack. It requires ",[218,3629,3630],{},"experimental.asyncContext: true"," and works on Node.js and Bun runtimes.",[198,3633,3634,3635,3638,3639,445,3642,449,3645,3648],{},"For ",[218,3636,3637],{},"throw createError()"," to return structured JSON with ",[218,3640,3641],{},"why",[218,3643,3644],{},"fix",[218,3646,3647],{},"link",", add the error handling middleware to your root route:",[210,3650,3653],{"className":325,"code":3651,"filename":3652,"language":328,"meta":216,"style":216},"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",[218,3654,3655,3674,3694,3713,3717,3733,3741,3765,3769,3774],{"__ignoreMap":216},[221,3656,3657,3659,3661,3664,3666,3668,3670,3672],{"class":223,"line":224},[221,3658,473],{"class":335},[221,3660,476],{"class":350},[221,3662,3663],{"class":346}," createRootRoute",[221,3665,482],{"class":350},[221,3667,485],{"class":335},[221,3669,410],{"class":350},[221,3671,3370],{"class":230},[221,3673,493],{"class":350},[221,3675,3676,3678,3680,3683,3685,3687,3689,3692],{"class":223,"line":354},[221,3677,473],{"class":335},[221,3679,476],{"class":350},[221,3681,3682],{"class":346}," createMiddleware",[221,3684,482],{"class":350},[221,3686,485],{"class":335},[221,3688,410],{"class":350},[221,3690,3691],{"class":230},"@tanstack/react-start",[221,3693,493],{"class":350},[221,3695,3696,3698,3700,3703,3705,3707,3709,3711],{"class":223,"line":381},[221,3697,473],{"class":335},[221,3699,476],{"class":350},[221,3701,3702],{"class":346}," evlogErrorHandler",[221,3704,482],{"class":350},[221,3706,485],{"class":335},[221,3708,410],{"class":350},[221,3710,2683],{"class":230},[221,3712,493],{"class":350},[221,3714,3715],{"class":223,"line":392},[221,3716,499],{"emptyLinePlaceholder":498},[221,3718,3719,3721,3723,3725,3727,3729,3731],{"class":223,"line":402},[221,3720,336],{"class":335},[221,3722,507],{"class":506},[221,3724,3424],{"class":346},[221,3726,631],{"class":350},[221,3728,3663],{"class":342},[221,3730,347],{"class":346},[221,3732,351],{"class":350},[221,3734,3735,3737,3739],{"class":223,"line":420},[221,3736,3447],{"class":357},[221,3738,361],{"class":350},[221,3740,389],{"class":350},[221,3742,3743,3746,3748,3750,3753,3755,3757,3760,3763],{"class":223,"line":426},[221,3744,3745],{"class":357},"    middleware",[221,3747,361],{"class":350},[221,3749,364],{"class":346},[221,3751,3752],{"class":342},"createMiddleware",[221,3754,1370],{"class":346},[221,3756,683],{"class":350},[221,3758,3759],{"class":342},"server",[221,3761,3762],{"class":346},"(evlogErrorHandler)]",[221,3764,378],{"class":350},[221,3766,3767],{"class":223,"line":432},[221,3768,429],{"class":350},[221,3770,3771],{"class":223,"line":950},[221,3772,3773],{"class":674},"  // ... head, shellComponent, etc.\n",[221,3775,3776,3778],{"class":223,"line":1286},[221,3777,435],{"class":350},[221,3779,438],{"class":346},[956,3781,1898,3782,3785],{"color":1896,"icon":1897},[309,3783,3784],{"href":163},"TanStack Start example"," with API routes, structured errors, and wide event logging.",[279,3787,167],{"id":3788},"nestjs",[198,3790,3791,3792,3795,3796,3799,3800,3803,3804,3806],{},"evlog provides a NestJS module at ",[218,3793,3794],{},"evlog/nestjs"," with ",[218,3797,3798],{},"EvlogModule.forRoot()",". It auto-creates a request-scoped logger accessible via ",[218,3801,3802],{},"req.log"," or ",[218,3805,1780],{}," and emits a wide event when the response finishes.",[210,3808,3810],{"className":212,"code":3809,"language":215,"meta":216,"style":216},"npm install evlog @nestjs/common @nestjs/core @nestjs/platform-express\n",[218,3811,3812],{"__ignoreMap":216},[221,3813,3814,3816,3818,3821,3824,3827],{"class":223,"line":224},[221,3815,238],{"class":227},[221,3817,247],{"class":230},[221,3819,3820],{"class":230}," evlog",[221,3822,3823],{"class":230}," @nestjs/common",[221,3825,3826],{"class":230}," @nestjs/core",[221,3828,3829],{"class":230}," @nestjs/platform-express\n",[198,3831,3832,3833,3836],{},"Register ",[218,3834,3835],{},"EvlogModule"," in your app module:",[210,3838,3841],{"className":325,"code":3839,"filename":3840,"language":328,"meta":216,"style":216},"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",[218,3842,3843,3863,3882,3886,3898,3907,3921,3927,3933],{"__ignoreMap":216},[221,3844,3845,3847,3849,3852,3854,3856,3858,3861],{"class":223,"line":224},[221,3846,473],{"class":335},[221,3848,476],{"class":350},[221,3850,3851],{"class":346}," Module",[221,3853,482],{"class":350},[221,3855,485],{"class":335},[221,3857,410],{"class":350},[221,3859,3860],{"class":230},"@nestjs/common",[221,3862,493],{"class":350},[221,3864,3865,3867,3869,3872,3874,3876,3878,3880],{"class":223,"line":354},[221,3866,473],{"class":335},[221,3868,476],{"class":350},[221,3870,3871],{"class":346}," EvlogModule",[221,3873,482],{"class":350},[221,3875,485],{"class":335},[221,3877,410],{"class":350},[221,3879,3794],{"class":230},[221,3881,493],{"class":350},[221,3883,3884],{"class":223,"line":381},[221,3885,499],{"emptyLinePlaceholder":498},[221,3887,3888,3891,3894,3896],{"class":223,"line":392},[221,3889,3890],{"class":350},"@",[221,3892,3893],{"class":342},"Module",[221,3895,347],{"class":346},[221,3897,351],{"class":350},[221,3899,3900,3903,3905],{"class":223,"line":402},[221,3901,3902],{"class":357},"  imports",[221,3904,361],{"class":350},[221,3906,2710],{"class":346},[221,3908,3909,3912,3914,3917,3919],{"class":223,"line":420},[221,3910,3911],{"class":346},"    EvlogModule",[221,3913,683],{"class":350},[221,3915,3916],{"class":342},"forRoot",[221,3918,1370],{"class":346},[221,3920,378],{"class":350},[221,3922,3923,3925],{"class":223,"line":426},[221,3924,2754],{"class":346},[221,3926,378],{"class":350},[221,3928,3929,3931],{"class":223,"line":432},[221,3930,435],{"class":350},[221,3932,438],{"class":346},[221,3934,3935,3937,3940,3943],{"class":223,"line":950},[221,3936,336],{"class":335},[221,3938,3939],{"class":506}," class",[221,3941,3942],{"class":227}," AppModule",[221,3944,2181],{"class":350},[198,3946,3947],{},"Initialize evlog in your bootstrap and create the NestJS app:",[210,3949,3952],{"className":325,"code":3950,"filename":3951,"language":328,"meta":216,"style":216},"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",[218,3953,3954,3974,3992,4011,4015,4046,4050,4073],{"__ignoreMap":216},[221,3955,3956,3958,3960,3963,3965,3967,3969,3972],{"class":223,"line":224},[221,3957,473],{"class":335},[221,3959,476],{"class":350},[221,3961,3962],{"class":346}," NestFactory",[221,3964,482],{"class":350},[221,3966,485],{"class":335},[221,3968,410],{"class":350},[221,3970,3971],{"class":230},"@nestjs/core",[221,3973,493],{"class":350},[221,3975,3976,3978,3980,3982,3984,3986,3988,3990],{"class":223,"line":354},[221,3977,473],{"class":335},[221,3979,476],{"class":350},[221,3981,1984],{"class":346},[221,3983,482],{"class":350},[221,3985,485],{"class":335},[221,3987,410],{"class":350},[221,3989,1993],{"class":230},[221,3991,493],{"class":350},[221,3993,3994,3996,3998,4000,4002,4004,4006,4009],{"class":223,"line":381},[221,3995,473],{"class":335},[221,3997,476],{"class":350},[221,3999,3942],{"class":346},[221,4001,482],{"class":350},[221,4003,485],{"class":335},[221,4005,410],{"class":350},[221,4007,4008],{"class":230},"./app.module",[221,4010,493],{"class":350},[221,4012,4013],{"class":223,"line":392},[221,4014,499],{"emptyLinePlaceholder":498},[221,4016,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4038,4040,4042,4044],{"class":223,"line":402},[221,4018,2024],{"class":342},[221,4020,347],{"class":346},[221,4022,691],{"class":350},[221,4024,2031],{"class":357},[221,4026,361],{"class":350},[221,4028,476],{"class":350},[221,4030,1240],{"class":357},[221,4032,361],{"class":350},[221,4034,410],{"class":350},[221,4036,4037],{"class":230},"nestjs-api",[221,4039,367],{"class":350},[221,4041,482],{"class":350},[221,4043,482],{"class":350},[221,4045,438],{"class":346},[221,4047,4048],{"class":223,"line":420},[221,4049,499],{"emptyLinePlaceholder":498},[221,4051,4052,4055,4058,4060,4063,4065,4067,4070],{"class":223,"line":426},[221,4053,4054],{"class":506},"const",[221,4056,4057],{"class":346}," app ",[221,4059,631],{"class":350},[221,4061,4062],{"class":335}," await",[221,4064,3962],{"class":346},[221,4066,683],{"class":350},[221,4068,4069],{"class":342},"create",[221,4071,4072],{"class":346},"(AppModule)\n",[221,4074,4075,4078,4081,4083,4086,4088,4091],{"class":223,"line":432},[221,4076,4077],{"class":335},"await",[221,4079,4080],{"class":346}," app",[221,4082,683],{"class":350},[221,4084,4085],{"class":342},"listen",[221,4087,347],{"class":346},[221,4089,4090],{"class":2598},"3000",[221,4092,438],{"class":346},[198,4094,4095,4096,4098],{},"Use ",[218,4097,1780],{}," to access the request-scoped logger from any controller or service:",[210,4100,4103],{"className":325,"code":4101,"filename":4102,"language":328,"meta":216,"style":216},"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",[218,4104,4105,4134,4152,4156,4174,4185,4204,4236,4249,4276,4301,4305],{"__ignoreMap":216},[221,4106,4107,4109,4111,4114,4116,4119,4121,4124,4126,4128,4130,4132],{"class":223,"line":224},[221,4108,473],{"class":335},[221,4110,476],{"class":350},[221,4112,4113],{"class":346}," Controller",[221,4115,515],{"class":350},[221,4117,4118],{"class":346}," Get",[221,4120,515],{"class":350},[221,4122,4123],{"class":346}," Param",[221,4125,482],{"class":350},[221,4127,485],{"class":335},[221,4129,410],{"class":350},[221,4131,3860],{"class":230},[221,4133,493],{"class":350},[221,4135,4136,4138,4140,4142,4144,4146,4148,4150],{"class":223,"line":354},[221,4137,473],{"class":335},[221,4139,476],{"class":350},[221,4141,518],{"class":346},[221,4143,482],{"class":350},[221,4145,485],{"class":335},[221,4147,410],{"class":350},[221,4149,3794],{"class":230},[221,4151,493],{"class":350},[221,4153,4154],{"class":223,"line":381},[221,4155,499],{"emptyLinePlaceholder":498},[221,4157,4158,4160,4163,4165,4167,4170,4172],{"class":223,"line":392},[221,4159,3890],{"class":350},[221,4161,4162],{"class":342},"Controller",[221,4164,347],{"class":346},[221,4166,367],{"class":350},[221,4168,4169],{"class":230},"users",[221,4171,367],{"class":350},[221,4173,438],{"class":346},[221,4175,4176,4178,4180,4183],{"class":223,"line":402},[221,4177,336],{"class":335},[221,4179,3939],{"class":506},[221,4181,4182],{"class":227}," UsersController",[221,4184,389],{"class":350},[221,4186,4187,4190,4193,4195,4197,4200,4202],{"class":223,"line":420},[221,4188,4189],{"class":350},"  @",[221,4191,4192],{"class":342},"Get",[221,4194,347],{"class":346},[221,4196,367],{"class":350},[221,4198,4199],{"class":230},":id",[221,4201,367],{"class":350},[221,4203,438],{"class":346},[221,4205,4206,4209,4212,4215,4217,4219,4221,4223,4225,4227,4229,4232,4234],{"class":223,"line":426},[221,4207,4208],{"class":357},"  findOne",[221,4210,4211],{"class":350},"(@",[221,4213,4214],{"class":342},"Param",[221,4216,347],{"class":346},[221,4218,367],{"class":350},[221,4220,2304],{"class":230},[221,4222,367],{"class":350},[221,4224,928],{"class":346},[221,4226,2304],{"class":644},[221,4228,361],{"class":350},[221,4230,4231],{"class":227}," string",[221,4233,652],{"class":350},[221,4235,389],{"class":350},[221,4237,4238,4241,4243,4245,4247],{"class":223,"line":432},[221,4239,4240],{"class":506},"    const",[221,4242,523],{"class":346},[221,4244,533],{"class":350},[221,4246,518],{"class":342},[221,4248,849],{"class":357},[221,4250,4251,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274],{"class":223,"line":950},[221,4252,4253],{"class":346},"    log",[221,4255,683],{"class":350},[221,4257,686],{"class":342},[221,4259,347],{"class":357},[221,4261,691],{"class":350},[221,4263,694],{"class":357},[221,4265,361],{"class":350},[221,4267,476],{"class":350},[221,4269,701],{"class":346},[221,4271,482],{"class":350},[221,4273,482],{"class":350},[221,4275,438],{"class":357},[221,4277,4278,4281,4283,4285,4287,4290,4292,4294,4297,4299],{"class":223,"line":1286},[221,4279,4280],{"class":335},"    return",[221,4282,476],{"class":350},[221,4284,701],{"class":346},[221,4286,515],{"class":350},[221,4288,4289],{"class":357}," name",[221,4291,361],{"class":350},[221,4293,410],{"class":350},[221,4295,4296],{"class":230},"Alice",[221,4298,367],{"class":350},[221,4300,947],{"class":350},[221,4302,4303],{"class":223,"line":1296},[221,4304,2166],{"class":350},[221,4306,4307],{"class":223,"line":1306},[221,4308,1084],{"class":350},[198,4310,4311],{},"The module supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[210,4313,4315],{"className":325,"code":4314,"filename":3840,"language":328,"meta":216,"style":216},"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",[218,4316,4317,4335,4353,4371,4375,4385,4393,4405,4424,4444,4453,4480,4484,4497,4514,4539,4543,4560,4597,4602,4611,4618,4625],{"__ignoreMap":216},[221,4318,4319,4321,4323,4325,4327,4329,4331,4333],{"class":223,"line":224},[221,4320,473],{"class":335},[221,4322,476],{"class":350},[221,4324,3851],{"class":346},[221,4326,482],{"class":350},[221,4328,485],{"class":335},[221,4330,410],{"class":350},[221,4332,3860],{"class":230},[221,4334,493],{"class":350},[221,4336,4337,4339,4341,4343,4345,4347,4349,4351],{"class":223,"line":354},[221,4338,473],{"class":335},[221,4340,476],{"class":350},[221,4342,3871],{"class":346},[221,4344,482],{"class":350},[221,4346,485],{"class":335},[221,4348,410],{"class":350},[221,4350,3794],{"class":230},[221,4352,493],{"class":350},[221,4354,4355,4357,4359,4361,4363,4365,4367,4369],{"class":223,"line":381},[221,4356,473],{"class":335},[221,4358,476],{"class":350},[221,4360,2393],{"class":346},[221,4362,482],{"class":350},[221,4364,485],{"class":335},[221,4366,410],{"class":350},[221,4368,2402],{"class":230},[221,4370,493],{"class":350},[221,4372,4373],{"class":223,"line":392},[221,4374,499],{"emptyLinePlaceholder":498},[221,4376,4377,4379,4381,4383],{"class":223,"line":402},[221,4378,3890],{"class":350},[221,4380,3893],{"class":342},[221,4382,347],{"class":346},[221,4384,351],{"class":350},[221,4386,4387,4389,4391],{"class":223,"line":420},[221,4388,3902],{"class":357},[221,4390,361],{"class":350},[221,4392,2710],{"class":346},[221,4394,4395,4397,4399,4401,4403],{"class":223,"line":426},[221,4396,3911],{"class":346},[221,4398,683],{"class":350},[221,4400,3916],{"class":342},[221,4402,347],{"class":346},[221,4404,351],{"class":350},[221,4406,4407,4410,4412,4414,4416,4418,4420,4422],{"class":223,"line":432},[221,4408,4409],{"class":357},"      include",[221,4411,361],{"class":350},[221,4413,364],{"class":346},[221,4415,367],{"class":350},[221,4417,2480],{"class":230},[221,4419,367],{"class":350},[221,4421,375],{"class":346},[221,4423,378],{"class":350},[221,4425,4426,4429,4431,4433,4435,4438,4440,4442],{"class":223,"line":950},[221,4427,4428],{"class":357},"      exclude",[221,4430,361],{"class":350},[221,4432,364],{"class":346},[221,4434,367],{"class":350},[221,4436,4437],{"class":230},"/_internal/**",[221,4439,367],{"class":350},[221,4441,375],{"class":346},[221,4443,378],{"class":350},[221,4445,4446,4449,4451],{"class":223,"line":1286},[221,4447,4448],{"class":357},"      routes",[221,4450,361],{"class":350},[221,4452,389],{"class":350},[221,4454,4455,4458,4461,4463,4465,4467,4469,4471,4473,4476,4478],{"class":223,"line":1296},[221,4456,4457],{"class":350},"        '",[221,4459,4460],{"class":357},"/api/auth/**",[221,4462,367],{"class":350},[221,4464,361],{"class":350},[221,4466,476],{"class":350},[221,4468,1240],{"class":357},[221,4470,361],{"class":350},[221,4472,410],{"class":350},[221,4474,4475],{"class":230},"auth-service",[221,4477,367],{"class":350},[221,4479,2742],{"class":350},[221,4481,4482],{"class":223,"line":1306},[221,4483,3603],{"class":350},[221,4485,4486,4489,4491,4493,4495],{"class":223,"line":1312},[221,4487,4488],{"class":357},"      drain",[221,4490,361],{"class":350},[221,4492,2393],{"class":342},[221,4494,1370],{"class":346},[221,4496,378],{"class":350},[221,4498,4499,4502,4504,4506,4508,4510,4512],{"class":223,"line":2570},[221,4500,4501],{"class":342},"      enrich",[221,4503,361],{"class":350},[221,4505,641],{"class":350},[221,4507,2511],{"class":644},[221,4509,652],{"class":350},[221,4511,655],{"class":506},[221,4513,389],{"class":350},[221,4515,4516,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537],{"class":223,"line":2616},[221,4517,4518],{"class":346},"        ctx",[221,4520,683],{"class":350},[221,4522,2527],{"class":346},[221,4524,683],{"class":350},[221,4526,2532],{"class":346},[221,4528,533],{"class":350},[221,4530,2537],{"class":346},[221,4532,683],{"class":350},[221,4534,1541],{"class":346},[221,4536,683],{"class":350},[221,4538,2546],{"class":346},[221,4540,4541],{"class":223,"line":2621},[221,4542,3603],{"class":350},[221,4544,4545,4548,4550,4552,4554,4556,4558],{"class":223,"line":3610},[221,4546,4547],{"class":342},"      keep",[221,4549,361],{"class":350},[221,4551,641],{"class":350},[221,4553,2511],{"class":644},[221,4555,652],{"class":350},[221,4557,655],{"class":506},[221,4559,389],{"class":350},[221,4561,4562,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595],{"class":223,"line":3615},[221,4563,4564],{"class":335},"        if",[221,4566,641],{"class":357},[221,4568,2511],{"class":346},[221,4570,683],{"class":350},[221,4572,2582],{"class":346},[221,4574,2585],{"class":350},[221,4576,2588],{"class":346},[221,4578,683],{"class":350},[221,4580,2582],{"class":346},[221,4582,2595],{"class":350},[221,4584,2599],{"class":2598},[221,4586,928],{"class":357},[221,4588,2511],{"class":346},[221,4590,683],{"class":350},[221,4592,2608],{"class":346},[221,4594,533],{"class":350},[221,4596,2613],{"class":741},[221,4598,4600],{"class":223,"line":4599},19,[221,4601,3603],{"class":350},[221,4603,4605,4607,4609],{"class":223,"line":4604},20,[221,4606,2747],{"class":350},[221,4608,652],{"class":346},[221,4610,378],{"class":350},[221,4612,4614,4616],{"class":223,"line":4613},21,[221,4615,2754],{"class":346},[221,4617,378],{"class":350},[221,4619,4621,4623],{"class":223,"line":4620},22,[221,4622,435],{"class":350},[221,4624,438],{"class":346},[221,4626,4628,4630,4632,4634],{"class":223,"line":4627},23,[221,4629,336],{"class":335},[221,4631,3939],{"class":506},[221,4633,3942],{"class":227},[221,4635,2181],{"class":350},[198,4637,4638,4639,4642,4643,361],{},"For async configuration (e.g. from ",[218,4640,4641],{},"ConfigService","), use ",[218,4644,4645],{},"forRootAsync()",[210,4647,4649],{"className":325,"code":4648,"filename":3840,"language":328,"meta":216,"style":216},"EvlogModule.forRootAsync({\n  imports: [ConfigModule],\n  inject: [ConfigService],\n  useFactory: (config: ConfigService) => ({\n    drain: createAxiomDrain({ token: config.get('AXIOM_TOKEN') }),\n  }),\n})\n",[218,4650,4651,4664,4675,4687,4712,4754,4763],{"__ignoreMap":216},[221,4652,4653,4655,4657,4660,4662],{"class":223,"line":224},[221,4654,3835],{"class":346},[221,4656,683],{"class":350},[221,4658,4659],{"class":342},"forRootAsync",[221,4661,347],{"class":346},[221,4663,351],{"class":350},[221,4665,4666,4668,4670,4673],{"class":223,"line":354},[221,4667,3902],{"class":357},[221,4669,361],{"class":350},[221,4671,4672],{"class":346}," [ConfigModule]",[221,4674,378],{"class":350},[221,4676,4677,4680,4682,4685],{"class":223,"line":381},[221,4678,4679],{"class":357},"  inject",[221,4681,361],{"class":350},[221,4683,4684],{"class":346}," [ConfigService]",[221,4686,378],{"class":350},[221,4688,4689,4692,4694,4696,4699,4701,4704,4706,4708,4710],{"class":223,"line":392},[221,4690,4691],{"class":342},"  useFactory",[221,4693,361],{"class":350},[221,4695,641],{"class":350},[221,4697,4698],{"class":644},"config",[221,4700,361],{"class":350},[221,4702,4703],{"class":227}," ConfigService",[221,4705,652],{"class":350},[221,4707,655],{"class":506},[221,4709,641],{"class":346},[221,4711,351],{"class":350},[221,4713,4714,4717,4719,4721,4723,4725,4728,4730,4733,4735,4737,4739,4741,4744,4746,4748,4750,4752],{"class":223,"line":402},[221,4715,4716],{"class":357},"    drain",[221,4718,361],{"class":350},[221,4720,2393],{"class":342},[221,4722,347],{"class":346},[221,4724,691],{"class":350},[221,4726,4727],{"class":357}," token",[221,4729,361],{"class":350},[221,4731,4732],{"class":346}," config",[221,4734,683],{"class":350},[221,4736,916],{"class":342},[221,4738,347],{"class":346},[221,4740,367],{"class":350},[221,4742,4743],{"class":230},"AXIOM_TOKEN",[221,4745,367],{"class":350},[221,4747,928],{"class":346},[221,4749,435],{"class":350},[221,4751,652],{"class":346},[221,4753,378],{"class":350},[221,4755,4756,4759,4761],{"class":223,"line":420},[221,4757,4758],{"class":350},"  }",[221,4760,652],{"class":346},[221,4762,378],{"class":350},[221,4764,4765,4767],{"class":223,"line":426},[221,4766,435],{"class":350},[221,4768,438],{"class":346},[198,4770,4771,4772,969,4774,361],{},"Handle errors with a NestJS exception filter using ",[218,4773,1780],{},[218,4775,4776],{},"parseError()",[210,4778,4781],{"className":325,"code":4779,"filename":4780,"language":328,"meta":216,"style":216},"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",[218,4782,4783,4802,4828,4847,4865,4869,4878,4894,4922,4947,4990,4994,5023,5027,5044,5073,5115,5121,5125],{"__ignoreMap":216},[221,4784,4785,4787,4789,4792,4794,4796,4798,4800],{"class":223,"line":224},[221,4786,473],{"class":335},[221,4788,476],{"class":350},[221,4790,4791],{"class":346}," Catch",[221,4793,482],{"class":350},[221,4795,485],{"class":335},[221,4797,410],{"class":350},[221,4799,3860],{"class":230},[221,4801,493],{"class":350},[221,4803,4804,4806,4808,4810,4813,4815,4818,4820,4822,4824,4826],{"class":223,"line":354},[221,4805,473],{"class":335},[221,4807,2097],{"class":335},[221,4809,476],{"class":350},[221,4811,4812],{"class":346}," ExceptionFilter",[221,4814,515],{"class":350},[221,4816,4817],{"class":346}," ArgumentsHost",[221,4819,482],{"class":350},[221,4821,485],{"class":335},[221,4823,410],{"class":350},[221,4825,3860],{"class":230},[221,4827,493],{"class":350},[221,4829,4830,4832,4834,4837,4839,4841,4843,4845],{"class":223,"line":381},[221,4831,473],{"class":335},[221,4833,476],{"class":350},[221,4835,4836],{"class":346}," parseError",[221,4838,482],{"class":350},[221,4840,485],{"class":335},[221,4842,410],{"class":350},[221,4844,1993],{"class":230},[221,4846,493],{"class":350},[221,4848,4849,4851,4853,4855,4857,4859,4861,4863],{"class":223,"line":392},[221,4850,473],{"class":335},[221,4852,476],{"class":350},[221,4854,518],{"class":346},[221,4856,482],{"class":350},[221,4858,485],{"class":335},[221,4860,410],{"class":350},[221,4862,3794],{"class":230},[221,4864,493],{"class":350},[221,4866,4867],{"class":223,"line":402},[221,4868,499],{"emptyLinePlaceholder":498},[221,4870,4871,4873,4876],{"class":223,"line":420},[221,4872,3890],{"class":350},[221,4874,4875],{"class":342},"Catch",[221,4877,849],{"class":346},[221,4879,4880,4882,4884,4887,4890,4892],{"class":223,"line":426},[221,4881,336],{"class":335},[221,4883,3939],{"class":506},[221,4885,4886],{"class":227}," EvlogExceptionFilter",[221,4888,4889],{"class":506}," implements",[221,4891,4812],{"class":227},[221,4893,389],{"class":350},[221,4895,4896,4899,4901,4904,4906,4909,4911,4914,4916,4918,4920],{"class":223,"line":432},[221,4897,4898],{"class":357},"  catch",[221,4900,347],{"class":350},[221,4902,4903],{"class":644},"exception",[221,4905,361],{"class":350},[221,4907,4908],{"class":227}," unknown",[221,4910,515],{"class":350},[221,4912,4913],{"class":644}," host",[221,4915,361],{"class":350},[221,4917,4817],{"class":227},[221,4919,652],{"class":350},[221,4921,389],{"class":350},[221,4923,4924,4926,4929,4931,4933,4935,4938,4940,4942,4945],{"class":223,"line":950},[221,4925,4240],{"class":506},[221,4927,4928],{"class":346}," response",[221,4930,533],{"class":350},[221,4932,4913],{"class":346},[221,4934,683],{"class":350},[221,4936,4937],{"class":342},"switchToHttp",[221,4939,1370],{"class":357},[221,4941,683],{"class":350},[221,4943,4944],{"class":342},"getResponse",[221,4946,849],{"class":357},[221,4948,4949,4951,4954,4956,4959,4962,4965,4968,4970,4973,4976,4978,4980,4983,4985,4987],{"class":223,"line":1286},[221,4950,4240],{"class":506},[221,4952,4953],{"class":346}," error",[221,4955,533],{"class":350},[221,4957,4958],{"class":346}," exception",[221,4960,4961],{"class":350}," instanceof",[221,4963,4964],{"class":227}," Error",[221,4966,4967],{"class":350}," ?",[221,4969,4958],{"class":346},[221,4971,4972],{"class":350}," :",[221,4974,4975],{"class":350}," new",[221,4977,4964],{"class":342},[221,4979,347],{"class":357},[221,4981,4982],{"class":342},"String",[221,4984,347],{"class":357},[221,4986,4903],{"class":346},[221,4988,4989],{"class":357},"))\n",[221,4991,4992],{"class":223,"line":1296},[221,4993,499],{"emptyLinePlaceholder":498},[221,4995,4996,4999,5001,5003,5005,5007,5010,5012,5014,5016,5018,5021],{"class":223,"line":1306},[221,4997,4998],{"class":335},"    try",[221,5000,476],{"class":350},[221,5002,518],{"class":342},[221,5004,1370],{"class":357},[221,5006,683],{"class":350},[221,5008,5009],{"class":342},"error",[221,5011,347],{"class":357},[221,5013,5009],{"class":346},[221,5015,928],{"class":357},[221,5017,435],{"class":350},[221,5019,5020],{"class":335}," catch",[221,5022,2181],{"class":350},[221,5024,5025],{"class":223,"line":1312},[221,5026,499],{"emptyLinePlaceholder":498},[221,5028,5029,5031,5034,5036,5038,5040,5042],{"class":223,"line":2570},[221,5030,4240],{"class":506},[221,5032,5033],{"class":346}," parsed",[221,5035,533],{"class":350},[221,5037,4836],{"class":342},[221,5039,347],{"class":357},[221,5041,5009],{"class":346},[221,5043,438],{"class":357},[221,5045,5046,5049,5051,5054,5056,5059,5061,5063,5065,5067,5069,5071],{"class":223,"line":2616},[221,5047,5048],{"class":346},"    response",[221,5050,683],{"class":350},[221,5052,5053],{"class":342},"status",[221,5055,347],{"class":357},[221,5057,5058],{"class":346},"parsed",[221,5060,683],{"class":350},[221,5062,5053],{"class":346},[221,5064,652],{"class":357},[221,5066,683],{"class":350},[221,5068,729],{"class":342},[221,5070,347],{"class":357},[221,5072,351],{"class":350},[221,5074,5075,5078,5080,5082,5084,5087,5089,5092,5094,5096,5098,5100,5102,5105,5107,5109,5111,5113],{"class":223,"line":2621},[221,5076,5077],{"class":357},"      message",[221,5079,361],{"class":350},[221,5081,5033],{"class":346},[221,5083,683],{"class":350},[221,5085,5086],{"class":346},"message",[221,5088,515],{"class":350},[221,5090,5091],{"class":357}," why",[221,5093,361],{"class":350},[221,5095,5033],{"class":346},[221,5097,683],{"class":350},[221,5099,3641],{"class":346},[221,5101,515],{"class":350},[221,5103,5104],{"class":357}," fix",[221,5106,361],{"class":350},[221,5108,5033],{"class":346},[221,5110,683],{"class":350},[221,5112,3644],{"class":346},[221,5114,378],{"class":350},[221,5116,5117,5119],{"class":223,"line":3610},[221,5118,2747],{"class":350},[221,5120,438],{"class":357},[221,5122,5123],{"class":223,"line":3615},[221,5124,2166],{"class":350},[221,5126,5127],{"class":223,"line":4599},[221,5128,1084],{"class":350},[956,5130,2628,5131,2632],{"color":1896,"icon":1897},[309,5132,5133],{"href":168},"NestJS example",[279,5135,172],{"id":5136},"express",[198,5138,5139,5140,3799,5143,3803,5145,3806],{},"evlog provides Express middleware at ",[218,5141,5142],{},"evlog/express",[218,5144,3802],{},[218,5146,1780],{},[210,5148,5150],{"className":212,"code":5149,"language":215,"meta":216,"style":216},"npm install evlog express\n",[218,5151,5152],{"__ignoreMap":216},[221,5153,5154,5156,5158,5160],{"class":223,"line":224},[221,5155,238],{"class":227},[221,5157,247],{"class":230},[221,5159,3820],{"class":230},[221,5161,5162],{"class":230}," express\n",[210,5164,5167],{"className":325,"code":5165,"filename":5166,"language":328,"meta":216,"style":216},"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",[218,5168,5169,5184,5202,5220,5224,5232,5254,5260,5264,5277,5281,5298,5302,5337,5375,5399,5405,5409],{"__ignoreMap":216},[221,5170,5171,5173,5176,5178,5180,5182],{"class":223,"line":224},[221,5172,473],{"class":335},[221,5174,5175],{"class":346}," express ",[221,5177,2678],{"class":335},[221,5179,410],{"class":350},[221,5181,5136],{"class":230},[221,5183,493],{"class":350},[221,5185,5186,5188,5190,5192,5194,5196,5198,5200],{"class":223,"line":354},[221,5187,473],{"class":335},[221,5189,476],{"class":350},[221,5191,1984],{"class":346},[221,5193,482],{"class":350},[221,5195,485],{"class":335},[221,5197,410],{"class":350},[221,5199,1993],{"class":230},[221,5201,493],{"class":350},[221,5203,5204,5206,5208,5210,5212,5214,5216,5218],{"class":223,"line":381},[221,5205,473],{"class":335},[221,5207,476],{"class":350},[221,5209,3820],{"class":346},[221,5211,482],{"class":350},[221,5213,485],{"class":335},[221,5215,410],{"class":350},[221,5217,5142],{"class":230},[221,5219,493],{"class":350},[221,5221,5222],{"class":223,"line":392},[221,5223,499],{"emptyLinePlaceholder":498},[221,5225,5226,5228,5230],{"class":223,"line":402},[221,5227,2024],{"class":342},[221,5229,347],{"class":346},[221,5231,351],{"class":350},[221,5233,5234,5237,5239,5241,5243,5245,5247,5250,5252],{"class":223,"line":420},[221,5235,5236],{"class":357},"  env",[221,5238,361],{"class":350},[221,5240,476],{"class":350},[221,5242,1240],{"class":357},[221,5244,361],{"class":350},[221,5246,410],{"class":350},[221,5248,5249],{"class":230},"express-api",[221,5251,367],{"class":350},[221,5253,2742],{"class":350},[221,5255,5256,5258],{"class":223,"line":426},[221,5257,435],{"class":350},[221,5259,438],{"class":346},[221,5261,5262],{"class":223,"line":432},[221,5263,499],{"emptyLinePlaceholder":498},[221,5265,5266,5268,5270,5272,5275],{"class":223,"line":950},[221,5267,4054],{"class":506},[221,5269,4057],{"class":346},[221,5271,631],{"class":350},[221,5273,5274],{"class":342}," express",[221,5276,849],{"class":346},[221,5278,5279],{"class":223,"line":1286},[221,5280,499],{"emptyLinePlaceholder":498},[221,5282,5283,5286,5288,5291,5293,5295],{"class":223,"line":1296},[221,5284,5285],{"class":346},"app",[221,5287,683],{"class":350},[221,5289,5290],{"class":342},"use",[221,5292,347],{"class":346},[221,5294,1993],{"class":342},[221,5296,5297],{"class":346},"())\n",[221,5299,5300],{"class":223,"line":1306},[221,5301,499],{"emptyLinePlaceholder":498},[221,5303,5304,5306,5308,5310,5312,5314,5317,5319,5321,5323,5326,5328,5331,5333,5335],{"class":223,"line":1312},[221,5305,5285],{"class":346},[221,5307,683],{"class":350},[221,5309,916],{"class":342},[221,5311,347],{"class":346},[221,5313,367],{"class":350},[221,5315,5316],{"class":230},"/api/users",[221,5318,367],{"class":350},[221,5320,515],{"class":350},[221,5322,641],{"class":350},[221,5324,5325],{"class":644},"req",[221,5327,515],{"class":350},[221,5329,5330],{"class":644}," res",[221,5332,652],{"class":350},[221,5334,655],{"class":506},[221,5336,389],{"class":350},[221,5338,5339,5342,5344,5346,5348,5350,5352,5354,5357,5359,5361,5364,5366,5369,5371,5373],{"class":223,"line":2570},[221,5340,5341],{"class":346},"  req",[221,5343,683],{"class":350},[221,5345,1320],{"class":346},[221,5347,683],{"class":350},[221,5349,686],{"class":342},[221,5351,347],{"class":357},[221,5353,691],{"class":350},[221,5355,5356],{"class":357}," users",[221,5358,361],{"class":350},[221,5360,476],{"class":350},[221,5362,5363],{"class":357}," count",[221,5365,361],{"class":350},[221,5367,5368],{"class":2598}," 42",[221,5370,482],{"class":350},[221,5372,482],{"class":350},[221,5374,438],{"class":357},[221,5376,5377,5380,5382,5384,5386,5388,5390,5392,5395,5397],{"class":223,"line":2616},[221,5378,5379],{"class":346},"  res",[221,5381,683],{"class":350},[221,5383,729],{"class":342},[221,5385,347],{"class":357},[221,5387,691],{"class":350},[221,5389,5356],{"class":357},[221,5391,361],{"class":350},[221,5393,5394],{"class":357}," [] ",[221,5396,435],{"class":350},[221,5398,438],{"class":357},[221,5400,5401,5403],{"class":223,"line":2621},[221,5402,435],{"class":350},[221,5404,438],{"class":346},[221,5406,5407],{"class":223,"line":3610},[221,5408,499],{"emptyLinePlaceholder":498},[221,5410,5411,5413,5415,5417,5419,5421],{"class":223,"line":3615},[221,5412,5285],{"class":346},[221,5414,683],{"class":350},[221,5416,4085],{"class":342},[221,5418,347],{"class":346},[221,5420,4090],{"class":2598},[221,5422,438],{"class":346},[198,5424,5425],{},"The middleware supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[210,5427,5429],{"className":325,"code":5428,"language":328,"meta":216,"style":216},"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",[218,5430,5431,5449,5469,5473,5486,5490,5506,5524,5543,5552,5577,5581,5593,5609,5620,5644,5648,5664,5700,5704],{"__ignoreMap":216},[221,5432,5433,5435,5437,5439,5441,5443,5445,5447],{"class":223,"line":224},[221,5434,473],{"class":335},[221,5436,476],{"class":350},[221,5438,2393],{"class":346},[221,5440,482],{"class":350},[221,5442,485],{"class":335},[221,5444,410],{"class":350},[221,5446,2402],{"class":230},[221,5448,493],{"class":350},[221,5450,5451,5453,5455,5458,5460,5462,5464,5467],{"class":223,"line":354},[221,5452,473],{"class":335},[221,5454,476],{"class":350},[221,5456,5457],{"class":346}," createUserAgentEnricher",[221,5459,482],{"class":350},[221,5461,485],{"class":335},[221,5463,410],{"class":350},[221,5465,5466],{"class":230},"evlog/enrichers",[221,5468,493],{"class":350},[221,5470,5471],{"class":223,"line":381},[221,5472,499],{"emptyLinePlaceholder":498},[221,5474,5475,5477,5480,5482,5484],{"class":223,"line":392},[221,5476,4054],{"class":506},[221,5478,5479],{"class":346}," userAgent ",[221,5481,631],{"class":350},[221,5483,5457],{"class":342},[221,5485,849],{"class":346},[221,5487,5488],{"class":223,"line":402},[221,5489,499],{"emptyLinePlaceholder":498},[221,5491,5492,5494,5496,5498,5500,5502,5504],{"class":223,"line":420},[221,5493,5285],{"class":346},[221,5495,683],{"class":350},[221,5497,5290],{"class":342},[221,5499,347],{"class":346},[221,5501,1993],{"class":342},[221,5503,347],{"class":346},[221,5505,351],{"class":350},[221,5507,5508,5510,5512,5514,5516,5518,5520,5522],{"class":223,"line":426},[221,5509,2471],{"class":357},[221,5511,361],{"class":350},[221,5513,364],{"class":346},[221,5515,367],{"class":350},[221,5517,2480],{"class":230},[221,5519,367],{"class":350},[221,5521,375],{"class":346},[221,5523,378],{"class":350},[221,5525,5526,5529,5531,5533,5535,5537,5539,5541],{"class":223,"line":432},[221,5527,5528],{"class":357},"  exclude",[221,5530,361],{"class":350},[221,5532,364],{"class":346},[221,5534,367],{"class":350},[221,5536,4437],{"class":230},[221,5538,367],{"class":350},[221,5540,375],{"class":346},[221,5542,378],{"class":350},[221,5544,5545,5548,5550],{"class":223,"line":950},[221,5546,5547],{"class":357},"  routes",[221,5549,361],{"class":350},[221,5551,389],{"class":350},[221,5553,5554,5557,5559,5561,5563,5565,5567,5569,5571,5573,5575],{"class":223,"line":1286},[221,5555,5556],{"class":350},"    '",[221,5558,4460],{"class":357},[221,5560,367],{"class":350},[221,5562,361],{"class":350},[221,5564,476],{"class":350},[221,5566,1240],{"class":357},[221,5568,361],{"class":350},[221,5570,410],{"class":350},[221,5572,4475],{"class":230},[221,5574,367],{"class":350},[221,5576,2742],{"class":350},[221,5578,5579],{"class":223,"line":1296},[221,5580,429],{"class":350},[221,5582,5583,5585,5587,5589,5591],{"class":223,"line":1306},[221,5584,2491],{"class":357},[221,5586,361],{"class":350},[221,5588,2393],{"class":342},[221,5590,1370],{"class":346},[221,5592,378],{"class":350},[221,5594,5595,5597,5599,5601,5603,5605,5607],{"class":223,"line":1312},[221,5596,2504],{"class":342},[221,5598,361],{"class":350},[221,5600,641],{"class":350},[221,5602,2511],{"class":644},[221,5604,652],{"class":350},[221,5606,655],{"class":506},[221,5608,389],{"class":350},[221,5610,5611,5614,5616,5618],{"class":223,"line":2570},[221,5612,5613],{"class":342},"    userAgent",[221,5615,347],{"class":357},[221,5617,2511],{"class":346},[221,5619,438],{"class":357},[221,5621,5622,5624,5626,5628,5630,5632,5634,5636,5638,5640,5642],{"class":223,"line":2616},[221,5623,2522],{"class":346},[221,5625,683],{"class":350},[221,5627,2527],{"class":346},[221,5629,683],{"class":350},[221,5631,2532],{"class":346},[221,5633,533],{"class":350},[221,5635,2537],{"class":346},[221,5637,683],{"class":350},[221,5639,1541],{"class":346},[221,5641,683],{"class":350},[221,5643,2546],{"class":346},[221,5645,5646],{"class":223,"line":2621},[221,5647,429],{"class":350},[221,5649,5650,5652,5654,5656,5658,5660,5662],{"class":223,"line":3610},[221,5651,2555],{"class":342},[221,5653,361],{"class":350},[221,5655,641],{"class":350},[221,5657,2511],{"class":644},[221,5659,652],{"class":350},[221,5661,655],{"class":506},[221,5663,389],{"class":350},[221,5665,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5692,5694,5696,5698],{"class":223,"line":3615},[221,5667,2573],{"class":335},[221,5669,641],{"class":357},[221,5671,2511],{"class":346},[221,5673,683],{"class":350},[221,5675,2582],{"class":346},[221,5677,2585],{"class":350},[221,5679,2588],{"class":346},[221,5681,683],{"class":350},[221,5683,2582],{"class":346},[221,5685,2595],{"class":350},[221,5687,2599],{"class":2598},[221,5689,928],{"class":357},[221,5691,2511],{"class":346},[221,5693,683],{"class":350},[221,5695,2608],{"class":346},[221,5697,533],{"class":350},[221,5699,2613],{"class":741},[221,5701,5702],{"class":223,"line":4599},[221,5703,429],{"class":350},[221,5705,5706,5708],{"class":223,"line":4604},[221,5707,435],{"class":350},[221,5709,4989],{"class":346},[198,5711,5712],{},"Handle errors with Express's error handler middleware:",[210,5714,5716],{"className":325,"code":5715,"language":328,"meta":216,"style":216},"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",[218,5717,5718,5741,5745,5770,5820,5826,5830,5864,5882,5898,5962],{"__ignoreMap":216},[221,5719,5720,5722,5724,5727,5729,5731,5733,5735,5737,5739],{"class":223,"line":224},[221,5721,473],{"class":335},[221,5723,476],{"class":350},[221,5725,5726],{"class":346}," createError",[221,5728,515],{"class":350},[221,5730,4836],{"class":346},[221,5732,482],{"class":350},[221,5734,485],{"class":335},[221,5736,410],{"class":350},[221,5738,1993],{"class":230},[221,5740,493],{"class":350},[221,5742,5743],{"class":223,"line":354},[221,5744,499],{"emptyLinePlaceholder":498},[221,5746,5747,5749,5751,5753,5755,5757,5760,5762,5764,5766,5768],{"class":223,"line":381},[221,5748,5285],{"class":346},[221,5750,683],{"class":350},[221,5752,916],{"class":342},[221,5754,347],{"class":346},[221,5756,367],{"class":350},[221,5758,5759],{"class":230},"/checkout",[221,5761,367],{"class":350},[221,5763,515],{"class":350},[221,5765,3473],{"class":350},[221,5767,655],{"class":506},[221,5769,389],{"class":350},[221,5771,5772,5775,5777,5779,5781,5784,5786,5788,5791,5793,5795,5798,5800,5803,5805,5807,5809,5811,5814,5816,5818],{"class":223,"line":392},[221,5773,5774],{"class":335},"  throw",[221,5776,5726],{"class":342},[221,5778,347],{"class":357},[221,5780,691],{"class":350},[221,5782,5783],{"class":357}," message",[221,5785,361],{"class":350},[221,5787,410],{"class":350},[221,5789,5790],{"class":230},"Payment failed",[221,5792,367],{"class":350},[221,5794,515],{"class":350},[221,5796,5797],{"class":357}," status",[221,5799,361],{"class":350},[221,5801,5802],{"class":2598}," 402",[221,5804,515],{"class":350},[221,5806,5091],{"class":357},[221,5808,361],{"class":350},[221,5810,410],{"class":350},[221,5812,5813],{"class":230},"Card declined",[221,5815,367],{"class":350},[221,5817,482],{"class":350},[221,5819,438],{"class":357},[221,5821,5822,5824],{"class":223,"line":402},[221,5823,435],{"class":350},[221,5825,438],{"class":346},[221,5827,5828],{"class":223,"line":420},[221,5829,499],{"emptyLinePlaceholder":498},[221,5831,5832,5834,5836,5838,5840,5842,5845,5847,5849,5851,5853,5855,5858,5860,5862],{"class":223,"line":426},[221,5833,5285],{"class":346},[221,5835,683],{"class":350},[221,5837,5290],{"class":342},[221,5839,347],{"class":346},[221,5841,347],{"class":350},[221,5843,5844],{"class":644},"err",[221,5846,515],{"class":350},[221,5848,3485],{"class":644},[221,5850,515],{"class":350},[221,5852,5330],{"class":644},[221,5854,515],{"class":350},[221,5856,5857],{"class":644}," next",[221,5859,652],{"class":350},[221,5861,655],{"class":506},[221,5863,389],{"class":350},[221,5865,5866,5868,5870,5872,5874,5876,5878,5880],{"class":223,"line":432},[221,5867,5341],{"class":346},[221,5869,683],{"class":350},[221,5871,1320],{"class":346},[221,5873,683],{"class":350},[221,5875,5009],{"class":342},[221,5877,347],{"class":357},[221,5879,5844],{"class":346},[221,5881,438],{"class":357},[221,5883,5884,5886,5888,5890,5892,5894,5896],{"class":223,"line":950},[221,5885,662],{"class":506},[221,5887,5033],{"class":346},[221,5889,533],{"class":350},[221,5891,4836],{"class":342},[221,5893,347],{"class":357},[221,5895,5844],{"class":346},[221,5897,438],{"class":357},[221,5899,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,5952,5954,5956,5958,5960],{"class":223,"line":1286},[221,5901,5379],{"class":346},[221,5903,683],{"class":350},[221,5905,5053],{"class":342},[221,5907,347],{"class":357},[221,5909,5058],{"class":346},[221,5911,683],{"class":350},[221,5913,5053],{"class":346},[221,5915,652],{"class":357},[221,5917,683],{"class":350},[221,5919,729],{"class":342},[221,5921,347],{"class":357},[221,5923,691],{"class":350},[221,5925,5783],{"class":357},[221,5927,361],{"class":350},[221,5929,5033],{"class":346},[221,5931,683],{"class":350},[221,5933,5086],{"class":346},[221,5935,515],{"class":350},[221,5937,5091],{"class":357},[221,5939,361],{"class":350},[221,5941,5033],{"class":346},[221,5943,683],{"class":350},[221,5945,3641],{"class":346},[221,5947,515],{"class":350},[221,5949,5104],{"class":357},[221,5951,361],{"class":350},[221,5953,5033],{"class":346},[221,5955,683],{"class":350},[221,5957,3644],{"class":346},[221,5959,482],{"class":350},[221,5961,438],{"class":357},[221,5963,5964,5966],{"class":223,"line":1296},[221,5965,435],{"class":350},[221,5967,438],{"class":346},[956,5969,2628,5970,2632],{"color":1896,"icon":1897},[309,5971,5972],{"href":173},"Express example",[279,5974,177],{"id":5975},"hono",[198,5977,5978,5979,5982],{},"evlog provides a first-class Hono middleware at ",[218,5980,5981],{},"evlog/hono",". It auto-creates a request-scoped logger and emits a wide event on response.",[210,5984,5986],{"className":212,"code":5985,"language":215,"meta":216,"style":216},"bun add evlog hono\n",[218,5987,5988],{"__ignoreMap":216},[221,5989,5990,5992,5994,5996],{"class":223,"line":224},[221,5991,267],{"class":227},[221,5993,231],{"class":230},[221,5995,3820],{"class":230},[221,5997,5998],{"class":230}," hono\n",[210,6000,6002],{"className":325,"code":6001,"filename":5166,"language":328,"meta":216,"style":216},"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",[218,6003,6004,6024,6043,6061,6086,6090,6098,6119,6125,6129,6152,6156,6170,6174,6203,6228,6258,6282,6288,6292],{"__ignoreMap":216},[221,6005,6006,6008,6010,6013,6015,6017,6019,6022],{"class":223,"line":224},[221,6007,473],{"class":335},[221,6009,476],{"class":350},[221,6011,6012],{"class":346}," serve",[221,6014,482],{"class":350},[221,6016,485],{"class":335},[221,6018,410],{"class":350},[221,6020,6021],{"class":230},"@hono/node-server",[221,6023,493],{"class":350},[221,6025,6026,6028,6030,6033,6035,6037,6039,6041],{"class":223,"line":354},[221,6027,473],{"class":335},[221,6029,476],{"class":350},[221,6031,6032],{"class":346}," Hono",[221,6034,482],{"class":350},[221,6036,485],{"class":335},[221,6038,410],{"class":350},[221,6040,5975],{"class":230},[221,6042,493],{"class":350},[221,6044,6045,6047,6049,6051,6053,6055,6057,6059],{"class":223,"line":381},[221,6046,473],{"class":335},[221,6048,476],{"class":350},[221,6050,1984],{"class":346},[221,6052,482],{"class":350},[221,6054,485],{"class":335},[221,6056,410],{"class":350},[221,6058,1993],{"class":230},[221,6060,493],{"class":350},[221,6062,6063,6065,6067,6069,6071,6073,6076,6078,6080,6082,6084],{"class":223,"line":392},[221,6064,473],{"class":335},[221,6066,476],{"class":350},[221,6068,3820],{"class":346},[221,6070,515],{"class":350},[221,6072,2097],{"class":335},[221,6074,6075],{"class":346}," EvlogVariables",[221,6077,482],{"class":350},[221,6079,485],{"class":335},[221,6081,410],{"class":350},[221,6083,5981],{"class":230},[221,6085,493],{"class":350},[221,6087,6088],{"class":223,"line":402},[221,6089,499],{"emptyLinePlaceholder":498},[221,6091,6092,6094,6096],{"class":223,"line":420},[221,6093,2024],{"class":342},[221,6095,347],{"class":346},[221,6097,351],{"class":350},[221,6099,6100,6102,6104,6106,6108,6110,6112,6115,6117],{"class":223,"line":426},[221,6101,5236],{"class":357},[221,6103,361],{"class":350},[221,6105,476],{"class":350},[221,6107,1240],{"class":357},[221,6109,361],{"class":350},[221,6111,410],{"class":350},[221,6113,6114],{"class":230},"hono-api",[221,6116,367],{"class":350},[221,6118,2742],{"class":350},[221,6120,6121,6123],{"class":223,"line":432},[221,6122,435],{"class":350},[221,6124,438],{"class":346},[221,6126,6127],{"class":223,"line":950},[221,6128,499],{"emptyLinePlaceholder":498},[221,6130,6131,6133,6135,6137,6139,6141,6144,6147,6150],{"class":223,"line":1286},[221,6132,4054],{"class":506},[221,6134,4057],{"class":346},[221,6136,631],{"class":350},[221,6138,4975],{"class":350},[221,6140,6032],{"class":342},[221,6142,6143],{"class":350},"\u003C",[221,6145,6146],{"class":227},"EvlogVariables",[221,6148,6149],{"class":350},">",[221,6151,849],{"class":346},[221,6153,6154],{"class":223,"line":1296},[221,6155,499],{"emptyLinePlaceholder":498},[221,6157,6158,6160,6162,6164,6166,6168],{"class":223,"line":1306},[221,6159,5285],{"class":346},[221,6161,683],{"class":350},[221,6163,5290],{"class":342},[221,6165,347],{"class":346},[221,6167,1993],{"class":342},[221,6169,5297],{"class":346},[221,6171,6172],{"class":223,"line":1312},[221,6173,499],{"emptyLinePlaceholder":498},[221,6175,6176,6178,6180,6182,6184,6186,6188,6190,6192,6194,6197,6199,6201],{"class":223,"line":2570},[221,6177,5285],{"class":346},[221,6179,683],{"class":350},[221,6181,916],{"class":342},[221,6183,347],{"class":346},[221,6185,367],{"class":350},[221,6187,5316],{"class":230},[221,6189,367],{"class":350},[221,6191,515],{"class":350},[221,6193,641],{"class":350},[221,6195,6196],{"class":644},"c",[221,6198,652],{"class":350},[221,6200,655],{"class":506},[221,6202,389],{"class":350},[221,6204,6205,6207,6209,6211,6214,6216,6218,6220,6222,6224,6226],{"class":223,"line":2616},[221,6206,662],{"class":506},[221,6208,523],{"class":346},[221,6210,533],{"class":350},[221,6212,6213],{"class":346}," c",[221,6215,683],{"class":350},[221,6217,916],{"class":342},[221,6219,347],{"class":357},[221,6221,367],{"class":350},[221,6223,1320],{"class":230},[221,6225,367],{"class":350},[221,6227,438],{"class":357},[221,6229,6230,6232,6234,6236,6238,6240,6242,6244,6246,6248,6250,6252,6254,6256],{"class":223,"line":2621},[221,6231,680],{"class":346},[221,6233,683],{"class":350},[221,6235,686],{"class":342},[221,6237,347],{"class":357},[221,6239,691],{"class":350},[221,6241,5356],{"class":357},[221,6243,361],{"class":350},[221,6245,476],{"class":350},[221,6247,5363],{"class":357},[221,6249,361],{"class":350},[221,6251,5368],{"class":2598},[221,6253,482],{"class":350},[221,6255,482],{"class":350},[221,6257,438],{"class":357},[221,6259,6260,6262,6264,6266,6268,6270,6272,6274,6276,6278,6280],{"class":223,"line":3610},[221,6261,721],{"class":335},[221,6263,6213],{"class":346},[221,6265,683],{"class":350},[221,6267,729],{"class":342},[221,6269,347],{"class":357},[221,6271,691],{"class":350},[221,6273,5356],{"class":357},[221,6275,361],{"class":350},[221,6277,5394],{"class":357},[221,6279,435],{"class":350},[221,6281,438],{"class":357},[221,6283,6284,6286],{"class":223,"line":3615},[221,6285,435],{"class":350},[221,6287,438],{"class":346},[221,6289,6290],{"class":223,"line":4599},[221,6291,499],{"emptyLinePlaceholder":498},[221,6293,6294,6297,6299,6301,6304,6306,6308,6310,6313,6315,6318,6320,6323,6325],{"class":223,"line":4604},[221,6295,6296],{"class":342},"serve",[221,6298,347],{"class":346},[221,6300,691],{"class":350},[221,6302,6303],{"class":357}," fetch",[221,6305,361],{"class":350},[221,6307,4080],{"class":346},[221,6309,683],{"class":350},[221,6311,6312],{"class":346},"fetch",[221,6314,515],{"class":350},[221,6316,6317],{"class":357}," port",[221,6319,361],{"class":350},[221,6321,6322],{"class":2598}," 3000",[221,6324,482],{"class":350},[221,6326,438],{"class":346},[198,6328,6329,6330,6333],{},"The ",[218,6331,6332],{},"evlog()"," middleware supports the same features as Nuxt/Next.js — drain adapters, enrichers, and tail sampling:",[210,6335,6336],{"className":325,"code":5428,"language":328,"meta":216,"style":216},[218,6337,6338,6356,6374,6378,6390,6394,6410,6428,6446,6454,6478,6482,6494,6510,6520,6544,6548,6564,6600,6604],{"__ignoreMap":216},[221,6339,6340,6342,6344,6346,6348,6350,6352,6354],{"class":223,"line":224},[221,6341,473],{"class":335},[221,6343,476],{"class":350},[221,6345,2393],{"class":346},[221,6347,482],{"class":350},[221,6349,485],{"class":335},[221,6351,410],{"class":350},[221,6353,2402],{"class":230},[221,6355,493],{"class":350},[221,6357,6358,6360,6362,6364,6366,6368,6370,6372],{"class":223,"line":354},[221,6359,473],{"class":335},[221,6361,476],{"class":350},[221,6363,5457],{"class":346},[221,6365,482],{"class":350},[221,6367,485],{"class":335},[221,6369,410],{"class":350},[221,6371,5466],{"class":230},[221,6373,493],{"class":350},[221,6375,6376],{"class":223,"line":381},[221,6377,499],{"emptyLinePlaceholder":498},[221,6379,6380,6382,6384,6386,6388],{"class":223,"line":392},[221,6381,4054],{"class":506},[221,6383,5479],{"class":346},[221,6385,631],{"class":350},[221,6387,5457],{"class":342},[221,6389,849],{"class":346},[221,6391,6392],{"class":223,"line":402},[221,6393,499],{"emptyLinePlaceholder":498},[221,6395,6396,6398,6400,6402,6404,6406,6408],{"class":223,"line":420},[221,6397,5285],{"class":346},[221,6399,683],{"class":350},[221,6401,5290],{"class":342},[221,6403,347],{"class":346},[221,6405,1993],{"class":342},[221,6407,347],{"class":346},[221,6409,351],{"class":350},[221,6411,6412,6414,6416,6418,6420,6422,6424,6426],{"class":223,"line":426},[221,6413,2471],{"class":357},[221,6415,361],{"class":350},[221,6417,364],{"class":346},[221,6419,367],{"class":350},[221,6421,2480],{"class":230},[221,6423,367],{"class":350},[221,6425,375],{"class":346},[221,6427,378],{"class":350},[221,6429,6430,6432,6434,6436,6438,6440,6442,6444],{"class":223,"line":432},[221,6431,5528],{"class":357},[221,6433,361],{"class":350},[221,6435,364],{"class":346},[221,6437,367],{"class":350},[221,6439,4437],{"class":230},[221,6441,367],{"class":350},[221,6443,375],{"class":346},[221,6445,378],{"class":350},[221,6447,6448,6450,6452],{"class":223,"line":950},[221,6449,5547],{"class":357},[221,6451,361],{"class":350},[221,6453,389],{"class":350},[221,6455,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474,6476],{"class":223,"line":1286},[221,6457,5556],{"class":350},[221,6459,4460],{"class":357},[221,6461,367],{"class":350},[221,6463,361],{"class":350},[221,6465,476],{"class":350},[221,6467,1240],{"class":357},[221,6469,361],{"class":350},[221,6471,410],{"class":350},[221,6473,4475],{"class":230},[221,6475,367],{"class":350},[221,6477,2742],{"class":350},[221,6479,6480],{"class":223,"line":1296},[221,6481,429],{"class":350},[221,6483,6484,6486,6488,6490,6492],{"class":223,"line":1306},[221,6485,2491],{"class":357},[221,6487,361],{"class":350},[221,6489,2393],{"class":342},[221,6491,1370],{"class":346},[221,6493,378],{"class":350},[221,6495,6496,6498,6500,6502,6504,6506,6508],{"class":223,"line":1312},[221,6497,2504],{"class":342},[221,6499,361],{"class":350},[221,6501,641],{"class":350},[221,6503,2511],{"class":644},[221,6505,652],{"class":350},[221,6507,655],{"class":506},[221,6509,389],{"class":350},[221,6511,6512,6514,6516,6518],{"class":223,"line":2570},[221,6513,5613],{"class":342},[221,6515,347],{"class":357},[221,6517,2511],{"class":346},[221,6519,438],{"class":357},[221,6521,6522,6524,6526,6528,6530,6532,6534,6536,6538,6540,6542],{"class":223,"line":2616},[221,6523,2522],{"class":346},[221,6525,683],{"class":350},[221,6527,2527],{"class":346},[221,6529,683],{"class":350},[221,6531,2532],{"class":346},[221,6533,533],{"class":350},[221,6535,2537],{"class":346},[221,6537,683],{"class":350},[221,6539,1541],{"class":346},[221,6541,683],{"class":350},[221,6543,2546],{"class":346},[221,6545,6546],{"class":223,"line":2621},[221,6547,429],{"class":350},[221,6549,6550,6552,6554,6556,6558,6560,6562],{"class":223,"line":3610},[221,6551,2555],{"class":342},[221,6553,361],{"class":350},[221,6555,641],{"class":350},[221,6557,2511],{"class":644},[221,6559,652],{"class":350},[221,6561,655],{"class":506},[221,6563,389],{"class":350},[221,6565,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584,6586,6588,6590,6592,6594,6596,6598],{"class":223,"line":3615},[221,6567,2573],{"class":335},[221,6569,641],{"class":357},[221,6571,2511],{"class":346},[221,6573,683],{"class":350},[221,6575,2582],{"class":346},[221,6577,2585],{"class":350},[221,6579,2588],{"class":346},[221,6581,683],{"class":350},[221,6583,2582],{"class":346},[221,6585,2595],{"class":350},[221,6587,2599],{"class":2598},[221,6589,928],{"class":357},[221,6591,2511],{"class":346},[221,6593,683],{"class":350},[221,6595,2608],{"class":346},[221,6597,533],{"class":350},[221,6599,2613],{"class":741},[221,6601,6602],{"class":223,"line":4599},[221,6603,429],{"class":350},[221,6605,6606,6608],{"class":223,"line":4604},[221,6607,435],{"class":350},[221,6609,4989],{"class":346},[198,6611,6612,6613,6615,6616,683],{},"Use the ",[218,6614,6146],{}," type to get typed access to ",[218,6617,6618],{},"c.get('log')",[956,6620,2628,6621,2632],{"color":1896,"icon":1897},[309,6622,6623],{"href":178},"Hono example",[279,6625,182],{"id":6626},"fastify",[198,6628,6629,6630,3799,6633,3803,6636,3806],{},"evlog provides a Fastify plugin at ",[218,6631,6632],{},"evlog/fastify",[218,6634,6635],{},"request.log",[218,6637,1780],{},[210,6639,6641],{"className":212,"code":6640,"language":215,"meta":216,"style":216},"npm install evlog fastify\n",[218,6642,6643],{"__ignoreMap":216},[221,6644,6645,6647,6649,6651],{"class":223,"line":224},[221,6646,238],{"class":227},[221,6648,247],{"class":230},[221,6650,3820],{"class":230},[221,6652,6653],{"class":230}," fastify\n",[210,6655,6657],{"className":325,"code":6656,"filename":5166,"language":328,"meta":216,"style":216},"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",[218,6658,6659,6674,6692,6710,6714,6722,6743,6749,6753,6780,6784,6798,6802,6832,6867,6881,6887,6891],{"__ignoreMap":216},[221,6660,6661,6663,6666,6668,6670,6672],{"class":223,"line":224},[221,6662,473],{"class":335},[221,6664,6665],{"class":346}," Fastify ",[221,6667,2678],{"class":335},[221,6669,410],{"class":350},[221,6671,6626],{"class":230},[221,6673,493],{"class":350},[221,6675,6676,6678,6680,6682,6684,6686,6688,6690],{"class":223,"line":354},[221,6677,473],{"class":335},[221,6679,476],{"class":350},[221,6681,1984],{"class":346},[221,6683,482],{"class":350},[221,6685,485],{"class":335},[221,6687,410],{"class":350},[221,6689,1993],{"class":230},[221,6691,493],{"class":350},[221,6693,6694,6696,6698,6700,6702,6704,6706,6708],{"class":223,"line":381},[221,6695,473],{"class":335},[221,6697,476],{"class":350},[221,6699,3820],{"class":346},[221,6701,482],{"class":350},[221,6703,485],{"class":335},[221,6705,410],{"class":350},[221,6707,6632],{"class":230},[221,6709,493],{"class":350},[221,6711,6712],{"class":223,"line":392},[221,6713,499],{"emptyLinePlaceholder":498},[221,6715,6716,6718,6720],{"class":223,"line":402},[221,6717,2024],{"class":342},[221,6719,347],{"class":346},[221,6721,351],{"class":350},[221,6723,6724,6726,6728,6730,6732,6734,6736,6739,6741],{"class":223,"line":420},[221,6725,5236],{"class":357},[221,6727,361],{"class":350},[221,6729,476],{"class":350},[221,6731,1240],{"class":357},[221,6733,361],{"class":350},[221,6735,410],{"class":350},[221,6737,6738],{"class":230},"fastify-api",[221,6740,367],{"class":350},[221,6742,2742],{"class":350},[221,6744,6745,6747],{"class":223,"line":426},[221,6746,435],{"class":350},[221,6748,438],{"class":346},[221,6750,6751],{"class":223,"line":432},[221,6752,499],{"emptyLinePlaceholder":498},[221,6754,6755,6757,6759,6761,6764,6766,6768,6771,6773,6776,6778],{"class":223,"line":950},[221,6756,4054],{"class":506},[221,6758,4057],{"class":346},[221,6760,631],{"class":350},[221,6762,6763],{"class":342}," Fastify",[221,6765,347],{"class":346},[221,6767,691],{"class":350},[221,6769,6770],{"class":357}," logger",[221,6772,361],{"class":350},[221,6774,6775],{"class":741}," false",[221,6777,482],{"class":350},[221,6779,438],{"class":346},[221,6781,6782],{"class":223,"line":1286},[221,6783,499],{"emptyLinePlaceholder":498},[221,6785,6786,6788,6790,6792,6795],{"class":223,"line":1296},[221,6787,4077],{"class":335},[221,6789,4080],{"class":346},[221,6791,683],{"class":350},[221,6793,6794],{"class":342},"register",[221,6796,6797],{"class":346},"(evlog)\n",[221,6799,6800],{"class":223,"line":1306},[221,6801,499],{"emptyLinePlaceholder":498},[221,6803,6804,6806,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826,6828,6830],{"class":223,"line":1312},[221,6805,5285],{"class":346},[221,6807,683],{"class":350},[221,6809,916],{"class":342},[221,6811,347],{"class":346},[221,6813,367],{"class":350},[221,6815,5316],{"class":230},[221,6817,367],{"class":350},[221,6819,515],{"class":350},[221,6821,3470],{"class":506},[221,6823,641],{"class":350},[221,6825,645],{"class":644},[221,6827,652],{"class":350},[221,6829,655],{"class":506},[221,6831,389],{"class":350},[221,6833,6834,6837,6839,6841,6843,6845,6847,6849,6851,6853,6855,6857,6859,6861,6863,6865],{"class":223,"line":2570},[221,6835,6836],{"class":346},"  request",[221,6838,683],{"class":350},[221,6840,1320],{"class":346},[221,6842,683],{"class":350},[221,6844,686],{"class":342},[221,6846,347],{"class":357},[221,6848,691],{"class":350},[221,6850,5356],{"class":357},[221,6852,361],{"class":350},[221,6854,476],{"class":350},[221,6856,5363],{"class":357},[221,6858,361],{"class":350},[221,6860,5368],{"class":2598},[221,6862,482],{"class":350},[221,6864,482],{"class":350},[221,6866,438],{"class":357},[221,6868,6869,6871,6873,6875,6877,6879],{"class":223,"line":2616},[221,6870,721],{"class":335},[221,6872,476],{"class":350},[221,6874,5356],{"class":357},[221,6876,361],{"class":350},[221,6878,5394],{"class":357},[221,6880,1084],{"class":350},[221,6882,6883,6885],{"class":223,"line":2621},[221,6884,435],{"class":350},[221,6886,438],{"class":346},[221,6888,6889],{"class":223,"line":3610},[221,6890,499],{"emptyLinePlaceholder":498},[221,6892,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913],{"class":223,"line":3615},[221,6894,4077],{"class":335},[221,6896,4080],{"class":346},[221,6898,683],{"class":350},[221,6900,4085],{"class":342},[221,6902,347],{"class":346},[221,6904,691],{"class":350},[221,6906,6317],{"class":357},[221,6908,361],{"class":350},[221,6910,6322],{"class":2598},[221,6912,482],{"class":350},[221,6914,438],{"class":346},[198,6916,6917],{},"The plugin supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[210,6919,6921],{"className":325,"code":6920,"language":328,"meta":216,"style":216},"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",[218,6922,6923,6941,6959,6963,6975,6979,6996,7014,7032,7040,7064,7068,7080,7096,7106,7130,7134,7150,7186,7190],{"__ignoreMap":216},[221,6924,6925,6927,6929,6931,6933,6935,6937,6939],{"class":223,"line":224},[221,6926,473],{"class":335},[221,6928,476],{"class":350},[221,6930,2393],{"class":346},[221,6932,482],{"class":350},[221,6934,485],{"class":335},[221,6936,410],{"class":350},[221,6938,2402],{"class":230},[221,6940,493],{"class":350},[221,6942,6943,6945,6947,6949,6951,6953,6955,6957],{"class":223,"line":354},[221,6944,473],{"class":335},[221,6946,476],{"class":350},[221,6948,5457],{"class":346},[221,6950,482],{"class":350},[221,6952,485],{"class":335},[221,6954,410],{"class":350},[221,6956,5466],{"class":230},[221,6958,493],{"class":350},[221,6960,6961],{"class":223,"line":381},[221,6962,499],{"emptyLinePlaceholder":498},[221,6964,6965,6967,6969,6971,6973],{"class":223,"line":392},[221,6966,4054],{"class":506},[221,6968,5479],{"class":346},[221,6970,631],{"class":350},[221,6972,5457],{"class":342},[221,6974,849],{"class":346},[221,6976,6977],{"class":223,"line":402},[221,6978,499],{"emptyLinePlaceholder":498},[221,6980,6981,6983,6985,6987,6989,6992,6994],{"class":223,"line":420},[221,6982,4077],{"class":335},[221,6984,4080],{"class":346},[221,6986,683],{"class":350},[221,6988,6794],{"class":342},[221,6990,6991],{"class":346},"(evlog",[221,6993,515],{"class":350},[221,6995,389],{"class":350},[221,6997,6998,7000,7002,7004,7006,7008,7010,7012],{"class":223,"line":426},[221,6999,2471],{"class":357},[221,7001,361],{"class":350},[221,7003,364],{"class":346},[221,7005,367],{"class":350},[221,7007,2480],{"class":230},[221,7009,367],{"class":350},[221,7011,375],{"class":346},[221,7013,378],{"class":350},[221,7015,7016,7018,7020,7022,7024,7026,7028,7030],{"class":223,"line":432},[221,7017,5528],{"class":357},[221,7019,361],{"class":350},[221,7021,364],{"class":346},[221,7023,367],{"class":350},[221,7025,4437],{"class":230},[221,7027,367],{"class":350},[221,7029,375],{"class":346},[221,7031,378],{"class":350},[221,7033,7034,7036,7038],{"class":223,"line":950},[221,7035,5547],{"class":357},[221,7037,361],{"class":350},[221,7039,389],{"class":350},[221,7041,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062],{"class":223,"line":1286},[221,7043,5556],{"class":350},[221,7045,4460],{"class":357},[221,7047,367],{"class":350},[221,7049,361],{"class":350},[221,7051,476],{"class":350},[221,7053,1240],{"class":357},[221,7055,361],{"class":350},[221,7057,410],{"class":350},[221,7059,4475],{"class":230},[221,7061,367],{"class":350},[221,7063,2742],{"class":350},[221,7065,7066],{"class":223,"line":1296},[221,7067,429],{"class":350},[221,7069,7070,7072,7074,7076,7078],{"class":223,"line":1306},[221,7071,2491],{"class":357},[221,7073,361],{"class":350},[221,7075,2393],{"class":342},[221,7077,1370],{"class":346},[221,7079,378],{"class":350},[221,7081,7082,7084,7086,7088,7090,7092,7094],{"class":223,"line":1312},[221,7083,2504],{"class":342},[221,7085,361],{"class":350},[221,7087,641],{"class":350},[221,7089,2511],{"class":644},[221,7091,652],{"class":350},[221,7093,655],{"class":506},[221,7095,389],{"class":350},[221,7097,7098,7100,7102,7104],{"class":223,"line":2570},[221,7099,5613],{"class":342},[221,7101,347],{"class":357},[221,7103,2511],{"class":346},[221,7105,438],{"class":357},[221,7107,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126,7128],{"class":223,"line":2616},[221,7109,2522],{"class":346},[221,7111,683],{"class":350},[221,7113,2527],{"class":346},[221,7115,683],{"class":350},[221,7117,2532],{"class":346},[221,7119,533],{"class":350},[221,7121,2537],{"class":346},[221,7123,683],{"class":350},[221,7125,1541],{"class":346},[221,7127,683],{"class":350},[221,7129,2546],{"class":346},[221,7131,7132],{"class":223,"line":2621},[221,7133,429],{"class":350},[221,7135,7136,7138,7140,7142,7144,7146,7148],{"class":223,"line":3610},[221,7137,2555],{"class":342},[221,7139,361],{"class":350},[221,7141,641],{"class":350},[221,7143,2511],{"class":644},[221,7145,652],{"class":350},[221,7147,655],{"class":506},[221,7149,389],{"class":350},[221,7151,7152,7154,7156,7158,7160,7162,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184],{"class":223,"line":3615},[221,7153,2573],{"class":335},[221,7155,641],{"class":357},[221,7157,2511],{"class":346},[221,7159,683],{"class":350},[221,7161,2582],{"class":346},[221,7163,2585],{"class":350},[221,7165,2588],{"class":346},[221,7167,683],{"class":350},[221,7169,2582],{"class":346},[221,7171,2595],{"class":350},[221,7173,2599],{"class":2598},[221,7175,928],{"class":357},[221,7177,2511],{"class":346},[221,7179,683],{"class":350},[221,7181,2608],{"class":346},[221,7183,533],{"class":350},[221,7185,2613],{"class":741},[221,7187,7188],{"class":223,"line":4599},[221,7189,429],{"class":350},[221,7191,7192,7194],{"class":223,"line":4604},[221,7193,435],{"class":350},[221,7195,438],{"class":346},[198,7197,4095,7198,7200],{},[218,7199,1780],{}," to access the logger from anywhere in the call stack:",[210,7202,7204],{"className":325,"code":7203,"language":328,"meta":216,"style":216},"import { useLogger } from 'evlog/fastify'\n\nfunction findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n}\n",[218,7205,7206,7224,7228,7248,7260,7286],{"__ignoreMap":216},[221,7207,7208,7210,7212,7214,7216,7218,7220,7222],{"class":223,"line":224},[221,7209,473],{"class":335},[221,7211,476],{"class":350},[221,7213,518],{"class":346},[221,7215,482],{"class":350},[221,7217,485],{"class":335},[221,7219,410],{"class":350},[221,7221,6632],{"class":230},[221,7223,493],{"class":350},[221,7225,7226],{"class":223,"line":354},[221,7227,499],{"emptyLinePlaceholder":498},[221,7229,7230,7233,7236,7238,7240,7242,7244,7246],{"class":223,"line":381},[221,7231,7232],{"class":506},"function",[221,7234,7235],{"class":342}," findUser",[221,7237,347],{"class":350},[221,7239,2304],{"class":644},[221,7241,361],{"class":350},[221,7243,4231],{"class":227},[221,7245,652],{"class":350},[221,7247,389],{"class":350},[221,7249,7250,7252,7254,7256,7258],{"class":223,"line":392},[221,7251,662],{"class":506},[221,7253,523],{"class":346},[221,7255,533],{"class":350},[221,7257,518],{"class":342},[221,7259,849],{"class":357},[221,7261,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284],{"class":223,"line":402},[221,7263,680],{"class":346},[221,7265,683],{"class":350},[221,7267,686],{"class":342},[221,7269,347],{"class":357},[221,7271,691],{"class":350},[221,7273,694],{"class":357},[221,7275,361],{"class":350},[221,7277,476],{"class":350},[221,7279,701],{"class":346},[221,7281,482],{"class":350},[221,7283,482],{"class":350},[221,7285,438],{"class":357},[221,7287,7288],{"class":223,"line":420},[221,7289,1084],{"class":350},[956,7291,7292,3161,7294,7296,7297,7300],{"color":958,"icon":13},[1968,7293,3160],{},[218,7295,6635],{}," is the evlog wide-event logger (shadows Fastify's built-in pino logger on the request). Fastify's pino logger remains accessible via ",[218,7298,7299],{},"fastify.log"," for server-level structured logging.",[956,7302,2628,7303,2632],{"color":1896,"icon":1897},[309,7304,7305],{"href":183},"Fastify example",[279,7307,187],{"id":7308},"elysia",[198,7310,7311,7312,3799,7315,7317,7318,7320],{},"evlog provides an Elysia plugin at ",[218,7313,7314],{},"evlog/elysia",[218,7316,1320],{}," in route context or ",[218,7319,1780],{}," and emits a wide event when the response completes.",[210,7322,7324],{"className":212,"code":7323,"language":215,"meta":216,"style":216},"bun add evlog elysia\n",[218,7325,7326],{"__ignoreMap":216},[221,7327,7328,7330,7332,7334],{"class":223,"line":224},[221,7329,267],{"class":227},[221,7331,231],{"class":230},[221,7333,3820],{"class":230},[221,7335,7336],{"class":230}," elysia\n",[210,7338,7340],{"className":325,"code":7339,"filename":5166,"language":328,"meta":216,"style":216},"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",[218,7341,7342,7361,7379,7397,7401,7409,7430,7436,7440,7454,7467,7493,7523,7537,7543],{"__ignoreMap":216},[221,7343,7344,7346,7348,7351,7353,7355,7357,7359],{"class":223,"line":224},[221,7345,473],{"class":335},[221,7347,476],{"class":350},[221,7349,7350],{"class":346}," Elysia",[221,7352,482],{"class":350},[221,7354,485],{"class":335},[221,7356,410],{"class":350},[221,7358,7308],{"class":230},[221,7360,493],{"class":350},[221,7362,7363,7365,7367,7369,7371,7373,7375,7377],{"class":223,"line":354},[221,7364,473],{"class":335},[221,7366,476],{"class":350},[221,7368,1984],{"class":346},[221,7370,482],{"class":350},[221,7372,485],{"class":335},[221,7374,410],{"class":350},[221,7376,1993],{"class":230},[221,7378,493],{"class":350},[221,7380,7381,7383,7385,7387,7389,7391,7393,7395],{"class":223,"line":381},[221,7382,473],{"class":335},[221,7384,476],{"class":350},[221,7386,3820],{"class":346},[221,7388,482],{"class":350},[221,7390,485],{"class":335},[221,7392,410],{"class":350},[221,7394,7314],{"class":230},[221,7396,493],{"class":350},[221,7398,7399],{"class":223,"line":392},[221,7400,499],{"emptyLinePlaceholder":498},[221,7402,7403,7405,7407],{"class":223,"line":402},[221,7404,2024],{"class":342},[221,7406,347],{"class":346},[221,7408,351],{"class":350},[221,7410,7411,7413,7415,7417,7419,7421,7423,7426,7428],{"class":223,"line":420},[221,7412,5236],{"class":357},[221,7414,361],{"class":350},[221,7416,476],{"class":350},[221,7418,1240],{"class":357},[221,7420,361],{"class":350},[221,7422,410],{"class":350},[221,7424,7425],{"class":230},"elysia-api",[221,7427,367],{"class":350},[221,7429,2742],{"class":350},[221,7431,7432,7434],{"class":223,"line":426},[221,7433,435],{"class":350},[221,7435,438],{"class":346},[221,7437,7438],{"class":223,"line":432},[221,7439,499],{"emptyLinePlaceholder":498},[221,7441,7442,7444,7446,7448,7450,7452],{"class":223,"line":950},[221,7443,4054],{"class":506},[221,7445,4057],{"class":346},[221,7447,631],{"class":350},[221,7449,4975],{"class":350},[221,7451,7350],{"class":342},[221,7453,849],{"class":346},[221,7455,7456,7459,7461,7463,7465],{"class":223,"line":1286},[221,7457,7458],{"class":350},"  .",[221,7460,5290],{"class":342},[221,7462,347],{"class":346},[221,7464,1993],{"class":342},[221,7466,5297],{"class":346},[221,7468,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491],{"class":223,"line":1296},[221,7470,7458],{"class":350},[221,7472,916],{"class":342},[221,7474,347],{"class":346},[221,7476,367],{"class":350},[221,7478,5316],{"class":230},[221,7480,367],{"class":350},[221,7482,515],{"class":350},[221,7484,2256],{"class":350},[221,7486,523],{"class":644},[221,7488,1187],{"class":350},[221,7490,655],{"class":506},[221,7492,389],{"class":350},[221,7494,7495,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521],{"class":223,"line":1306},[221,7496,4253],{"class":346},[221,7498,683],{"class":350},[221,7500,686],{"class":342},[221,7502,347],{"class":357},[221,7504,691],{"class":350},[221,7506,5356],{"class":357},[221,7508,361],{"class":350},[221,7510,476],{"class":350},[221,7512,5363],{"class":357},[221,7514,361],{"class":350},[221,7516,5368],{"class":2598},[221,7518,482],{"class":350},[221,7520,482],{"class":350},[221,7522,438],{"class":357},[221,7524,7525,7527,7529,7531,7533,7535],{"class":223,"line":1312},[221,7526,4280],{"class":335},[221,7528,476],{"class":350},[221,7530,5356],{"class":357},[221,7532,361],{"class":350},[221,7534,5394],{"class":357},[221,7536,1084],{"class":350},[221,7538,7539,7541],{"class":223,"line":2570},[221,7540,4758],{"class":350},[221,7542,438],{"class":346},[221,7544,7545,7547,7549,7551,7553],{"class":223,"line":2616},[221,7546,7458],{"class":350},[221,7548,4085],{"class":342},[221,7550,347],{"class":346},[221,7552,4090],{"class":2598},[221,7554,438],{"class":346},[198,7556,6917],{},[210,7558,7559],{"className":325,"code":5428,"language":328,"meta":216,"style":216},[218,7560,7561,7579,7597,7601,7613,7617,7633,7651,7669,7677,7701,7705,7717,7733,7743,7767,7771,7787,7823,7827],{"__ignoreMap":216},[221,7562,7563,7565,7567,7569,7571,7573,7575,7577],{"class":223,"line":224},[221,7564,473],{"class":335},[221,7566,476],{"class":350},[221,7568,2393],{"class":346},[221,7570,482],{"class":350},[221,7572,485],{"class":335},[221,7574,410],{"class":350},[221,7576,2402],{"class":230},[221,7578,493],{"class":350},[221,7580,7581,7583,7585,7587,7589,7591,7593,7595],{"class":223,"line":354},[221,7582,473],{"class":335},[221,7584,476],{"class":350},[221,7586,5457],{"class":346},[221,7588,482],{"class":350},[221,7590,485],{"class":335},[221,7592,410],{"class":350},[221,7594,5466],{"class":230},[221,7596,493],{"class":350},[221,7598,7599],{"class":223,"line":381},[221,7600,499],{"emptyLinePlaceholder":498},[221,7602,7603,7605,7607,7609,7611],{"class":223,"line":392},[221,7604,4054],{"class":506},[221,7606,5479],{"class":346},[221,7608,631],{"class":350},[221,7610,5457],{"class":342},[221,7612,849],{"class":346},[221,7614,7615],{"class":223,"line":402},[221,7616,499],{"emptyLinePlaceholder":498},[221,7618,7619,7621,7623,7625,7627,7629,7631],{"class":223,"line":420},[221,7620,5285],{"class":346},[221,7622,683],{"class":350},[221,7624,5290],{"class":342},[221,7626,347],{"class":346},[221,7628,1993],{"class":342},[221,7630,347],{"class":346},[221,7632,351],{"class":350},[221,7634,7635,7637,7639,7641,7643,7645,7647,7649],{"class":223,"line":426},[221,7636,2471],{"class":357},[221,7638,361],{"class":350},[221,7640,364],{"class":346},[221,7642,367],{"class":350},[221,7644,2480],{"class":230},[221,7646,367],{"class":350},[221,7648,375],{"class":346},[221,7650,378],{"class":350},[221,7652,7653,7655,7657,7659,7661,7663,7665,7667],{"class":223,"line":432},[221,7654,5528],{"class":357},[221,7656,361],{"class":350},[221,7658,364],{"class":346},[221,7660,367],{"class":350},[221,7662,4437],{"class":230},[221,7664,367],{"class":350},[221,7666,375],{"class":346},[221,7668,378],{"class":350},[221,7670,7671,7673,7675],{"class":223,"line":950},[221,7672,5547],{"class":357},[221,7674,361],{"class":350},[221,7676,389],{"class":350},[221,7678,7679,7681,7683,7685,7687,7689,7691,7693,7695,7697,7699],{"class":223,"line":1286},[221,7680,5556],{"class":350},[221,7682,4460],{"class":357},[221,7684,367],{"class":350},[221,7686,361],{"class":350},[221,7688,476],{"class":350},[221,7690,1240],{"class":357},[221,7692,361],{"class":350},[221,7694,410],{"class":350},[221,7696,4475],{"class":230},[221,7698,367],{"class":350},[221,7700,2742],{"class":350},[221,7702,7703],{"class":223,"line":1296},[221,7704,429],{"class":350},[221,7706,7707,7709,7711,7713,7715],{"class":223,"line":1306},[221,7708,2491],{"class":357},[221,7710,361],{"class":350},[221,7712,2393],{"class":342},[221,7714,1370],{"class":346},[221,7716,378],{"class":350},[221,7718,7719,7721,7723,7725,7727,7729,7731],{"class":223,"line":1312},[221,7720,2504],{"class":342},[221,7722,361],{"class":350},[221,7724,641],{"class":350},[221,7726,2511],{"class":644},[221,7728,652],{"class":350},[221,7730,655],{"class":506},[221,7732,389],{"class":350},[221,7734,7735,7737,7739,7741],{"class":223,"line":2570},[221,7736,5613],{"class":342},[221,7738,347],{"class":357},[221,7740,2511],{"class":346},[221,7742,438],{"class":357},[221,7744,7745,7747,7749,7751,7753,7755,7757,7759,7761,7763,7765],{"class":223,"line":2616},[221,7746,2522],{"class":346},[221,7748,683],{"class":350},[221,7750,2527],{"class":346},[221,7752,683],{"class":350},[221,7754,2532],{"class":346},[221,7756,533],{"class":350},[221,7758,2537],{"class":346},[221,7760,683],{"class":350},[221,7762,1541],{"class":346},[221,7764,683],{"class":350},[221,7766,2546],{"class":346},[221,7768,7769],{"class":223,"line":2621},[221,7770,429],{"class":350},[221,7772,7773,7775,7777,7779,7781,7783,7785],{"class":223,"line":3610},[221,7774,2555],{"class":342},[221,7776,361],{"class":350},[221,7778,641],{"class":350},[221,7780,2511],{"class":644},[221,7782,652],{"class":350},[221,7784,655],{"class":506},[221,7786,389],{"class":350},[221,7788,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821],{"class":223,"line":3615},[221,7790,2573],{"class":335},[221,7792,641],{"class":357},[221,7794,2511],{"class":346},[221,7796,683],{"class":350},[221,7798,2582],{"class":346},[221,7800,2585],{"class":350},[221,7802,2588],{"class":346},[221,7804,683],{"class":350},[221,7806,2582],{"class":346},[221,7808,2595],{"class":350},[221,7810,2599],{"class":2598},[221,7812,928],{"class":357},[221,7814,2511],{"class":346},[221,7816,683],{"class":350},[221,7818,2608],{"class":346},[221,7820,533],{"class":350},[221,7822,2613],{"class":741},[221,7824,7825],{"class":223,"line":4599},[221,7826,429],{"class":350},[221,7828,7829,7831],{"class":223,"line":4604},[221,7830,435],{"class":350},[221,7832,4989],{"class":346},[198,7834,7835,7836,7839],{},"Handle errors with Elysia's ",[218,7837,7838],{},"onError"," hook (evlog captures them automatically):",[210,7841,7843],{"className":325,"code":7842,"language":328,"meta":216,"style":216},"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",[218,7844,7845,7867,7871,7876,7888,7910,7955,7961,7984,8000,8018,8060],{"__ignoreMap":216},[221,7846,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865],{"class":223,"line":224},[221,7848,473],{"class":335},[221,7850,476],{"class":350},[221,7852,5726],{"class":346},[221,7854,515],{"class":350},[221,7856,4836],{"class":346},[221,7858,482],{"class":350},[221,7860,485],{"class":335},[221,7862,410],{"class":350},[221,7864,1993],{"class":230},[221,7866,493],{"class":350},[221,7868,7869],{"class":223,"line":354},[221,7870,499],{"emptyLinePlaceholder":498},[221,7872,7873],{"class":223,"line":381},[221,7874,7875],{"class":346},"app\n",[221,7877,7878,7880,7882,7884,7886],{"class":223,"line":392},[221,7879,7458],{"class":350},[221,7881,5290],{"class":342},[221,7883,347],{"class":346},[221,7885,1993],{"class":342},[221,7887,5297],{"class":346},[221,7889,7890,7892,7894,7896,7898,7900,7902,7904,7906,7908],{"class":223,"line":402},[221,7891,7458],{"class":350},[221,7893,916],{"class":342},[221,7895,347],{"class":346},[221,7897,367],{"class":350},[221,7899,5759],{"class":230},[221,7901,367],{"class":350},[221,7903,515],{"class":350},[221,7905,3473],{"class":350},[221,7907,655],{"class":506},[221,7909,389],{"class":350},[221,7911,7912,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953],{"class":223,"line":420},[221,7913,7914],{"class":335},"    throw",[221,7916,5726],{"class":342},[221,7918,347],{"class":357},[221,7920,691],{"class":350},[221,7922,5783],{"class":357},[221,7924,361],{"class":350},[221,7926,410],{"class":350},[221,7928,5790],{"class":230},[221,7930,367],{"class":350},[221,7932,515],{"class":350},[221,7934,5797],{"class":357},[221,7936,361],{"class":350},[221,7938,5802],{"class":2598},[221,7940,515],{"class":350},[221,7942,5091],{"class":357},[221,7944,361],{"class":350},[221,7946,410],{"class":350},[221,7948,5813],{"class":230},[221,7950,367],{"class":350},[221,7952,482],{"class":350},[221,7954,438],{"class":357},[221,7956,7957,7959],{"class":223,"line":426},[221,7958,4758],{"class":350},[221,7960,438],{"class":346},[221,7962,7963,7965,7967,7969,7971,7973,7975,7978,7980,7982],{"class":223,"line":432},[221,7964,7458],{"class":350},[221,7966,7838],{"class":342},[221,7968,347],{"class":346},[221,7970,1164],{"class":350},[221,7972,4953],{"class":644},[221,7974,515],{"class":350},[221,7976,7977],{"class":644}," set",[221,7979,1187],{"class":350},[221,7981,655],{"class":506},[221,7983,389],{"class":350},[221,7985,7986,7988,7990,7992,7994,7996,7998],{"class":223,"line":950},[221,7987,4240],{"class":506},[221,7989,5033],{"class":346},[221,7991,533],{"class":350},[221,7993,4836],{"class":342},[221,7995,347],{"class":357},[221,7997,5009],{"class":346},[221,7999,438],{"class":357},[221,8001,8002,8005,8007,8009,8011,8013,8015],{"class":223,"line":1286},[221,8003,8004],{"class":346},"    set",[221,8006,683],{"class":350},[221,8008,5053],{"class":346},[221,8010,533],{"class":350},[221,8012,5033],{"class":346},[221,8014,683],{"class":350},[221,8016,8017],{"class":346},"status\n",[221,8019,8020,8022,8024,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8048,8050,8052,8054,8056,8058],{"class":223,"line":1296},[221,8021,4280],{"class":335},[221,8023,476],{"class":350},[221,8025,5783],{"class":357},[221,8027,361],{"class":350},[221,8029,5033],{"class":346},[221,8031,683],{"class":350},[221,8033,5086],{"class":346},[221,8035,515],{"class":350},[221,8037,5091],{"class":357},[221,8039,361],{"class":350},[221,8041,5033],{"class":346},[221,8043,683],{"class":350},[221,8045,3641],{"class":346},[221,8047,515],{"class":350},[221,8049,5104],{"class":357},[221,8051,361],{"class":350},[221,8053,5033],{"class":346},[221,8055,683],{"class":350},[221,8057,3644],{"class":346},[221,8059,947],{"class":350},[221,8061,8062,8064],{"class":223,"line":1306},[221,8063,4758],{"class":350},[221,8065,438],{"class":346},[956,8067,2628,8068,2632],{"color":1896,"icon":1897},[309,8069,8070],{"href":188},"Elysia example",[279,8072,8074],{"id":8073},"cloudflare-workers","Cloudflare Workers",[198,8076,8077],{},"Use the Workers adapter for structured logs and correct platform severity.",[210,8079,8081],{"className":325,"code":8080,"filename":5166,"language":328,"meta":216,"style":216},"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",[218,8082,8083,8108,8112,8121,8142,8148,8152,8160,8180,8196,8200,8206,8234,8271,8298,8306,8320,8338,8361,8369,8373,8377],{"__ignoreMap":216},[221,8084,8085,8087,8089,8092,8094,8097,8099,8101,8103,8106],{"class":223,"line":224},[221,8086,473],{"class":335},[221,8088,476],{"class":350},[221,8090,8091],{"class":346}," initWorkersLogger",[221,8093,515],{"class":350},[221,8095,8096],{"class":346}," createWorkersLogger",[221,8098,482],{"class":350},[221,8100,485],{"class":335},[221,8102,410],{"class":350},[221,8104,8105],{"class":230},"evlog/workers",[221,8107,493],{"class":350},[221,8109,8110],{"class":223,"line":354},[221,8111,499],{"emptyLinePlaceholder":498},[221,8113,8114,8117,8119],{"class":223,"line":381},[221,8115,8116],{"class":342},"initWorkersLogger",[221,8118,347],{"class":346},[221,8120,351],{"class":350},[221,8122,8123,8125,8127,8129,8131,8133,8135,8138,8140],{"class":223,"line":392},[221,8124,5236],{"class":357},[221,8126,361],{"class":350},[221,8128,476],{"class":350},[221,8130,1240],{"class":357},[221,8132,361],{"class":350},[221,8134,410],{"class":350},[221,8136,8137],{"class":230},"edge-api",[221,8139,367],{"class":350},[221,8141,2742],{"class":350},[221,8143,8144,8146],{"class":223,"line":402},[221,8145,435],{"class":350},[221,8147,438],{"class":346},[221,8149,8150],{"class":223,"line":420},[221,8151,499],{"emptyLinePlaceholder":498},[221,8153,8154,8156,8158],{"class":223,"line":426},[221,8155,336],{"class":335},[221,8157,339],{"class":335},[221,8159,389],{"class":350},[221,8161,8162,8165,8167,8169,8171,8173,8176,8178],{"class":223,"line":432},[221,8163,8164],{"class":506},"  async",[221,8166,6303],{"class":357},[221,8168,347],{"class":350},[221,8170,645],{"class":644},[221,8172,361],{"class":350},[221,8174,8175],{"class":227}," Request",[221,8177,652],{"class":350},[221,8179,389],{"class":350},[221,8181,8182,8184,8186,8188,8190,8192,8194],{"class":223,"line":950},[221,8183,4240],{"class":506},[221,8185,523],{"class":346},[221,8187,533],{"class":350},[221,8189,8096],{"class":342},[221,8191,347],{"class":357},[221,8193,645],{"class":346},[221,8195,438],{"class":357},[221,8197,8198],{"class":223,"line":1286},[221,8199,499],{"emptyLinePlaceholder":498},[221,8201,8202,8204],{"class":223,"line":1296},[221,8203,4998],{"class":335},[221,8205,389],{"class":350},[221,8207,8208,8210,8212,8214,8216,8218,8221,8223,8225,8228,8230,8232],{"class":223,"line":1306},[221,8209,2151],{"class":346},[221,8211,683],{"class":350},[221,8213,686],{"class":342},[221,8215,347],{"class":357},[221,8217,691],{"class":350},[221,8219,8220],{"class":357}," route",[221,8222,361],{"class":350},[221,8224,410],{"class":350},[221,8226,8227],{"class":230},"health",[221,8229,367],{"class":350},[221,8231,482],{"class":350},[221,8233,438],{"class":357},[221,8235,8236,8239,8241,8243,8245,8247,8249,8251,8254,8256,8258,8260,8262,8264,8267,8269],{"class":223,"line":1312},[221,8237,8238],{"class":506},"      const",[221,8240,4928],{"class":346},[221,8242,533],{"class":350},[221,8244,4975],{"class":350},[221,8246,724],{"class":342},[221,8248,347],{"class":357},[221,8250,367],{"class":350},[221,8252,8253],{"class":230},"ok",[221,8255,367],{"class":350},[221,8257,515],{"class":350},[221,8259,476],{"class":350},[221,8261,5797],{"class":357},[221,8263,361],{"class":350},[221,8265,8266],{"class":2598}," 200",[221,8268,482],{"class":350},[221,8270,438],{"class":357},[221,8272,8273,8275,8277,8280,8282,8284,8286,8288,8290,8292,8294,8296],{"class":223,"line":2570},[221,8274,2151],{"class":346},[221,8276,683],{"class":350},[221,8278,8279],{"class":342},"emit",[221,8281,347],{"class":357},[221,8283,691],{"class":350},[221,8285,5797],{"class":357},[221,8287,361],{"class":350},[221,8289,4928],{"class":346},[221,8291,683],{"class":350},[221,8293,5053],{"class":346},[221,8295,482],{"class":350},[221,8297,438],{"class":357},[221,8299,8300,8303],{"class":223,"line":2616},[221,8301,8302],{"class":335},"      return",[221,8304,8305],{"class":346}," response\n",[221,8307,8308,8310,8312,8314,8316,8318],{"class":223,"line":2621},[221,8309,2747],{"class":350},[221,8311,5020],{"class":335},[221,8313,641],{"class":357},[221,8315,5009],{"class":346},[221,8317,928],{"class":357},[221,8319,351],{"class":350},[221,8321,8322,8324,8326,8328,8330,8332,8334,8336],{"class":223,"line":3610},[221,8323,2151],{"class":346},[221,8325,683],{"class":350},[221,8327,5009],{"class":342},[221,8329,347],{"class":357},[221,8331,5009],{"class":346},[221,8333,3513],{"class":335},[221,8335,4964],{"class":227},[221,8337,438],{"class":357},[221,8339,8340,8342,8344,8346,8348,8350,8352,8354,8357,8359],{"class":223,"line":3615},[221,8341,2151],{"class":346},[221,8343,683],{"class":350},[221,8345,8279],{"class":342},[221,8347,347],{"class":357},[221,8349,691],{"class":350},[221,8351,5797],{"class":357},[221,8353,361],{"class":350},[221,8355,8356],{"class":2598}," 500",[221,8358,482],{"class":350},[221,8360,438],{"class":357},[221,8362,8363,8366],{"class":223,"line":4599},[221,8364,8365],{"class":335},"      throw",[221,8367,8368],{"class":346}," error\n",[221,8370,8371],{"class":223,"line":4604},[221,8372,2161],{"class":350},[221,8374,8375],{"class":223,"line":4613},[221,8376,429],{"class":350},[221,8378,8379],{"class":223,"line":4620},[221,8380,1084],{"class":350},[198,8382,8383],{},"Disable invocation logs to avoid duplicate request logs:",[210,8385,8390],{"className":8386,"code":8387,"filename":8388,"language":8389,"meta":216,"style":216},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[218,8391,8392,8397],{"__ignoreMap":216},[221,8393,8394],{"class":223,"line":224},[221,8395,8396],{},"[observability.logs]\n",[221,8398,8399],{"class":223,"line":354},[221,8400,8401],{},"invocation_logs = false\n",[198,8403,8404],{},"Notes:",[8406,8407,8408,8418,8424],"ul",{},[8409,8410,8411,8413,8414,8417],"li",{},[218,8412,1093],{}," defaults to ",[218,8415,8416],{},"cf-ray"," when available",[8409,8419,8420,8423],{},[218,8421,8422],{},"request.cf"," is included (colo, country, asn) unless disabled",[8409,8425,4095,8426,8429],{},[218,8427,8428],{},"headerAllowlist"," to avoid logging sensitive headers",[956,8431,8432,8433,8439],{"color":1896,"icon":1897},"See the full ",[309,8434,8438],{"href":8435,"rel":8436},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[8437],"nofollow","workers example"," for a complete working project.",[279,8441,8443],{"id":8442},"standalone-typescript","Standalone TypeScript",[198,8445,8446],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[210,8448,8451],{"className":325,"code":8449,"filename":8450,"language":328,"meta":216,"style":216},"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",[218,8452,8453,8476,8480,8488,8496,8512,8528,8532,8538,8542,8600,8624],{"__ignoreMap":216},[221,8454,8455,8457,8459,8461,8463,8466,8468,8470,8472,8474],{"class":223,"line":224},[221,8456,473],{"class":335},[221,8458,476],{"class":350},[221,8460,1984],{"class":346},[221,8462,515],{"class":350},[221,8464,8465],{"class":346}," createLogger",[221,8467,482],{"class":350},[221,8469,485],{"class":335},[221,8471,410],{"class":350},[221,8473,1993],{"class":230},[221,8475,493],{"class":350},[221,8477,8478],{"class":223,"line":354},[221,8479,499],{"emptyLinePlaceholder":498},[221,8481,8482,8484,8486],{"class":223,"line":381},[221,8483,2024],{"class":342},[221,8485,347],{"class":346},[221,8487,351],{"class":350},[221,8489,8490,8492,8494],{"class":223,"line":392},[221,8491,5236],{"class":357},[221,8493,361],{"class":350},[221,8495,389],{"class":350},[221,8497,8498,8501,8503,8505,8508,8510],{"class":223,"line":402},[221,8499,8500],{"class":357},"    service",[221,8502,361],{"class":350},[221,8504,410],{"class":350},[221,8506,8507],{"class":230},"my-worker",[221,8509,367],{"class":350},[221,8511,378],{"class":350},[221,8513,8514,8517,8519,8521,8524,8526],{"class":223,"line":420},[221,8515,8516],{"class":357},"    environment",[221,8518,361],{"class":350},[221,8520,410],{"class":350},[221,8522,8523],{"class":230},"production",[221,8525,367],{"class":350},[221,8527,378],{"class":350},[221,8529,8530],{"class":223,"line":426},[221,8531,429],{"class":350},[221,8533,8534,8536],{"class":223,"line":432},[221,8535,435],{"class":350},[221,8537,438],{"class":346},[221,8539,8540],{"class":223,"line":950},[221,8541,499],{"emptyLinePlaceholder":498},[221,8543,8544,8546,8549,8551,8553,8555,8557,8560,8562,8565,8567,8569,8571,8573,8575,8577,8579,8582,8584,8587,8589,8591,8593,8596,8598],{"class":223,"line":1286},[221,8545,4054],{"class":506},[221,8547,8548],{"class":346}," log ",[221,8550,631],{"class":350},[221,8552,8465],{"class":342},[221,8554,347],{"class":346},[221,8556,691],{"class":350},[221,8558,8559],{"class":357}," jobId",[221,8561,361],{"class":350},[221,8563,8564],{"class":346}," job",[221,8566,683],{"class":350},[221,8568,2304],{"class":346},[221,8570,515],{"class":350},[221,8572,878],{"class":357},[221,8574,361],{"class":350},[221,8576,8564],{"class":346},[221,8578,683],{"class":350},[221,8580,8581],{"class":346},"source",[221,8583,515],{"class":350},[221,8585,8586],{"class":357}," target",[221,8588,361],{"class":350},[221,8590,8564],{"class":346},[221,8592,683],{"class":350},[221,8594,8595],{"class":346},"target ",[221,8597,435],{"class":350},[221,8599,438],{"class":346},[221,8601,8602,8604,8606,8608,8610,8612,8615,8617,8620,8622],{"class":223,"line":1296},[221,8603,1320],{"class":346},[221,8605,683],{"class":350},[221,8607,686],{"class":342},[221,8609,347],{"class":346},[221,8611,691],{"class":350},[221,8613,8614],{"class":357}," recordsSynced",[221,8616,361],{"class":350},[221,8618,8619],{"class":2598}," 150",[221,8621,482],{"class":350},[221,8623,438],{"class":346},[221,8625,8626,8628,8630,8632,8635],{"class":223,"line":1306},[221,8627,1320],{"class":346},[221,8629,683],{"class":350},[221,8631,8279],{"class":342},[221,8633,8634],{"class":346},"() ",[221,8636,8637],{"class":674},"// Manual emit required in standalone mode\n",[198,8639,8640,8643,8644,445,8647,8650],{},[218,8641,8642],{},"createLogger()"," accepts any initial context, making it ideal for workflows, jobs, queues, or scripts where HTTP request fields (",[218,8645,8646],{},"method",[218,8648,8649],{},"path",") don't apply.",[198,8652,8653,8654,8657,8658,445,8660,449,8662,361],{},"For HTTP request contexts, use ",[218,8655,8656],{},"createRequestLogger()"," which pre-populates ",[218,8659,8646],{},[218,8661,8649],{},[218,8663,1093],{},[210,8665,8668],{"className":325,"code":8666,"filename":8667,"language":328,"meta":216,"style":216},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '/api/checkout', requestId: 'req-123' })\n","server/middleware.ts",[218,8669,8670,8689,8693],{"__ignoreMap":216},[221,8671,8672,8674,8676,8679,8681,8683,8685,8687],{"class":223,"line":224},[221,8673,473],{"class":335},[221,8675,476],{"class":350},[221,8677,8678],{"class":346}," createRequestLogger",[221,8680,482],{"class":350},[221,8682,485],{"class":335},[221,8684,410],{"class":350},[221,8686,1993],{"class":230},[221,8688,493],{"class":350},[221,8690,8691],{"class":223,"line":354},[221,8692,499],{"emptyLinePlaceholder":498},[221,8694,8695,8697,8699,8701,8703,8705,8707,8710,8712,8714,8717,8719,8721,8724,8726,8728,8731,8733,8735,8738,8740,8742,8745,8747,8749],{"class":223,"line":381},[221,8696,4054],{"class":506},[221,8698,8548],{"class":346},[221,8700,631],{"class":350},[221,8702,8678],{"class":342},[221,8704,347],{"class":346},[221,8706,691],{"class":350},[221,8708,8709],{"class":357}," method",[221,8711,361],{"class":350},[221,8713,410],{"class":350},[221,8715,8716],{"class":230},"POST",[221,8718,367],{"class":350},[221,8720,515],{"class":350},[221,8722,8723],{"class":357}," path",[221,8725,361],{"class":350},[221,8727,410],{"class":350},[221,8729,8730],{"class":230},"/api/checkout",[221,8732,367],{"class":350},[221,8734,515],{"class":350},[221,8736,8737],{"class":357}," requestId",[221,8739,361],{"class":350},[221,8741,410],{"class":350},[221,8743,8744],{"class":230},"req-123",[221,8746,367],{"class":350},[221,8748,482],{"class":350},[221,8750,438],{"class":346},[956,8752,8753,8754,8757],{"color":958,"icon":13},"In standalone mode, you must call ",[218,8755,8756],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[754,8759,8761],{"id":8760},"draining-logs-to-external-services","Draining Logs to External Services",[198,8763,6612,8764,8766,8767,8769,8770,8773,8774,8777],{},[218,8765,1654],{}," option in ",[218,8768,2024],{}," to automatically send every emitted event to an external service. This works with all built-in ",[309,8771,8772],{"href":72},"adapters"," and the ",[309,8775,8776],{"href":107},"pipeline"," for batching and retry.",[210,8779,8781],{"className":325,"code":8780,"filename":8450,"language":328,"meta":216,"style":216},"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",[218,8782,8783,8804,8830,8848,8868,8872,8915,8934,8938,8946,8980,8986,8992,8996,9001,9028,9032,9088,9111,9124,9128,9133],{"__ignoreMap":216},[221,8784,8785,8787,8789,8791,8794,8796,8798,8800,8802],{"class":223,"line":224},[221,8786,473],{"class":335},[221,8788,2097],{"class":335},[221,8790,476],{"class":350},[221,8792,8793],{"class":346}," DrainContext",[221,8795,482],{"class":350},[221,8797,485],{"class":335},[221,8799,410],{"class":350},[221,8801,1993],{"class":230},[221,8803,493],{"class":350},[221,8805,8806,8808,8810,8812,8814,8816,8818,8820,8822,8824,8826,8828],{"class":223,"line":354},[221,8807,473],{"class":335},[221,8809,476],{"class":350},[221,8811,1984],{"class":346},[221,8813,515],{"class":350},[221,8815,523],{"class":346},[221,8817,515],{"class":350},[221,8819,8465],{"class":346},[221,8821,482],{"class":350},[221,8823,485],{"class":335},[221,8825,410],{"class":350},[221,8827,1993],{"class":230},[221,8829,493],{"class":350},[221,8831,8832,8834,8836,8838,8840,8842,8844,8846],{"class":223,"line":381},[221,8833,473],{"class":335},[221,8835,476],{"class":350},[221,8837,2393],{"class":346},[221,8839,482],{"class":350},[221,8841,485],{"class":335},[221,8843,410],{"class":350},[221,8845,2402],{"class":230},[221,8847,493],{"class":350},[221,8849,8850,8852,8854,8857,8859,8861,8863,8866],{"class":223,"line":392},[221,8851,473],{"class":335},[221,8853,476],{"class":350},[221,8855,8856],{"class":346}," createDrainPipeline",[221,8858,482],{"class":350},[221,8860,485],{"class":335},[221,8862,410],{"class":350},[221,8864,8865],{"class":230},"evlog/pipeline",[221,8867,493],{"class":350},[221,8869,8870],{"class":223,"line":402},[221,8871,499],{"emptyLinePlaceholder":498},[221,8873,8874,8876,8879,8881,8883,8885,8888,8890,8892,8894,8897,8899,8901,8904,8906,8909,8911,8913],{"class":223,"line":420},[221,8875,4054],{"class":506},[221,8877,8878],{"class":346}," pipeline ",[221,8880,631],{"class":350},[221,8882,8856],{"class":342},[221,8884,6143],{"class":350},[221,8886,8887],{"class":227},"DrainContext",[221,8889,6149],{"class":350},[221,8891,347],{"class":346},[221,8893,691],{"class":350},[221,8895,8896],{"class":357}," batch",[221,8898,361],{"class":350},[221,8900,476],{"class":350},[221,8902,8903],{"class":357}," size",[221,8905,361],{"class":350},[221,8907,8908],{"class":2598}," 10",[221,8910,482],{"class":350},[221,8912,482],{"class":350},[221,8914,438],{"class":346},[221,8916,8917,8919,8922,8924,8927,8929,8932],{"class":223,"line":426},[221,8918,4054],{"class":506},[221,8920,8921],{"class":346}," drain ",[221,8923,631],{"class":350},[221,8925,8926],{"class":342}," pipeline",[221,8928,347],{"class":346},[221,8930,8931],{"class":342},"createAxiomDrain",[221,8933,5297],{"class":346},[221,8935,8936],{"class":223,"line":432},[221,8937,499],{"emptyLinePlaceholder":498},[221,8939,8940,8942,8944],{"class":223,"line":950},[221,8941,2024],{"class":342},[221,8943,347],{"class":346},[221,8945,351],{"class":350},[221,8947,8948,8950,8952,8954,8956,8958,8960,8963,8965,8967,8970,8972,8974,8976,8978],{"class":223,"line":1286},[221,8949,5236],{"class":357},[221,8951,361],{"class":350},[221,8953,476],{"class":350},[221,8955,1240],{"class":357},[221,8957,361],{"class":350},[221,8959,410],{"class":350},[221,8961,8962],{"class":230},"my-script",[221,8964,367],{"class":350},[221,8966,515],{"class":350},[221,8968,8969],{"class":357}," environment",[221,8971,361],{"class":350},[221,8973,410],{"class":350},[221,8975,8523],{"class":230},[221,8977,367],{"class":350},[221,8979,2742],{"class":350},[221,8981,8982,8984],{"class":223,"line":1296},[221,8983,2491],{"class":346},[221,8985,378],{"class":350},[221,8987,8988,8990],{"class":223,"line":1306},[221,8989,435],{"class":350},[221,8991,438],{"class":346},[221,8993,8994],{"class":223,"line":1312},[221,8995,499],{"emptyLinePlaceholder":498},[221,8997,8998],{"class":223,"line":2570},[221,8999,9000],{"class":674},"// Every log is automatically drained\n",[221,9002,9003,9005,9007,9009,9011,9013,9015,9017,9019,9022,9024,9026],{"class":223,"line":2616},[221,9004,1320],{"class":346},[221,9006,683],{"class":350},[221,9008,958],{"class":342},[221,9010,347],{"class":346},[221,9012,691],{"class":350},[221,9014,864],{"class":357},[221,9016,361],{"class":350},[221,9018,410],{"class":350},[221,9020,9021],{"class":230},"sync_started",[221,9023,367],{"class":350},[221,9025,482],{"class":350},[221,9027,438],{"class":346},[221,9029,9030],{"class":223,"line":2621},[221,9031,499],{"emptyLinePlaceholder":498},[221,9033,9034,9036,9039,9041,9043,9045,9047,9049,9051,9053,9056,9058,9060,9062,9064,9066,9069,9071,9073,9075,9077,9079,9082,9084,9086],{"class":223,"line":3610},[221,9035,4054],{"class":506},[221,9037,9038],{"class":346}," syncLog ",[221,9040,631],{"class":350},[221,9042,8465],{"class":342},[221,9044,347],{"class":346},[221,9046,691],{"class":350},[221,9048,8559],{"class":357},[221,9050,361],{"class":350},[221,9052,410],{"class":350},[221,9054,9055],{"class":230},"sync-001",[221,9057,367],{"class":350},[221,9059,515],{"class":350},[221,9061,878],{"class":357},[221,9063,361],{"class":350},[221,9065,410],{"class":350},[221,9067,9068],{"class":230},"postgres",[221,9070,367],{"class":350},[221,9072,515],{"class":350},[221,9074,8586],{"class":357},[221,9076,361],{"class":350},[221,9078,410],{"class":350},[221,9080,9081],{"class":230},"s3",[221,9083,367],{"class":350},[221,9085,482],{"class":350},[221,9087,438],{"class":346},[221,9089,9090,9093,9095,9097,9099,9101,9103,9105,9107,9109],{"class":223,"line":3615},[221,9091,9092],{"class":346},"syncLog",[221,9094,683],{"class":350},[221,9096,686],{"class":342},[221,9098,347],{"class":346},[221,9100,691],{"class":350},[221,9102,8614],{"class":357},[221,9104,361],{"class":350},[221,9106,8619],{"class":2598},[221,9108,482],{"class":350},[221,9110,438],{"class":346},[221,9112,9113,9115,9117,9119,9121],{"class":223,"line":4599},[221,9114,9092],{"class":346},[221,9116,683],{"class":350},[221,9118,8279],{"class":342},[221,9120,8634],{"class":346},[221,9122,9123],{"class":674},"// drained automatically\n",[221,9125,9126],{"class":223,"line":4604},[221,9127,499],{"emptyLinePlaceholder":498},[221,9129,9130],{"class":223,"line":4613},[221,9131,9132],{"class":674},"// Flush remaining events before exit\n",[221,9134,9135,9137,9140,9142,9145],{"class":223,"line":4620},[221,9136,4077],{"class":335},[221,9138,9139],{"class":346}," drain",[221,9141,683],{"class":350},[221,9143,9144],{"class":342},"flush",[221,9146,849],{"class":346},[956,9148,8432,9149,9154],{"color":1896,"icon":1897},[309,9150,9153],{"href":9151,"rel":9152},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[8437],"bun-script example"," for a complete working script.",[202,9156,9158],{"id":9157},"configuration-options","Configuration Options",[198,9160,9161,9162,9165],{},"These options apply to ",[1968,9163,9164],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[1453,9167,9168,9180],{},[1456,9169,9170],{},[1459,9171,9172,9174,9176,9178],{},[1462,9173,1464],{},[1462,9175,1467],{},[1462,9177,1470],{},[1462,9179,1473],{},[1475,9181,9182,9203,9224,9241,9257,9277,9294,9311,9329,9350,9370],{},[1459,9183,9184,9188,9192,9196],{},[1480,9185,9186],{},[218,9187,1504],{},[1480,9189,9190],{},[218,9191,1509],{},[1480,9193,9194],{},[218,9195,1514],{},[1480,9197,9198,9199,9202],{},"Globally enable/disable all logging. When ",[218,9200,9201],{},"false",", all operations become no-ops",[1459,9204,9205,9210,9214,9218],{},[1480,9206,9207],{},[218,9208,9209],{},"console",[1480,9211,9212],{},[218,9213,1509],{},[1480,9215,9216],{},[218,9217,1514],{},[1480,9219,9220,9221,9223],{},"Enable/disable browser console output. When ",[218,9222,9201],{},", client logs are suppressed in DevTools but still sent via transport",[1459,9225,9226,9231,9235,9239],{},[1480,9227,9228],{},[218,9229,9230],{},"env.service",[1480,9232,9233],{},[218,9234,1489],{},[1480,9236,9237],{},[218,9238,1494],{},[1480,9240,1497],{},[1459,9242,9243,9248,9252,9254],{},[1480,9244,9245],{},[218,9246,9247],{},"env.environment",[1480,9249,9250],{},[218,9251,1489],{},[1480,9253,1549],{},[1480,9255,9256],{},"Environment name",[1459,9258,9259,9263,9267,9271],{},[1480,9260,9261],{},[218,9262,1598],{},[1480,9264,9265],{},[218,9266,1603],{},[1480,9268,9269],{},[218,9270,1569],{},[1480,9272,9273,9274,9276],{},"Route patterns to log. Supports glob (",[218,9275,2480],{},"). If not set, all routes are logged",[1459,9278,9279,9283,9287,9291],{},[1480,9280,9281],{},[218,9282,1617],{},[1480,9284,9285],{},[218,9286,1603],{},[1480,9288,9289],{},[218,9290,1569],{},[1480,9292,9293],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[1459,9295,9296,9300,9304,9308],{},[1480,9297,9298],{},[218,9299,1635],{},[1480,9301,9302],{},[218,9303,1640],{},[1480,9305,9306],{},[218,9307,1569],{},[1480,9309,9310],{},"Route-specific service configuration",[1459,9312,9313,9317,9321,9326],{},[1480,9314,9315],{},[218,9316,1524],{},[1480,9318,9319],{},[218,9320,1509],{},[1480,9322,9323,9325],{},[218,9324,1514],{}," in dev",[1480,9327,9328],{},"Pretty print with tree formatting",[1459,9330,9331,9335,9340,9344],{},[1480,9332,9333],{},[218,9334,1559],{},[1480,9336,9337],{},[218,9338,9339],{},"object",[1480,9341,9342],{},[218,9343,1569],{},[1480,9345,9346,9347],{},"Head sampling rates per log level (0-100%). See ",[309,9348,56],{"href":9349},"#sampling",[1459,9351,9352,9356,9361,9365],{},[1480,9353,9354],{},[218,9355,1579],{},[1480,9357,9358],{},[218,9359,9360],{},"array",[1480,9362,9363],{},[218,9364,1569],{},[1480,9366,9367,9368],{},"Tail sampling conditions to force-keep logs. See ",[309,9369,56],{"href":9349},[1459,9371,9372,9376,9380,9384],{},[1480,9373,9374],{},[218,9375,1692],{},[1480,9377,9378],{},[218,9379,1697],{},[1480,9381,9382],{},[218,9383,1569],{},[1480,9385,9386,9387,9389],{},"Custom tail sampling callback (Next.js). Equivalent to ",[218,9388,1861],{}," hook in Nuxt",[956,9391,9392,9393,969,9396,9399,9400,683],{"color":958,"icon":13},"Nuxt also supports ",[218,9394,9395],{},"transport.enabled",[218,9397,9398],{},"transport.endpoint"," for ",[309,9401,9403],{"href":9402},"#client-transport-nuxt-only","Client Transport",[279,9405,9407],{"id":9406},"route-filtering","Route Filtering",[198,9409,4095,9410,969,9412,9414],{},[218,9411,1598],{},[218,9413,1617],{}," to control which routes are logged. Both support glob patterns.",[207,9416,9417,9548,9672],{},[210,9418,9420],{"className":325,"code":9419,"filename":327,"language":328,"meta":216,"style":216},"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",[218,9421,9422,9434,9452,9460,9488,9497,9509,9520,9531,9538,9542],{"__ignoreMap":216},[221,9423,9424,9426,9428,9430,9432],{"class":223,"line":224},[221,9425,336],{"class":335},[221,9427,339],{"class":335},[221,9429,343],{"class":342},[221,9431,347],{"class":346},[221,9433,351],{"class":350},[221,9435,9436,9438,9440,9442,9444,9446,9448,9450],{"class":223,"line":354},[221,9437,358],{"class":357},[221,9439,361],{"class":350},[221,9441,364],{"class":346},[221,9443,367],{"class":350},[221,9445,370],{"class":230},[221,9447,367],{"class":350},[221,9449,375],{"class":346},[221,9451,378],{"class":350},[221,9453,9454,9456,9458],{"class":223,"line":381},[221,9455,384],{"class":357},[221,9457,361],{"class":350},[221,9459,389],{"class":350},[221,9461,9462,9465,9467,9469,9471,9473,9475,9477,9479,9482,9484,9486],{"class":223,"line":392},[221,9463,9464],{"class":357},"    include",[221,9466,361],{"class":350},[221,9468,364],{"class":346},[221,9470,367],{"class":350},[221,9472,2480],{"class":230},[221,9474,367],{"class":350},[221,9476,515],{"class":350},[221,9478,410],{"class":350},[221,9480,9481],{"class":230},"/auth/**",[221,9483,367],{"class":350},[221,9485,375],{"class":346},[221,9487,378],{"class":350},[221,9489,9490,9493,9495],{"class":223,"line":402},[221,9491,9492],{"class":357},"    exclude",[221,9494,361],{"class":350},[221,9496,2710],{"class":346},[221,9498,9499,9502,9505,9507],{"class":223,"line":420},[221,9500,9501],{"class":350},"      '",[221,9503,9504],{"class":230},"/api/_nuxt_icon/**",[221,9506,367],{"class":350},[221,9508,378],{"class":350},[221,9510,9511,9513,9516,9518],{"class":223,"line":426},[221,9512,9501],{"class":350},[221,9514,9515],{"class":230},"/api/_content/**",[221,9517,367],{"class":350},[221,9519,378],{"class":350},[221,9521,9522,9524,9527,9529],{"class":223,"line":432},[221,9523,9501],{"class":350},[221,9525,9526],{"class":230},"/api/health",[221,9528,367],{"class":350},[221,9530,378],{"class":350},[221,9532,9533,9536],{"class":223,"line":950},[221,9534,9535],{"class":346},"    ]",[221,9537,378],{"class":350},[221,9539,9540],{"class":223,"line":1286},[221,9541,429],{"class":350},[221,9543,9544,9546],{"class":223,"line":1296},[221,9545,435],{"class":350},[221,9547,438],{"class":346},[210,9549,9552],{"className":325,"code":9550,"filename":9551,"language":328,"meta":216,"style":216},"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)",[218,9553,9554,9572,9586,9590,9602,9610,9618,9636,9654,9660,9666],{"__ignoreMap":216},[221,9555,9556,9558,9560,9562,9564,9566,9568,9570],{"class":223,"line":224},[221,9557,473],{"class":335},[221,9559,476],{"class":350},[221,9561,2658],{"class":346},[221,9563,482],{"class":350},[221,9565,485],{"class":335},[221,9567,410],{"class":350},[221,9569,2642],{"class":230},[221,9571,493],{"class":350},[221,9573,9574,9576,9578,9580,9582,9584],{"class":223,"line":354},[221,9575,473],{"class":335},[221,9577,2675],{"class":346},[221,9579,2678],{"class":335},[221,9581,410],{"class":350},[221,9583,2683],{"class":230},[221,9585,493],{"class":350},[221,9587,9588],{"class":223,"line":381},[221,9589,499],{"emptyLinePlaceholder":498},[221,9591,9592,9594,9596,9598,9600],{"class":223,"line":392},[221,9593,336],{"class":335},[221,9595,339],{"class":335},[221,9597,2658],{"class":342},[221,9599,347],{"class":346},[221,9601,351],{"class":350},[221,9603,9604,9606,9608],{"class":223,"line":402},[221,9605,358],{"class":357},[221,9607,361],{"class":350},[221,9609,2710],{"class":346},[221,9611,9612,9614,9616],{"class":223,"line":420},[221,9613,2715],{"class":342},[221,9615,347],{"class":346},[221,9617,351],{"class":350},[221,9619,9620,9622,9624,9626,9628,9630,9632,9634],{"class":223,"line":426},[221,9621,4409],{"class":357},[221,9623,361],{"class":350},[221,9625,364],{"class":346},[221,9627,367],{"class":350},[221,9629,2480],{"class":230},[221,9631,367],{"class":350},[221,9633,375],{"class":346},[221,9635,378],{"class":350},[221,9637,9638,9640,9642,9644,9646,9648,9650,9652],{"class":223,"line":432},[221,9639,4428],{"class":357},[221,9641,361],{"class":350},[221,9643,364],{"class":346},[221,9645,367],{"class":350},[221,9647,9526],{"class":230},[221,9649,367],{"class":350},[221,9651,375],{"class":346},[221,9653,378],{"class":350},[221,9655,9656,9658],{"class":223,"line":950},[221,9657,2747],{"class":350},[221,9659,438],{"class":346},[221,9661,9662,9664],{"class":223,"line":1286},[221,9663,2754],{"class":346},[221,9665,378],{"class":350},[221,9667,9668,9670],{"class":223,"line":1296},[221,9669,435],{"class":350},[221,9671,438],{"class":346},[210,9673,9676],{"className":325,"code":9674,"filename":9675,"language":328,"meta":216,"style":216},"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)",[218,9677,9678,9696,9710,9714,9726,9734,9742,9760,9778,9784,9790],{"__ignoreMap":216},[221,9679,9680,9682,9684,9686,9688,9690,9692,9694],{"class":223,"line":224},[221,9681,473],{"class":335},[221,9683,476],{"class":350},[221,9685,2925],{"class":346},[221,9687,482],{"class":350},[221,9689,485],{"class":335},[221,9691,410],{"class":350},[221,9693,2934],{"class":230},[221,9695,493],{"class":350},[221,9697,9698,9700,9702,9704,9706,9708],{"class":223,"line":354},[221,9699,473],{"class":335},[221,9701,2675],{"class":346},[221,9703,2678],{"class":335},[221,9705,410],{"class":350},[221,9707,2949],{"class":230},[221,9709,493],{"class":350},[221,9711,9712],{"class":223,"line":381},[221,9713,499],{"emptyLinePlaceholder":498},[221,9715,9716,9718,9720,9722,9724],{"class":223,"line":392},[221,9717,336],{"class":335},[221,9719,339],{"class":335},[221,9721,2925],{"class":342},[221,9723,347],{"class":346},[221,9725,351],{"class":350},[221,9727,9728,9730,9732],{"class":223,"line":402},[221,9729,358],{"class":357},[221,9731,361],{"class":350},[221,9733,2710],{"class":346},[221,9735,9736,9738,9740],{"class":223,"line":420},[221,9737,2715],{"class":342},[221,9739,347],{"class":346},[221,9741,351],{"class":350},[221,9743,9744,9746,9748,9750,9752,9754,9756,9758],{"class":223,"line":426},[221,9745,4409],{"class":357},[221,9747,361],{"class":350},[221,9749,364],{"class":346},[221,9751,367],{"class":350},[221,9753,2480],{"class":230},[221,9755,367],{"class":350},[221,9757,375],{"class":346},[221,9759,378],{"class":350},[221,9761,9762,9764,9766,9768,9770,9772,9774,9776],{"class":223,"line":432},[221,9763,4428],{"class":357},[221,9765,361],{"class":350},[221,9767,364],{"class":346},[221,9769,367],{"class":350},[221,9771,9526],{"class":230},[221,9773,367],{"class":350},[221,9775,375],{"class":346},[221,9777,378],{"class":350},[221,9779,9780,9782],{"class":223,"line":950},[221,9781,2747],{"class":350},[221,9783,438],{"class":346},[221,9785,9786,9788],{"class":223,"line":1286},[221,9787,2754],{"class":346},[221,9789,378],{"class":350},[221,9791,9792,9794],{"class":223,"line":1296},[221,9793,435],{"class":350},[221,9795,438],{"class":346},[956,9797,9798,9801,9802,969,9804,9806],{"color":958,"icon":13},[1968,9799,9800],{},"Exclusions take precedence."," If a path matches both ",[218,9803,1598],{},[218,9805,1617],{},", it will be excluded.",[279,9808,9810],{"id":9809},"route-based-service-configuration","Route-Based Service Configuration",[198,9812,9813],{},"In multi-service architectures, configure different service names for different routes:",[207,9815,9816,9985,10152],{},[210,9817,9819],{"className":325,"code":9818,"filename":327,"language":328,"meta":216,"style":216},"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",[218,9820,9821,9833,9851,9859,9867,9882,9886,9895,9919,9945,9971,9975,9979],{"__ignoreMap":216},[221,9822,9823,9825,9827,9829,9831],{"class":223,"line":224},[221,9824,336],{"class":335},[221,9826,339],{"class":335},[221,9828,343],{"class":342},[221,9830,347],{"class":346},[221,9832,351],{"class":350},[221,9834,9835,9837,9839,9841,9843,9845,9847,9849],{"class":223,"line":354},[221,9836,358],{"class":357},[221,9838,361],{"class":350},[221,9840,364],{"class":346},[221,9842,367],{"class":350},[221,9844,370],{"class":230},[221,9846,367],{"class":350},[221,9848,375],{"class":346},[221,9850,378],{"class":350},[221,9852,9853,9855,9857],{"class":223,"line":381},[221,9854,384],{"class":357},[221,9856,361],{"class":350},[221,9858,389],{"class":350},[221,9860,9861,9863,9865],{"class":223,"line":392},[221,9862,395],{"class":357},[221,9864,361],{"class":350},[221,9866,389],{"class":350},[221,9868,9869,9871,9873,9875,9878,9880],{"class":223,"line":402},[221,9870,405],{"class":357},[221,9872,361],{"class":350},[221,9874,410],{"class":350},[221,9876,9877],{"class":230},"default-service",[221,9879,367],{"class":350},[221,9881,378],{"class":350},[221,9883,9884],{"class":223,"line":420},[221,9885,423],{"class":350},[221,9887,9888,9891,9893],{"class":223,"line":426},[221,9889,9890],{"class":357},"    routes",[221,9892,361],{"class":350},[221,9894,389],{"class":350},[221,9896,9897,9899,9901,9903,9905,9907,9909,9911,9913,9915,9917],{"class":223,"line":432},[221,9898,9501],{"class":350},[221,9900,4460],{"class":357},[221,9902,367],{"class":350},[221,9904,361],{"class":350},[221,9906,476],{"class":350},[221,9908,1240],{"class":357},[221,9910,361],{"class":350},[221,9912,410],{"class":350},[221,9914,4475],{"class":230},[221,9916,367],{"class":350},[221,9918,2742],{"class":350},[221,9920,9921,9923,9926,9928,9930,9932,9934,9936,9938,9941,9943],{"class":223,"line":950},[221,9922,9501],{"class":350},[221,9924,9925],{"class":357},"/api/payment/**",[221,9927,367],{"class":350},[221,9929,361],{"class":350},[221,9931,476],{"class":350},[221,9933,1240],{"class":357},[221,9935,361],{"class":350},[221,9937,410],{"class":350},[221,9939,9940],{"class":230},"payment-service",[221,9942,367],{"class":350},[221,9944,2742],{"class":350},[221,9946,9947,9949,9952,9954,9956,9958,9960,9962,9964,9967,9969],{"class":223,"line":1286},[221,9948,9501],{"class":350},[221,9950,9951],{"class":357},"/api/booking/**",[221,9953,367],{"class":350},[221,9955,361],{"class":350},[221,9957,476],{"class":350},[221,9959,1240],{"class":357},[221,9961,361],{"class":350},[221,9963,410],{"class":350},[221,9965,9966],{"class":230},"booking-service",[221,9968,367],{"class":350},[221,9970,2742],{"class":350},[221,9972,9973],{"class":223,"line":1296},[221,9974,423],{"class":350},[221,9976,9977],{"class":223,"line":1306},[221,9978,429],{"class":350},[221,9980,9981,9983],{"class":223,"line":1312},[221,9982,435],{"class":350},[221,9984,438],{"class":346},[210,9986,9988],{"className":325,"code":9987,"filename":9551,"language":328,"meta":216,"style":216},"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",[218,9989,9990,10008,10022,10026,10038,10046,10054,10074,10082,10106,10130,10134,10140,10146],{"__ignoreMap":216},[221,9991,9992,9994,9996,9998,10000,10002,10004,10006],{"class":223,"line":224},[221,9993,473],{"class":335},[221,9995,476],{"class":350},[221,9997,2658],{"class":346},[221,9999,482],{"class":350},[221,10001,485],{"class":335},[221,10003,410],{"class":350},[221,10005,2642],{"class":230},[221,10007,493],{"class":350},[221,10009,10010,10012,10014,10016,10018,10020],{"class":223,"line":354},[221,10011,473],{"class":335},[221,10013,2675],{"class":346},[221,10015,2678],{"class":335},[221,10017,410],{"class":350},[221,10019,2683],{"class":230},[221,10021,493],{"class":350},[221,10023,10024],{"class":223,"line":381},[221,10025,499],{"emptyLinePlaceholder":498},[221,10027,10028,10030,10032,10034,10036],{"class":223,"line":392},[221,10029,336],{"class":335},[221,10031,339],{"class":335},[221,10033,2658],{"class":342},[221,10035,347],{"class":346},[221,10037,351],{"class":350},[221,10039,10040,10042,10044],{"class":223,"line":402},[221,10041,358],{"class":357},[221,10043,361],{"class":350},[221,10045,2710],{"class":346},[221,10047,10048,10050,10052],{"class":223,"line":420},[221,10049,2715],{"class":342},[221,10051,347],{"class":346},[221,10053,351],{"class":350},[221,10055,10056,10058,10060,10062,10064,10066,10068,10070,10072],{"class":223,"line":426},[221,10057,2724],{"class":357},[221,10059,361],{"class":350},[221,10061,476],{"class":350},[221,10063,1240],{"class":357},[221,10065,361],{"class":350},[221,10067,410],{"class":350},[221,10069,9877],{"class":230},[221,10071,367],{"class":350},[221,10073,2742],{"class":350},[221,10075,10076,10078,10080],{"class":223,"line":432},[221,10077,4448],{"class":357},[221,10079,361],{"class":350},[221,10081,389],{"class":350},[221,10083,10084,10086,10088,10090,10092,10094,10096,10098,10100,10102,10104],{"class":223,"line":950},[221,10085,4457],{"class":350},[221,10087,4460],{"class":357},[221,10089,367],{"class":350},[221,10091,361],{"class":350},[221,10093,476],{"class":350},[221,10095,1240],{"class":357},[221,10097,361],{"class":350},[221,10099,410],{"class":350},[221,10101,4475],{"class":230},[221,10103,367],{"class":350},[221,10105,2742],{"class":350},[221,10107,10108,10110,10112,10114,10116,10118,10120,10122,10124,10126,10128],{"class":223,"line":1286},[221,10109,4457],{"class":350},[221,10111,9925],{"class":357},[221,10113,367],{"class":350},[221,10115,361],{"class":350},[221,10117,476],{"class":350},[221,10119,1240],{"class":357},[221,10121,361],{"class":350},[221,10123,410],{"class":350},[221,10125,9940],{"class":230},[221,10127,367],{"class":350},[221,10129,2742],{"class":350},[221,10131,10132],{"class":223,"line":1296},[221,10133,3603],{"class":350},[221,10135,10136,10138],{"class":223,"line":1306},[221,10137,2747],{"class":350},[221,10139,438],{"class":346},[221,10141,10142,10144],{"class":223,"line":1312},[221,10143,2754],{"class":346},[221,10145,378],{"class":350},[221,10147,10148,10150],{"class":223,"line":2570},[221,10149,435],{"class":350},[221,10151,438],{"class":346},[210,10153,10155],{"className":325,"code":10154,"filename":9675,"language":328,"meta":216,"style":216},"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",[218,10156,10157,10175,10189,10193,10205,10213,10221,10241,10249,10273,10297,10301,10307,10313],{"__ignoreMap":216},[221,10158,10159,10161,10163,10165,10167,10169,10171,10173],{"class":223,"line":224},[221,10160,473],{"class":335},[221,10162,476],{"class":350},[221,10164,2925],{"class":346},[221,10166,482],{"class":350},[221,10168,485],{"class":335},[221,10170,410],{"class":350},[221,10172,2934],{"class":230},[221,10174,493],{"class":350},[221,10176,10177,10179,10181,10183,10185,10187],{"class":223,"line":354},[221,10178,473],{"class":335},[221,10180,2675],{"class":346},[221,10182,2678],{"class":335},[221,10184,410],{"class":350},[221,10186,2949],{"class":230},[221,10188,493],{"class":350},[221,10190,10191],{"class":223,"line":381},[221,10192,499],{"emptyLinePlaceholder":498},[221,10194,10195,10197,10199,10201,10203],{"class":223,"line":392},[221,10196,336],{"class":335},[221,10198,339],{"class":335},[221,10200,2925],{"class":342},[221,10202,347],{"class":346},[221,10204,351],{"class":350},[221,10206,10207,10209,10211],{"class":223,"line":402},[221,10208,358],{"class":357},[221,10210,361],{"class":350},[221,10212,2710],{"class":346},[221,10214,10215,10217,10219],{"class":223,"line":420},[221,10216,2715],{"class":342},[221,10218,347],{"class":346},[221,10220,351],{"class":350},[221,10222,10223,10225,10227,10229,10231,10233,10235,10237,10239],{"class":223,"line":426},[221,10224,2724],{"class":357},[221,10226,361],{"class":350},[221,10228,476],{"class":350},[221,10230,1240],{"class":357},[221,10232,361],{"class":350},[221,10234,410],{"class":350},[221,10236,9877],{"class":230},[221,10238,367],{"class":350},[221,10240,2742],{"class":350},[221,10242,10243,10245,10247],{"class":223,"line":432},[221,10244,4448],{"class":357},[221,10246,361],{"class":350},[221,10248,389],{"class":350},[221,10250,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271],{"class":223,"line":950},[221,10252,4457],{"class":350},[221,10254,4460],{"class":357},[221,10256,367],{"class":350},[221,10258,361],{"class":350},[221,10260,476],{"class":350},[221,10262,1240],{"class":357},[221,10264,361],{"class":350},[221,10266,410],{"class":350},[221,10268,4475],{"class":230},[221,10270,367],{"class":350},[221,10272,2742],{"class":350},[221,10274,10275,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295],{"class":223,"line":1286},[221,10276,4457],{"class":350},[221,10278,9925],{"class":357},[221,10280,367],{"class":350},[221,10282,361],{"class":350},[221,10284,476],{"class":350},[221,10286,1240],{"class":357},[221,10288,361],{"class":350},[221,10290,410],{"class":350},[221,10292,9940],{"class":230},[221,10294,367],{"class":350},[221,10296,2742],{"class":350},[221,10298,10299],{"class":223,"line":1296},[221,10300,3603],{"class":350},[221,10302,10303,10305],{"class":223,"line":1306},[221,10304,2747],{"class":350},[221,10306,438],{"class":346},[221,10308,10309,10311],{"class":223,"line":1312},[221,10310,2754],{"class":346},[221,10312,378],{"class":350},[221,10314,10315,10317],{"class":223,"line":2570},[221,10316,435],{"class":350},[221,10318,438],{"class":346},[198,10320,10321,10322,10325,10326,311],{},"You can also override the service name per handler using ",[218,10323,10324],{},"useLogger(event, 'service-name')",". See ",[309,10327,10329],{"href":10328},"/getting-started/quick-start#service-identification","Quick Start - Service Identification",[279,10331,56],{"id":10332},"sampling",[198,10334,10335],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[754,10337,10339],{"id":10338},"head-sampling-rates","Head Sampling (rates)",[198,10341,10342,10343,10346],{},"Random sampling based on log level, decided ",[1968,10344,10345],{},"before"," the request completes:",[207,10348,10349,10487,10623],{},[210,10350,10352],{"className":325,"code":10351,"filename":327,"language":328,"meta":216,"style":216},"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",[218,10353,10354,10366,10384,10392,10401,10410,10424,10439,10454,10469,10473,10477,10481],{"__ignoreMap":216},[221,10355,10356,10358,10360,10362,10364],{"class":223,"line":224},[221,10357,336],{"class":335},[221,10359,339],{"class":335},[221,10361,343],{"class":342},[221,10363,347],{"class":346},[221,10365,351],{"class":350},[221,10367,10368,10370,10372,10374,10376,10378,10380,10382],{"class":223,"line":354},[221,10369,358],{"class":357},[221,10371,361],{"class":350},[221,10373,364],{"class":346},[221,10375,367],{"class":350},[221,10377,370],{"class":230},[221,10379,367],{"class":350},[221,10381,375],{"class":346},[221,10383,378],{"class":350},[221,10385,10386,10388,10390],{"class":223,"line":381},[221,10387,384],{"class":357},[221,10389,361],{"class":350},[221,10391,389],{"class":350},[221,10393,10394,10397,10399],{"class":223,"line":392},[221,10395,10396],{"class":357},"    sampling",[221,10398,361],{"class":350},[221,10400,389],{"class":350},[221,10402,10403,10406,10408],{"class":223,"line":402},[221,10404,10405],{"class":357},"      rates",[221,10407,361],{"class":350},[221,10409,389],{"class":350},[221,10411,10412,10415,10417,10419,10421],{"class":223,"line":420},[221,10413,10414],{"class":357},"        info",[221,10416,361],{"class":350},[221,10418,8908],{"class":2598},[221,10420,515],{"class":350},[221,10422,10423],{"class":674},"    // Keep 10% of info logs\n",[221,10425,10426,10429,10431,10434,10436],{"class":223,"line":426},[221,10427,10428],{"class":357},"        warn",[221,10430,361],{"class":350},[221,10432,10433],{"class":2598}," 50",[221,10435,515],{"class":350},[221,10437,10438],{"class":674},"    // Keep 50% of warning logs\n",[221,10440,10441,10444,10446,10449,10451],{"class":223,"line":432},[221,10442,10443],{"class":357},"        debug",[221,10445,361],{"class":350},[221,10447,10448],{"class":2598}," 5",[221,10450,515],{"class":350},[221,10452,10453],{"class":674},"    // Keep 5% of debug logs\n",[221,10455,10456,10459,10461,10464,10466],{"class":223,"line":950},[221,10457,10458],{"class":357},"        error",[221,10460,361],{"class":350},[221,10462,10463],{"class":2598}," 100",[221,10465,515],{"class":350},[221,10467,10468],{"class":674},"  // Always keep errors (default)\n",[221,10470,10471],{"class":223,"line":1286},[221,10472,3603],{"class":350},[221,10474,10475],{"class":223,"line":1296},[221,10476,423],{"class":350},[221,10478,10479],{"class":223,"line":1306},[221,10480,429],{"class":350},[221,10482,10483,10485],{"class":223,"line":1312},[221,10484,435],{"class":350},[221,10486,438],{"class":346},[210,10488,10490],{"className":325,"code":10489,"filename":9551,"language":328,"meta":216,"style":216},"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",[218,10491,10492,10510,10524,10528,10540,10548,10556,10565,10601,10605,10611,10617],{"__ignoreMap":216},[221,10493,10494,10496,10498,10500,10502,10504,10506,10508],{"class":223,"line":224},[221,10495,473],{"class":335},[221,10497,476],{"class":350},[221,10499,2658],{"class":346},[221,10501,482],{"class":350},[221,10503,485],{"class":335},[221,10505,410],{"class":350},[221,10507,2642],{"class":230},[221,10509,493],{"class":350},[221,10511,10512,10514,10516,10518,10520,10522],{"class":223,"line":354},[221,10513,473],{"class":335},[221,10515,2675],{"class":346},[221,10517,2678],{"class":335},[221,10519,410],{"class":350},[221,10521,2683],{"class":230},[221,10523,493],{"class":350},[221,10525,10526],{"class":223,"line":381},[221,10527,499],{"emptyLinePlaceholder":498},[221,10529,10530,10532,10534,10536,10538],{"class":223,"line":392},[221,10531,336],{"class":335},[221,10533,339],{"class":335},[221,10535,2658],{"class":342},[221,10537,347],{"class":346},[221,10539,351],{"class":350},[221,10541,10542,10544,10546],{"class":223,"line":402},[221,10543,358],{"class":357},[221,10545,361],{"class":350},[221,10547,2710],{"class":346},[221,10549,10550,10552,10554],{"class":223,"line":420},[221,10551,2715],{"class":342},[221,10553,347],{"class":346},[221,10555,351],{"class":350},[221,10557,10558,10561,10563],{"class":223,"line":426},[221,10559,10560],{"class":357},"      sampling",[221,10562,361],{"class":350},[221,10564,389],{"class":350},[221,10566,10567,10570,10572,10574,10577,10579,10581,10583,10586,10588,10590,10592,10595,10597,10599],{"class":223,"line":432},[221,10568,10569],{"class":357},"        rates",[221,10571,361],{"class":350},[221,10573,476],{"class":350},[221,10575,10576],{"class":357}," info",[221,10578,361],{"class":350},[221,10580,8908],{"class":2598},[221,10582,515],{"class":350},[221,10584,10585],{"class":357}," warn",[221,10587,361],{"class":350},[221,10589,10433],{"class":2598},[221,10591,515],{"class":350},[221,10593,10594],{"class":357}," debug",[221,10596,361],{"class":350},[221,10598,10448],{"class":2598},[221,10600,2742],{"class":350},[221,10602,10603],{"class":223,"line":950},[221,10604,3603],{"class":350},[221,10606,10607,10609],{"class":223,"line":1286},[221,10608,2747],{"class":350},[221,10610,438],{"class":346},[221,10612,10613,10615],{"class":223,"line":1296},[221,10614,2754],{"class":346},[221,10616,378],{"class":350},[221,10618,10619,10621],{"class":223,"line":1306},[221,10620,435],{"class":350},[221,10622,438],{"class":346},[210,10624,10626],{"className":325,"code":10625,"filename":9675,"language":328,"meta":216,"style":216},"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",[218,10627,10628,10646,10660,10664,10676,10684,10692,10700,10732,10736,10742,10748],{"__ignoreMap":216},[221,10629,10630,10632,10634,10636,10638,10640,10642,10644],{"class":223,"line":224},[221,10631,473],{"class":335},[221,10633,476],{"class":350},[221,10635,2925],{"class":346},[221,10637,482],{"class":350},[221,10639,485],{"class":335},[221,10641,410],{"class":350},[221,10643,2934],{"class":230},[221,10645,493],{"class":350},[221,10647,10648,10650,10652,10654,10656,10658],{"class":223,"line":354},[221,10649,473],{"class":335},[221,10651,2675],{"class":346},[221,10653,2678],{"class":335},[221,10655,410],{"class":350},[221,10657,2949],{"class":230},[221,10659,493],{"class":350},[221,10661,10662],{"class":223,"line":381},[221,10663,499],{"emptyLinePlaceholder":498},[221,10665,10666,10668,10670,10672,10674],{"class":223,"line":392},[221,10667,336],{"class":335},[221,10669,339],{"class":335},[221,10671,2925],{"class":342},[221,10673,347],{"class":346},[221,10675,351],{"class":350},[221,10677,10678,10680,10682],{"class":223,"line":402},[221,10679,358],{"class":357},[221,10681,361],{"class":350},[221,10683,2710],{"class":346},[221,10685,10686,10688,10690],{"class":223,"line":420},[221,10687,2715],{"class":342},[221,10689,347],{"class":346},[221,10691,351],{"class":350},[221,10693,10694,10696,10698],{"class":223,"line":426},[221,10695,10560],{"class":357},[221,10697,361],{"class":350},[221,10699,389],{"class":350},[221,10701,10702,10704,10706,10708,10710,10712,10714,10716,10718,10720,10722,10724,10726,10728,10730],{"class":223,"line":432},[221,10703,10569],{"class":357},[221,10705,361],{"class":350},[221,10707,476],{"class":350},[221,10709,10576],{"class":357},[221,10711,361],{"class":350},[221,10713,8908],{"class":2598},[221,10715,515],{"class":350},[221,10717,10585],{"class":357},[221,10719,361],{"class":350},[221,10721,10433],{"class":2598},[221,10723,515],{"class":350},[221,10725,10594],{"class":357},[221,10727,361],{"class":350},[221,10729,10448],{"class":2598},[221,10731,2742],{"class":350},[221,10733,10734],{"class":223,"line":950},[221,10735,3603],{"class":350},[221,10737,10738,10740],{"class":223,"line":1286},[221,10739,2747],{"class":350},[221,10741,438],{"class":346},[221,10743,10744,10746],{"class":223,"line":1296},[221,10745,2754],{"class":346},[221,10747,378],{"class":350},[221,10749,10750,10752],{"class":223,"line":1306},[221,10751,435],{"class":350},[221,10753,438],{"class":346},[956,10755,10757,10760,10761,10764,10765,683],{"color":10756,"icon":49},"success",[1968,10758,10759],{},"Errors are always logged by default."," Even if you don't specify ",[218,10762,10763],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[218,10766,10767],{},"error: 0",[754,10769,10771],{"id":10770},"tail-sampling-keep","Tail Sampling (keep)",[198,10773,10774,10775,10778],{},"Force-keep logs based on request outcome, evaluated ",[1968,10776,10777],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[210,10780,10782],{"className":325,"code":10781,"language":328,"meta":216,"style":216},"// 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",[218,10783,10784,10789,10797,10814,10822,10841,10857,10877,10883],{"__ignoreMap":216},[221,10785,10786],{"class":223,"line":224},[221,10787,10788],{"class":674},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[221,10790,10791,10793,10795],{"class":223,"line":354},[221,10792,10332],{"class":227},[221,10794,361],{"class":350},[221,10796,389],{"class":350},[221,10798,10799,10802,10804,10806,10808,10810,10812],{"class":223,"line":381},[221,10800,10801],{"class":227},"  rates",[221,10803,361],{"class":350},[221,10805,476],{"class":350},[221,10807,10576],{"class":227},[221,10809,361],{"class":350},[221,10811,8908],{"class":2598},[221,10813,2742],{"class":350},[221,10815,10816,10818,10820],{"class":223,"line":392},[221,10817,2555],{"class":227},[221,10819,361],{"class":350},[221,10821,2710],{"class":357},[221,10823,10824,10827,10830,10832,10835,10838],{"class":223,"line":402},[221,10825,10826],{"class":350},"    {",[221,10828,10829],{"class":357}," duration",[221,10831,361],{"class":350},[221,10833,10834],{"class":2598}," 1000",[221,10836,10837],{"class":350}," },",[221,10839,10840],{"class":674},"           // Always keep if duration >= 1000ms\n",[221,10842,10843,10845,10847,10849,10852,10854],{"class":223,"line":420},[221,10844,10826],{"class":350},[221,10846,5797],{"class":357},[221,10848,361],{"class":350},[221,10850,10851],{"class":2598}," 400",[221,10853,10837],{"class":350},[221,10855,10856],{"class":674},"              // Always keep if status >= 400\n",[221,10858,10859,10861,10863,10865,10867,10870,10872,10874],{"class":223,"line":426},[221,10860,10826],{"class":350},[221,10862,8723],{"class":357},[221,10864,361],{"class":350},[221,10866,410],{"class":350},[221,10868,10869],{"class":230},"/api/critical/**",[221,10871,367],{"class":350},[221,10873,10837],{"class":350},[221,10875,10876],{"class":674}," // Always keep critical paths\n",[221,10878,10879,10881],{"class":223,"line":432},[221,10880,2754],{"class":357},[221,10882,378],{"class":350},[221,10884,10885],{"class":223,"line":950},[221,10886,1084],{"class":350},[198,10888,10889,10890,10893],{},"Conditions use ",[218,10891,10892],{},">="," comparison and follow OR logic (any match = keep).",[754,10895,10897],{"id":10896},"custom-tail-sampling","Custom Tail Sampling",[198,10899,10900,10901,10903,10904,10906],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[218,10902,1861],{}," hook (Nuxt/Nitro) or the ",[218,10905,1692],{}," callback (Next.js):",[207,10908,10909,11063],{},[210,10910,10913],{"className":325,"code":10911,"filename":10912,"language":328,"meta":216,"style":216},"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)",[218,10914,10915,10937,10972,11012,11016,11034,11047,11051,11057],{"__ignoreMap":216},[221,10916,10917,10919,10921,10924,10926,10928,10931,10933,10935],{"class":223,"line":224},[221,10918,336],{"class":335},[221,10920,339],{"class":335},[221,10922,10923],{"class":342}," defineNitroPlugin",[221,10925,347],{"class":346},[221,10927,347],{"class":350},[221,10929,10930],{"class":644},"nitroApp",[221,10932,652],{"class":350},[221,10934,655],{"class":506},[221,10936,389],{"class":350},[221,10938,10939,10942,10944,10947,10949,10952,10954,10956,10958,10960,10962,10964,10966,10968,10970],{"class":223,"line":354},[221,10940,10941],{"class":346},"  nitroApp",[221,10943,683],{"class":350},[221,10945,10946],{"class":346},"hooks",[221,10948,683],{"class":350},[221,10950,10951],{"class":342},"hook",[221,10953,347],{"class":357},[221,10955,367],{"class":350},[221,10957,1861],{"class":230},[221,10959,367],{"class":350},[221,10961,515],{"class":350},[221,10963,641],{"class":350},[221,10965,2511],{"class":644},[221,10967,652],{"class":350},[221,10969,655],{"class":506},[221,10971,389],{"class":350},[221,10973,10974,10976,10978,10980,10982,10984,10986,10988,10991,10993,10995,10998,11001,11004,11006,11009],{"class":223,"line":381},[221,10975,4240],{"class":506},[221,10977,694],{"class":346},[221,10979,533],{"class":350},[221,10981,2588],{"class":346},[221,10983,683],{"class":350},[221,10985,3506],{"class":346},[221,10987,683],{"class":350},[221,10989,10990],{"class":346},"user",[221,10992,3513],{"class":335},[221,10994,476],{"class":350},[221,10996,10997],{"class":357}," premium",[221,10999,11000],{"class":350},"?:",[221,11002,11003],{"class":227}," boolean",[221,11005,482],{"class":350},[221,11007,11008],{"class":350}," |",[221,11010,11011],{"class":227}," undefined\n",[221,11013,11014],{"class":223,"line":392},[221,11015,499],{"emptyLinePlaceholder":498},[221,11017,11018,11020,11022,11024,11027,11030,11032],{"class":223,"line":402},[221,11019,2573],{"class":335},[221,11021,641],{"class":357},[221,11023,10990],{"class":346},[221,11025,11026],{"class":350},"?.",[221,11028,11029],{"class":346},"premium",[221,11031,928],{"class":357},[221,11033,351],{"class":350},[221,11035,11036,11039,11041,11043,11045],{"class":223,"line":420},[221,11037,11038],{"class":346},"      ctx",[221,11040,683],{"class":350},[221,11042,2608],{"class":346},[221,11044,533],{"class":350},[221,11046,2613],{"class":741},[221,11048,11049],{"class":223,"line":426},[221,11050,2161],{"class":350},[221,11052,11053,11055],{"class":223,"line":432},[221,11054,4758],{"class":350},[221,11056,438],{"class":357},[221,11058,11059,11061],{"class":223,"line":950},[221,11060,435],{"class":350},[221,11062,438],{"class":346},[210,11064,11067],{"className":325,"code":11065,"filename":11066,"language":328,"meta":216,"style":216},"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)",[218,11068,11069,11087,11091,11116,11130,11139,11156,11189,11193,11209,11243,11267,11271],{"__ignoreMap":216},[221,11070,11071,11073,11075,11077,11079,11081,11083,11085],{"class":223,"line":224},[221,11072,473],{"class":335},[221,11074,476],{"class":350},[221,11076,479],{"class":346},[221,11078,482],{"class":350},[221,11080,485],{"class":335},[221,11082,410],{"class":350},[221,11084,490],{"class":230},[221,11086,493],{"class":350},[221,11088,11089],{"class":223,"line":354},[221,11090,499],{"emptyLinePlaceholder":498},[221,11092,11093,11095,11097,11099,11101,11103,11106,11108,11110,11112,11114],{"class":223,"line":381},[221,11094,336],{"class":335},[221,11096,507],{"class":506},[221,11098,476],{"class":350},[221,11100,512],{"class":346},[221,11102,515],{"class":350},[221,11104,11105],{"class":346}," useLogger ",[221,11107,435],{"class":350},[221,11109,533],{"class":350},[221,11111,479],{"class":342},[221,11113,347],{"class":346},[221,11115,351],{"class":350},[221,11117,11118,11120,11122,11124,11126,11128],{"class":223,"line":392},[221,11119,544],{"class":357},[221,11121,361],{"class":350},[221,11123,410],{"class":350},[221,11125,413],{"class":230},[221,11127,367],{"class":350},[221,11129,378],{"class":350},[221,11131,11132,11135,11137],{"class":223,"line":402},[221,11133,11134],{"class":357},"  sampling",[221,11136,361],{"class":350},[221,11138,389],{"class":350},[221,11140,11141,11144,11146,11148,11150,11152,11154],{"class":223,"line":420},[221,11142,11143],{"class":357},"    rates",[221,11145,361],{"class":350},[221,11147,476],{"class":350},[221,11149,10576],{"class":357},[221,11151,361],{"class":350},[221,11153,8908],{"class":2598},[221,11155,2742],{"class":350},[221,11157,11158,11161,11163,11165,11167,11169,11171,11173,11175,11177,11179,11181,11183,11185,11187],{"class":223,"line":426},[221,11159,11160],{"class":357},"    keep",[221,11162,361],{"class":350},[221,11164,364],{"class":346},[221,11166,691],{"class":350},[221,11168,5797],{"class":357},[221,11170,361],{"class":350},[221,11172,10851],{"class":2598},[221,11174,10837],{"class":350},[221,11176,476],{"class":350},[221,11178,10829],{"class":357},[221,11180,361],{"class":350},[221,11182,10834],{"class":2598},[221,11184,482],{"class":350},[221,11186,375],{"class":346},[221,11188,378],{"class":350},[221,11190,11191],{"class":223,"line":432},[221,11192,429],{"class":350},[221,11194,11195,11197,11199,11201,11203,11205,11207],{"class":223,"line":950},[221,11196,2555],{"class":342},[221,11198,361],{"class":350},[221,11200,641],{"class":350},[221,11202,2511],{"class":644},[221,11204,652],{"class":350},[221,11206,655],{"class":506},[221,11208,389],{"class":350},[221,11210,11211,11213,11215,11217,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237,11239,11241],{"class":223,"line":1286},[221,11212,4240],{"class":506},[221,11214,694],{"class":346},[221,11216,533],{"class":350},[221,11218,2588],{"class":346},[221,11220,683],{"class":350},[221,11222,3506],{"class":346},[221,11224,683],{"class":350},[221,11226,10990],{"class":346},[221,11228,3513],{"class":335},[221,11230,476],{"class":350},[221,11232,10997],{"class":357},[221,11234,11000],{"class":350},[221,11236,11003],{"class":227},[221,11238,482],{"class":350},[221,11240,11008],{"class":350},[221,11242,11011],{"class":227},[221,11244,11245,11247,11249,11251,11253,11255,11257,11259,11261,11263,11265],{"class":223,"line":1296},[221,11246,2573],{"class":335},[221,11248,641],{"class":357},[221,11250,10990],{"class":346},[221,11252,11026],{"class":350},[221,11254,11029],{"class":346},[221,11256,928],{"class":357},[221,11258,2511],{"class":346},[221,11260,683],{"class":350},[221,11262,2608],{"class":346},[221,11264,533],{"class":350},[221,11266,2613],{"class":741},[221,11268,11269],{"class":223,"line":1306},[221,11270,429],{"class":350},[221,11272,11273,11275],{"class":223,"line":1312},[221,11274,435],{"class":350},[221,11276,438],{"class":346},[198,11278,11279,11280,3795,11283,445,11285,445,11287,445,11289,11291,11292,683],{},"The callback receives a ",[218,11281,11282],{},"TailSamplingContext",[218,11284,5053],{},[218,11286,2582],{},[218,11288,8649],{},[218,11290,8646],{},", and the full accumulated ",[218,11293,3506],{},[279,11295,11297],{"id":11296},"log-draining","Log Draining",[198,11299,11300,11301,11304],{},"Send logs to external services like Axiom, Loki, or custom endpoints. The drain is called in ",[1968,11302,11303],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[207,11306,11307,11487],{},[210,11308,11311],{"className":325,"code":11309,"filename":11310,"language":328,"meta":216,"style":216},"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)",[218,11312,11313,11333,11367,11387,11402,11441,11469,11475,11481],{"__ignoreMap":216},[221,11314,11315,11317,11319,11321,11323,11325,11327,11329,11331],{"class":223,"line":224},[221,11316,336],{"class":335},[221,11318,339],{"class":335},[221,11320,10923],{"class":342},[221,11322,347],{"class":346},[221,11324,347],{"class":350},[221,11326,10930],{"class":644},[221,11328,652],{"class":350},[221,11330,655],{"class":506},[221,11332,389],{"class":350},[221,11334,11335,11337,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357,11359,11361,11363,11365],{"class":223,"line":354},[221,11336,10941],{"class":346},[221,11338,683],{"class":350},[221,11340,10946],{"class":346},[221,11342,683],{"class":350},[221,11344,10951],{"class":342},[221,11346,347],{"class":357},[221,11348,367],{"class":350},[221,11350,1817],{"class":230},[221,11352,367],{"class":350},[221,11354,515],{"class":350},[221,11356,3470],{"class":506},[221,11358,641],{"class":350},[221,11360,2511],{"class":644},[221,11362,652],{"class":350},[221,11364,655],{"class":506},[221,11366,389],{"class":350},[221,11368,11369,11372,11374,11376,11378,11381,11383,11385],{"class":223,"line":381},[221,11370,11371],{"class":335},"    await",[221,11373,6303],{"class":342},[221,11375,347],{"class":357},[221,11377,367],{"class":350},[221,11379,11380],{"class":230},"https://api.axiom.co/v1/datasets/logs/ingest",[221,11382,367],{"class":350},[221,11384,515],{"class":350},[221,11386,389],{"class":350},[221,11388,11389,11392,11394,11396,11398,11400],{"class":223,"line":392},[221,11390,11391],{"class":357},"      method",[221,11393,361],{"class":350},[221,11395,410],{"class":350},[221,11397,8716],{"class":230},[221,11399,367],{"class":350},[221,11401,378],{"class":350},[221,11403,11404,11407,11409,11411,11414,11416,11419,11422,11425,11428,11430,11432,11434,11436,11439],{"class":223,"line":402},[221,11405,11406],{"class":357},"      headers",[221,11408,361],{"class":350},[221,11410,476],{"class":350},[221,11412,11413],{"class":357}," Authorization",[221,11415,361],{"class":350},[221,11417,11418],{"class":350}," `",[221,11420,11421],{"class":230},"Bearer ",[221,11423,11424],{"class":350},"${",[221,11426,11427],{"class":346},"process",[221,11429,683],{"class":350},[221,11431,1541],{"class":346},[221,11433,683],{"class":350},[221,11435,4743],{"class":346},[221,11437,11438],{"class":350},"}`",[221,11440,2742],{"class":350},[221,11442,11443,11446,11448,11451,11453,11455,11458,11460,11462,11464,11467],{"class":223,"line":420},[221,11444,11445],{"class":357},"      body",[221,11447,361],{"class":350},[221,11449,11450],{"class":346}," JSON",[221,11452,683],{"class":350},[221,11454,1715],{"class":342},[221,11456,11457],{"class":357},"([",[221,11459,2511],{"class":346},[221,11461,683],{"class":350},[221,11463,2527],{"class":346},[221,11465,11466],{"class":357},"])",[221,11468,378],{"class":350},[221,11470,11471,11473],{"class":223,"line":426},[221,11472,2747],{"class":350},[221,11474,438],{"class":357},[221,11476,11477,11479],{"class":223,"line":432},[221,11478,4758],{"class":350},[221,11480,438],{"class":357},[221,11482,11483,11485],{"class":223,"line":950},[221,11484,435],{"class":350},[221,11486,438],{"class":346},[210,11488,11490],{"className":325,"code":11489,"filename":11066,"language":328,"meta":216,"style":216},"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",[218,11491,11492,11510,11528,11546,11550,11582,11586,11610,11624,11640,11656,11676,11685],{"__ignoreMap":216},[221,11493,11494,11496,11498,11500,11502,11504,11506,11508],{"class":223,"line":224},[221,11495,473],{"class":335},[221,11497,476],{"class":350},[221,11499,479],{"class":346},[221,11501,482],{"class":350},[221,11503,485],{"class":335},[221,11505,410],{"class":350},[221,11507,490],{"class":230},[221,11509,493],{"class":350},[221,11511,11512,11514,11516,11518,11520,11522,11524,11526],{"class":223,"line":354},[221,11513,473],{"class":335},[221,11515,476],{"class":350},[221,11517,2393],{"class":346},[221,11519,482],{"class":350},[221,11521,485],{"class":335},[221,11523,410],{"class":350},[221,11525,2402],{"class":230},[221,11527,493],{"class":350},[221,11529,11530,11532,11534,11536,11538,11540,11542,11544],{"class":223,"line":381},[221,11531,473],{"class":335},[221,11533,476],{"class":350},[221,11535,8856],{"class":346},[221,11537,482],{"class":350},[221,11539,485],{"class":335},[221,11541,410],{"class":350},[221,11543,8865],{"class":230},[221,11545,493],{"class":350},[221,11547,11548],{"class":223,"line":392},[221,11549,499],{"emptyLinePlaceholder":498},[221,11551,11552,11554,11556,11558,11560,11562,11564,11566,11568,11570,11572,11574,11576,11578,11580],{"class":223,"line":402},[221,11553,4054],{"class":506},[221,11555,8878],{"class":346},[221,11557,631],{"class":350},[221,11559,8856],{"class":342},[221,11561,347],{"class":346},[221,11563,691],{"class":350},[221,11565,8896],{"class":357},[221,11567,361],{"class":350},[221,11569,476],{"class":350},[221,11571,8903],{"class":357},[221,11573,361],{"class":350},[221,11575,10433],{"class":2598},[221,11577,482],{"class":350},[221,11579,482],{"class":350},[221,11581,438],{"class":346},[221,11583,11584],{"class":223,"line":420},[221,11585,499],{"emptyLinePlaceholder":498},[221,11587,11588,11590,11592,11594,11596,11598,11600,11602,11604,11606,11608],{"class":223,"line":426},[221,11589,336],{"class":335},[221,11591,507],{"class":506},[221,11593,476],{"class":350},[221,11595,512],{"class":346},[221,11597,515],{"class":350},[221,11599,11105],{"class":346},[221,11601,435],{"class":350},[221,11603,533],{"class":350},[221,11605,479],{"class":342},[221,11607,347],{"class":346},[221,11609,351],{"class":350},[221,11611,11612,11614,11616,11618,11620,11622],{"class":223,"line":432},[221,11613,544],{"class":357},[221,11615,361],{"class":350},[221,11617,410],{"class":350},[221,11619,413],{"class":230},[221,11621,367],{"class":350},[221,11623,378],{"class":350},[221,11625,11626,11628,11630,11632,11634,11636,11638],{"class":223,"line":950},[221,11627,2491],{"class":357},[221,11629,361],{"class":350},[221,11631,8926],{"class":342},[221,11633,347],{"class":346},[221,11635,8931],{"class":342},[221,11637,347],{"class":346},[221,11639,351],{"class":350},[221,11641,11642,11645,11647,11649,11652,11654],{"class":223,"line":1286},[221,11643,11644],{"class":357},"    dataset",[221,11646,361],{"class":350},[221,11648,410],{"class":350},[221,11650,11651],{"class":230},"logs",[221,11653,367],{"class":350},[221,11655,378],{"class":350},[221,11657,11658,11661,11663,11665,11667,11669,11671,11673],{"class":223,"line":1296},[221,11659,11660],{"class":357},"    token",[221,11662,361],{"class":350},[221,11664,2537],{"class":346},[221,11666,683],{"class":350},[221,11668,1541],{"class":346},[221,11670,683],{"class":350},[221,11672,4743],{"class":346},[221,11674,11675],{"class":350},"!,\n",[221,11677,11678,11680,11683],{"class":223,"line":1306},[221,11679,4758],{"class":350},[221,11681,11682],{"class":346},"))",[221,11684,378],{"class":350},[221,11686,11687,11689],{"class":223,"line":1312},[221,11688,435],{"class":350},[221,11690,438],{"class":346},[198,11692,11693,11694,11696],{},"The hook receives a ",[218,11695,8887],{}," with:",[8406,11698,11699,11708,11719],{},[8409,11700,11701,11703,11704,11707],{},[218,11702,2527],{},": The complete ",[218,11705,11706],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[8409,11709,11710,11712,11713,445,11715,445,11717,652],{},[218,11711,645],{},": Optional request metadata (",[218,11714,8646],{},[218,11716,8649],{},[218,11718,1093],{},[8409,11720,11721,11724],{},[218,11722,11723],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[956,11726,11727,11730,11731,445,11734,445,11737,445,11740,445,11743,445,11746,11749],{"color":10756,"icon":49},[1968,11728,11729],{},"Security:"," Sensitive headers (",[218,11732,11733],{},"authorization",[218,11735,11736],{},"cookie",[218,11738,11739],{},"set-cookie",[218,11741,11742],{},"x-api-key",[218,11744,11745],{},"x-auth-token",[218,11747,11748],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[754,11751,11753],{"id":11752},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[198,11755,6329,11756,11758],{},[218,11757,11723],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[210,11760,11763],{"className":325,"code":11761,"filename":11762,"language":328,"meta":216,"style":216},"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",[218,11764,11765,11785,11799,11803,11835,11852,11856,11886,11914,11918,11933,11937,11951,11958,11974,11983,11996,12007,12011,12017,12023],{"__ignoreMap":216},[221,11766,11767,11769,11771,11773,11775,11777,11779,11781,11783],{"class":223,"line":224},[221,11768,336],{"class":335},[221,11770,339],{"class":335},[221,11772,10923],{"class":342},[221,11774,347],{"class":346},[221,11776,347],{"class":350},[221,11778,10930],{"class":644},[221,11780,652],{"class":350},[221,11782,655],{"class":506},[221,11784,389],{"class":350},[221,11786,11787,11789,11792,11794,11797],{"class":223,"line":354},[221,11788,662],{"class":506},[221,11790,11791],{"class":346}," posthog",[221,11793,533],{"class":350},[221,11795,11796],{"class":342}," usePostHog",[221,11798,849],{"class":357},[221,11800,11801],{"class":223,"line":381},[221,11802,499],{"emptyLinePlaceholder":498},[221,11804,11805,11807,11809,11811,11813,11815,11817,11819,11821,11823,11825,11827,11829,11831,11833],{"class":223,"line":392},[221,11806,10941],{"class":346},[221,11808,683],{"class":350},[221,11810,10946],{"class":346},[221,11812,683],{"class":350},[221,11814,10951],{"class":342},[221,11816,347],{"class":357},[221,11818,367],{"class":350},[221,11820,1817],{"class":230},[221,11822,367],{"class":350},[221,11824,515],{"class":350},[221,11826,641],{"class":350},[221,11828,2511],{"class":644},[221,11830,652],{"class":350},[221,11832,655],{"class":506},[221,11834,389],{"class":350},[221,11836,11837,11839,11841,11844,11847,11849],{"class":223,"line":402},[221,11838,2573],{"class":335},[221,11840,641],{"class":357},[221,11842,11843],{"class":350},"!",[221,11845,11846],{"class":346},"posthog",[221,11848,928],{"class":357},[221,11850,11851],{"class":335},"return\n",[221,11853,11854],{"class":223,"line":420},[221,11855,499],{"emptyLinePlaceholder":498},[221,11857,11858,11860,11863,11865,11867,11869,11871,11873,11876,11878,11881,11883],{"class":223,"line":426},[221,11859,4240],{"class":506},[221,11861,11862],{"class":346}," sessionId",[221,11864,533],{"class":350},[221,11866,2588],{"class":346},[221,11868,683],{"class":350},[221,11870,11723],{"class":346},[221,11872,11026],{"class":350},[221,11874,11875],{"class":357},"[",[221,11877,367],{"class":350},[221,11879,11880],{"class":230},"x-posthog-session-id",[221,11882,367],{"class":350},[221,11884,11885],{"class":357},"]\n",[221,11887,11888,11890,11893,11895,11897,11899,11901,11903,11905,11907,11910,11912],{"class":223,"line":432},[221,11889,4240],{"class":506},[221,11891,11892],{"class":346}," distinctId",[221,11894,533],{"class":350},[221,11896,2588],{"class":346},[221,11898,683],{"class":350},[221,11900,11723],{"class":346},[221,11902,11026],{"class":350},[221,11904,11875],{"class":357},[221,11906,367],{"class":350},[221,11908,11909],{"class":230},"x-posthog-distinct-id",[221,11911,367],{"class":350},[221,11913,11885],{"class":357},[221,11915,11916],{"class":223,"line":950},[221,11917,499],{"emptyLinePlaceholder":498},[221,11919,11920,11922,11924,11926,11929,11931],{"class":223,"line":1286},[221,11921,2573],{"class":335},[221,11923,641],{"class":357},[221,11925,11843],{"class":350},[221,11927,11928],{"class":346},"distinctId",[221,11930,928],{"class":357},[221,11932,11851],{"class":335},[221,11934,11935],{"class":223,"line":1296},[221,11936,499],{"emptyLinePlaceholder":498},[221,11938,11939,11942,11944,11947,11949],{"class":223,"line":1306},[221,11940,11941],{"class":346},"    posthog",[221,11943,683],{"class":350},[221,11945,11946],{"class":342},"capture",[221,11948,347],{"class":357},[221,11950,351],{"class":350},[221,11952,11953,11956],{"class":223,"line":1312},[221,11954,11955],{"class":346},"      distinctId",[221,11957,378],{"class":350},[221,11959,11960,11963,11965,11967,11970,11972],{"class":223,"line":2570},[221,11961,11962],{"class":357},"      event",[221,11964,361],{"class":350},[221,11966,410],{"class":350},[221,11968,11969],{"class":230},"server_log",[221,11971,367],{"class":350},[221,11973,378],{"class":350},[221,11975,11976,11979,11981],{"class":223,"line":2616},[221,11977,11978],{"class":357},"      properties",[221,11980,361],{"class":350},[221,11982,389],{"class":350},[221,11984,11985,11988,11990,11992,11994],{"class":223,"line":2621},[221,11986,11987],{"class":350},"        ...",[221,11989,2511],{"class":346},[221,11991,683],{"class":350},[221,11993,2527],{"class":346},[221,11995,378],{"class":350},[221,11997,11998,12001,12003,12005],{"class":223,"line":3610},[221,11999,12000],{"class":357},"        $session_id",[221,12002,361],{"class":350},[221,12004,11862],{"class":346},[221,12006,378],{"class":350},[221,12008,12009],{"class":223,"line":3615},[221,12010,3603],{"class":350},[221,12012,12013,12015],{"class":223,"line":4599},[221,12014,2747],{"class":350},[221,12016,438],{"class":357},[221,12018,12019,12021],{"class":223,"line":4604},[221,12020,4758],{"class":350},[221,12022,438],{"class":357},[221,12024,12025,12027],{"class":223,"line":4613},[221,12026,435],{"class":350},[221,12028,438],{"class":346},[279,12030,12032],{"id":12031},"event-enrichment","Event Enrichment",[198,12034,12035],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[207,12037,12038,12242],{},[210,12039,12042],{"className":325,"code":12040,"filename":12041,"language":328,"meta":216,"style":216},"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)",[218,12043,12044,12050,12057,12064,12071,12078,12090,12094,12114,12125,12134,12143,12152,12161,12166,12170,12202,12230,12236],{"__ignoreMap":216},[221,12045,12046,12048],{"class":223,"line":224},[221,12047,473],{"class":335},[221,12049,389],{"class":350},[221,12051,12052,12055],{"class":223,"line":354},[221,12053,12054],{"class":346},"  createUserAgentEnricher",[221,12056,378],{"class":350},[221,12058,12059,12062],{"class":223,"line":381},[221,12060,12061],{"class":346},"  createGeoEnricher",[221,12063,378],{"class":350},[221,12065,12066,12069],{"class":223,"line":392},[221,12067,12068],{"class":346},"  createRequestSizeEnricher",[221,12070,378],{"class":350},[221,12072,12073,12076],{"class":223,"line":402},[221,12074,12075],{"class":346},"  createTraceContextEnricher",[221,12077,378],{"class":350},[221,12079,12080,12082,12084,12086,12088],{"class":223,"line":420},[221,12081,435],{"class":350},[221,12083,485],{"class":335},[221,12085,410],{"class":350},[221,12087,5466],{"class":230},[221,12089,493],{"class":350},[221,12091,12092],{"class":223,"line":426},[221,12093,499],{"emptyLinePlaceholder":498},[221,12095,12096,12098,12100,12102,12104,12106,12108,12110,12112],{"class":223,"line":432},[221,12097,336],{"class":335},[221,12099,339],{"class":335},[221,12101,10923],{"class":342},[221,12103,347],{"class":346},[221,12105,347],{"class":350},[221,12107,10930],{"class":644},[221,12109,652],{"class":350},[221,12111,655],{"class":506},[221,12113,389],{"class":350},[221,12115,12116,12118,12121,12123],{"class":223,"line":950},[221,12117,662],{"class":506},[221,12119,12120],{"class":346}," enrichers",[221,12122,533],{"class":350},[221,12124,2710],{"class":357},[221,12126,12127,12130,12132],{"class":223,"line":1286},[221,12128,12129],{"class":342},"    createUserAgentEnricher",[221,12131,1370],{"class":357},[221,12133,378],{"class":350},[221,12135,12136,12139,12141],{"class":223,"line":1296},[221,12137,12138],{"class":342},"    createGeoEnricher",[221,12140,1370],{"class":357},[221,12142,378],{"class":350},[221,12144,12145,12148,12150],{"class":223,"line":1306},[221,12146,12147],{"class":342},"    createRequestSizeEnricher",[221,12149,1370],{"class":357},[221,12151,378],{"class":350},[221,12153,12154,12157,12159],{"class":223,"line":1312},[221,12155,12156],{"class":342},"    createTraceContextEnricher",[221,12158,1370],{"class":357},[221,12160,378],{"class":350},[221,12162,12163],{"class":223,"line":2570},[221,12164,12165],{"class":357},"  ]\n",[221,12167,12168],{"class":223,"line":2616},[221,12169,499],{"emptyLinePlaceholder":498},[221,12171,12172,12174,12176,12178,12180,12182,12184,12186,12188,12190,12192,12194,12196,12198,12200],{"class":223,"line":2621},[221,12173,10941],{"class":346},[221,12175,683],{"class":350},[221,12177,10946],{"class":346},[221,12179,683],{"class":350},[221,12181,10951],{"class":342},[221,12183,347],{"class":357},[221,12185,367],{"class":350},[221,12187,1833],{"class":230},[221,12189,367],{"class":350},[221,12191,515],{"class":350},[221,12193,641],{"class":350},[221,12195,2511],{"class":644},[221,12197,652],{"class":350},[221,12199,655],{"class":506},[221,12201,389],{"class":350},[221,12203,12204,12207,12209,12211,12214,12217,12219,12221,12224,12226,12228],{"class":223,"line":3610},[221,12205,12206],{"class":335},"    for",[221,12208,641],{"class":357},[221,12210,4054],{"class":506},[221,12212,12213],{"class":346}," enricher",[221,12215,12216],{"class":350}," of",[221,12218,12120],{"class":346},[221,12220,928],{"class":357},[221,12222,12223],{"class":342},"enricher",[221,12225,347],{"class":357},[221,12227,2511],{"class":346},[221,12229,438],{"class":357},[221,12231,12232,12234],{"class":223,"line":3615},[221,12233,4758],{"class":350},[221,12235,438],{"class":357},[221,12237,12238,12240],{"class":223,"line":4599},[221,12239,435],{"class":350},[221,12241,438],{"class":346},[210,12243,12245],{"className":325,"code":12244,"filename":11066,"language":328,"meta":216,"style":216},"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",[218,12246,12247,12265,12288,12292,12315,12319,12343,12357,12373,12397,12423,12427],{"__ignoreMap":216},[221,12248,12249,12251,12253,12255,12257,12259,12261,12263],{"class":223,"line":224},[221,12250,473],{"class":335},[221,12252,476],{"class":350},[221,12254,479],{"class":346},[221,12256,482],{"class":350},[221,12258,485],{"class":335},[221,12260,410],{"class":350},[221,12262,490],{"class":230},[221,12264,493],{"class":350},[221,12266,12267,12269,12271,12273,12275,12278,12280,12282,12284,12286],{"class":223,"line":354},[221,12268,473],{"class":335},[221,12270,476],{"class":350},[221,12272,5457],{"class":346},[221,12274,515],{"class":350},[221,12276,12277],{"class":346}," createGeoEnricher",[221,12279,482],{"class":350},[221,12281,485],{"class":335},[221,12283,410],{"class":350},[221,12285,5466],{"class":230},[221,12287,493],{"class":350},[221,12289,12290],{"class":223,"line":381},[221,12291,499],{"emptyLinePlaceholder":498},[221,12293,12294,12296,12299,12301,12303,12306,12308,12310,12312],{"class":223,"line":392},[221,12295,4054],{"class":506},[221,12297,12298],{"class":346}," enrichers ",[221,12300,631],{"class":350},[221,12302,364],{"class":346},[221,12304,12305],{"class":342},"createUserAgentEnricher",[221,12307,1370],{"class":346},[221,12309,515],{"class":350},[221,12311,12277],{"class":342},[221,12313,12314],{"class":346},"()]\n",[221,12316,12317],{"class":223,"line":402},[221,12318,499],{"emptyLinePlaceholder":498},[221,12320,12321,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341],{"class":223,"line":420},[221,12322,336],{"class":335},[221,12324,507],{"class":506},[221,12326,476],{"class":350},[221,12328,512],{"class":346},[221,12330,515],{"class":350},[221,12332,11105],{"class":346},[221,12334,435],{"class":350},[221,12336,533],{"class":350},[221,12338,479],{"class":342},[221,12340,347],{"class":346},[221,12342,351],{"class":350},[221,12344,12345,12347,12349,12351,12353,12355],{"class":223,"line":426},[221,12346,544],{"class":357},[221,12348,361],{"class":350},[221,12350,410],{"class":350},[221,12352,413],{"class":230},[221,12354,367],{"class":350},[221,12356,378],{"class":350},[221,12358,12359,12361,12363,12365,12367,12369,12371],{"class":223,"line":432},[221,12360,2504],{"class":342},[221,12362,361],{"class":350},[221,12364,641],{"class":350},[221,12366,2511],{"class":644},[221,12368,652],{"class":350},[221,12370,655],{"class":506},[221,12372,389],{"class":350},[221,12374,12375,12377,12379,12381,12383,12385,12387,12389,12391,12393,12395],{"class":223,"line":950},[221,12376,12206],{"class":335},[221,12378,641],{"class":357},[221,12380,4054],{"class":506},[221,12382,12213],{"class":346},[221,12384,12216],{"class":350},[221,12386,12120],{"class":346},[221,12388,928],{"class":357},[221,12390,12223],{"class":342},[221,12392,347],{"class":357},[221,12394,2511],{"class":346},[221,12396,438],{"class":357},[221,12398,12399,12401,12403,12405,12407,12410,12412,12414,12416,12418,12420],{"class":223,"line":1286},[221,12400,2522],{"class":346},[221,12402,683],{"class":350},[221,12404,2527],{"class":346},[221,12406,683],{"class":350},[221,12408,12409],{"class":346},"deploymentId",[221,12411,533],{"class":350},[221,12413,2537],{"class":346},[221,12415,683],{"class":350},[221,12417,1541],{"class":346},[221,12419,683],{"class":350},[221,12421,12422],{"class":346},"VERCEL_DEPLOYMENT_ID\n",[221,12424,12425],{"class":223,"line":1296},[221,12426,429],{"class":350},[221,12428,12429,12431],{"class":223,"line":1306},[221,12430,435],{"class":350},[221,12432,438],{"class":346},[1453,12434,12435,12447],{},[1456,12436,12437],{},[1459,12438,12439,12442,12445],{},[1462,12440,12441],{},"Enricher",[1462,12443,12444],{},"Event Field",[1462,12446,1473],{},[1475,12448,12449,12464,12479,12494],{},[1459,12450,12451,12456,12461],{},[1480,12452,12453],{},[218,12454,12455],{},"createUserAgentEnricher()",[1480,12457,12458],{},[218,12459,12460],{},"userAgent",[1480,12462,12463],{},"Browser, OS, device type from User-Agent header",[1459,12465,12466,12471,12476],{},[1480,12467,12468],{},[218,12469,12470],{},"createGeoEnricher()",[1480,12472,12473],{},[218,12474,12475],{},"geo",[1480,12477,12478],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[1459,12480,12481,12486,12491],{},[1480,12482,12483],{},[218,12484,12485],{},"createRequestSizeEnricher()",[1480,12487,12488],{},[218,12489,12490],{},"requestSize",[1480,12492,12493],{},"Request/response payload sizes from Content-Length",[1459,12495,12496,12501,12506],{},[1480,12497,12498],{},[218,12499,12500],{},"createTraceContextEnricher()",[1480,12502,12503],{},[218,12504,12505],{},"traceContext",[1480,12507,12508],{},"W3C trace context (traceId, spanId) from traceparent header",[198,12510,12511],{},"You can also write custom enrichers to add any derived context:",[210,12513,12516],{"className":325,"code":12514,"filename":12515,"language":328,"meta":216,"style":216},"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",[218,12517,12518,12538,12570,12595,12601],{"__ignoreMap":216},[221,12519,12520,12522,12524,12526,12528,12530,12532,12534,12536],{"class":223,"line":224},[221,12521,336],{"class":335},[221,12523,339],{"class":335},[221,12525,10923],{"class":342},[221,12527,347],{"class":346},[221,12529,347],{"class":350},[221,12531,10930],{"class":644},[221,12533,652],{"class":350},[221,12535,655],{"class":506},[221,12537,389],{"class":350},[221,12539,12540,12542,12544,12546,12548,12550,12552,12554,12556,12558,12560,12562,12564,12566,12568],{"class":223,"line":354},[221,12541,10941],{"class":346},[221,12543,683],{"class":350},[221,12545,10946],{"class":346},[221,12547,683],{"class":350},[221,12549,10951],{"class":342},[221,12551,347],{"class":357},[221,12553,367],{"class":350},[221,12555,1833],{"class":230},[221,12557,367],{"class":350},[221,12559,515],{"class":350},[221,12561,641],{"class":350},[221,12563,2511],{"class":644},[221,12565,652],{"class":350},[221,12567,655],{"class":506},[221,12569,389],{"class":350},[221,12571,12572,12574,12576,12578,12580,12582,12584,12586,12588,12590,12592],{"class":223,"line":381},[221,12573,2522],{"class":346},[221,12575,683],{"class":350},[221,12577,2527],{"class":346},[221,12579,683],{"class":350},[221,12581,12409],{"class":346},[221,12583,533],{"class":350},[221,12585,2537],{"class":346},[221,12587,683],{"class":350},[221,12589,1541],{"class":346},[221,12591,683],{"class":350},[221,12593,12594],{"class":346},"DEPLOYMENT_ID\n",[221,12596,12597,12599],{"class":223,"line":392},[221,12598,4758],{"class":350},[221,12600,438],{"class":357},[221,12602,12603,12605],{"class":223,"line":402},[221,12604,435],{"class":350},[221,12606,438],{"class":346},[198,12608,2628,12609,12612],{},[309,12610,12611],{"href":121},"Enrichers guide"," for full documentation.",[202,12614,9403],{"id":12615},"client-transport",[198,12617,12618,12619,445,12622,12625],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[218,12620,12621],{},"log.info()",[218,12623,12624],{},"log.error()",", etc. calls are automatically sent to the server.",[207,12627,12628,12725],{},[210,12629,12632],{"className":325,"code":12630,"filename":12631,"language":328,"meta":216,"style":216},"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)",[218,12633,12634,12646,12664,12672,12681,12692,12711,12715,12719],{"__ignoreMap":216},[221,12635,12636,12638,12640,12642,12644],{"class":223,"line":224},[221,12637,336],{"class":335},[221,12639,339],{"class":335},[221,12641,343],{"class":342},[221,12643,347],{"class":346},[221,12645,351],{"class":350},[221,12647,12648,12650,12652,12654,12656,12658,12660,12662],{"class":223,"line":354},[221,12649,358],{"class":357},[221,12651,361],{"class":350},[221,12653,364],{"class":346},[221,12655,367],{"class":350},[221,12657,370],{"class":230},[221,12659,367],{"class":350},[221,12661,375],{"class":346},[221,12663,378],{"class":350},[221,12665,12666,12668,12670],{"class":223,"line":381},[221,12667,384],{"class":357},[221,12669,361],{"class":350},[221,12671,389],{"class":350},[221,12673,12674,12677,12679],{"class":223,"line":392},[221,12675,12676],{"class":357},"    transport",[221,12678,361],{"class":350},[221,12680,389],{"class":350},[221,12682,12683,12686,12688,12690],{"class":223,"line":402},[221,12684,12685],{"class":357},"      enabled",[221,12687,361],{"class":350},[221,12689,742],{"class":741},[221,12691,378],{"class":350},[221,12693,12694,12697,12699,12701,12704,12706,12708],{"class":223,"line":420},[221,12695,12696],{"class":357},"      endpoint",[221,12698,361],{"class":350},[221,12700,410],{"class":350},[221,12702,12703],{"class":230},"/api/_evlog/ingest",[221,12705,367],{"class":350},[221,12707,515],{"class":350},[221,12709,12710],{"class":674},"  // default\n",[221,12712,12713],{"class":223,"line":426},[221,12714,423],{"class":350},[221,12716,12717],{"class":223,"line":432},[221,12718,429],{"class":350},[221,12720,12721,12723],{"class":223,"line":950},[221,12722,435],{"class":350},[221,12724,438],{"class":346},[210,12726,12728],{"className":1120,"code":1121,"filename":12727,"language":1123,"meta":216,"style":216},"app/layout.tsx (Next.js)",[218,12729,12730,12748,12752,12784,12790,12808,12816,12844,12852,12860,12868,12876,12880],{"__ignoreMap":216},[221,12731,12732,12734,12736,12738,12740,12742,12744,12746],{"class":223,"line":224},[221,12733,473],{"class":335},[221,12735,476],{"class":350},[221,12737,1134],{"class":346},[221,12739,482],{"class":350},[221,12741,485],{"class":335},[221,12743,410],{"class":350},[221,12745,1143],{"class":230},[221,12747,493],{"class":350},[221,12749,12750],{"class":223,"line":354},[221,12751,499],{"emptyLinePlaceholder":498},[221,12753,12754,12756,12758,12760,12762,12764,12766,12768,12770,12772,12774,12776,12778,12780,12782],{"class":223,"line":381},[221,12755,336],{"class":335},[221,12757,339],{"class":335},[221,12759,1158],{"class":506},[221,12761,1161],{"class":342},[221,12763,1164],{"class":350},[221,12765,1167],{"class":644},[221,12767,1170],{"class":350},[221,12769,476],{"class":350},[221,12771,1167],{"class":357},[221,12773,361],{"class":350},[221,12775,1179],{"class":227},[221,12777,683],{"class":350},[221,12779,1184],{"class":227},[221,12781,1187],{"class":350},[221,12783,389],{"class":350},[221,12785,12786,12788],{"class":223,"line":392},[221,12787,721],{"class":335},[221,12789,1196],{"class":357},[221,12791,12792,12794,12796,12798,12800,12802,12804,12806],{"class":223,"line":402},[221,12793,1201],{"class":350},[221,12795,1204],{"class":357},[221,12797,1207],{"class":506},[221,12799,631],{"class":350},[221,12801,1212],{"class":350},[221,12803,1215],{"class":230},[221,12805,1212],{"class":350},[221,12807,1220],{"class":350},[221,12809,12810,12812,12814],{"class":223,"line":420},[221,12811,1225],{"class":350},[221,12813,1228],{"class":357},[221,12815,1220],{"class":350},[221,12817,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12838,12840,12842],{"class":223,"line":426},[221,12819,1235],{"class":350},[221,12821,1117],{"class":227},[221,12823,1240],{"class":506},[221,12825,631],{"class":350},[221,12827,1212],{"class":350},[221,12829,413],{"class":230},[221,12831,1212],{"class":350},[221,12833,1251],{"class":506},[221,12835,1254],{"class":350},[221,12837,1257],{"class":357},[221,12839,361],{"class":350},[221,12841,742],{"class":741},[221,12843,1264],{"class":350},[221,12845,12846,12848,12850],{"class":223,"line":432},[221,12847,1269],{"class":350},[221,12849,1272],{"class":346},[221,12851,1084],{"class":350},[221,12853,12854,12856,12858],{"class":223,"line":950},[221,12855,1279],{"class":350},[221,12857,1117],{"class":227},[221,12859,1220],{"class":350},[221,12861,12862,12864,12866],{"class":223,"line":1286},[221,12863,1289],{"class":350},[221,12865,1228],{"class":357},[221,12867,1220],{"class":350},[221,12869,12870,12872,12874],{"class":223,"line":1296},[221,12871,1299],{"class":350},[221,12873,1204],{"class":357},[221,12875,1220],{"class":350},[221,12877,12878],{"class":223,"line":1306},[221,12879,1309],{"class":357},[221,12881,12882],{"class":223,"line":1312},[221,12883,1084],{"class":350},[754,12885,12887],{"id":12886},"how-it-works","How it works",[12889,12890,12891,12897,12903,12906,12914],"ol",{},[8409,12892,12893,12894],{},"Client calls ",[218,12895,12896],{},"log.info({ action: 'click', button: 'submit' })",[8409,12898,12899,12900,12902],{},"Log is sent to ",[218,12901,12703],{}," via POST",[8409,12904,12905],{},"Server enriches with environment context (service, version, region, etc.)",[8409,12907,12908,12910,12911],{},[218,12909,1817],{}," hook is called with ",[218,12912,12913],{},"source: 'client'",[8409,12915,12916],{},"External services receive the log (Axiom, Loki, etc.)",[956,12918,12919,12920,445,12922,12925,12926,12929],{"color":958,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[218,12921,1484],{},[218,12923,12924],{},"environment",", or ",[218,12927,12928],{},"version"," from the client.",[198,12931,12932,12933,12935],{},"In your drain hook, you can identify client logs by the ",[218,12934,12913],{}," field:",[210,12937,12940],{"className":325,"code":12938,"filename":12939,"language":328,"meta":216,"style":216},"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",[218,12941,12942,12962,12996,13026,13054,13058,13064],{"__ignoreMap":216},[221,12943,12944,12946,12948,12950,12952,12954,12956,12958,12960],{"class":223,"line":224},[221,12945,336],{"class":335},[221,12947,339],{"class":335},[221,12949,10923],{"class":342},[221,12951,347],{"class":346},[221,12953,347],{"class":350},[221,12955,10930],{"class":644},[221,12957,652],{"class":350},[221,12959,655],{"class":506},[221,12961,389],{"class":350},[221,12963,12964,12966,12968,12970,12972,12974,12976,12978,12980,12982,12984,12986,12988,12990,12992,12994],{"class":223,"line":354},[221,12965,10941],{"class":346},[221,12967,683],{"class":350},[221,12969,10946],{"class":346},[221,12971,683],{"class":350},[221,12973,10951],{"class":342},[221,12975,347],{"class":357},[221,12977,367],{"class":350},[221,12979,1817],{"class":230},[221,12981,367],{"class":350},[221,12983,515],{"class":350},[221,12985,3470],{"class":506},[221,12987,641],{"class":350},[221,12989,2511],{"class":644},[221,12991,652],{"class":350},[221,12993,655],{"class":506},[221,12995,389],{"class":350},[221,12997,12998,13000,13002,13004,13006,13008,13010,13012,13015,13017,13020,13022,13024],{"class":223,"line":381},[221,12999,2573],{"class":335},[221,13001,641],{"class":357},[221,13003,2511],{"class":346},[221,13005,683],{"class":350},[221,13007,2527],{"class":346},[221,13009,683],{"class":350},[221,13011,8581],{"class":346},[221,13013,13014],{"class":350}," ===",[221,13016,410],{"class":350},[221,13018,13019],{"class":230},"client",[221,13021,367],{"class":350},[221,13023,928],{"class":357},[221,13025,351],{"class":350},[221,13027,13028,13031,13033,13035,13037,13039,13042,13044,13046,13048,13050,13052],{"class":223,"line":392},[221,13029,13030],{"class":346},"      console",[221,13032,683],{"class":350},[221,13034,1320],{"class":342},[221,13036,347],{"class":357},[221,13038,367],{"class":350},[221,13040,13041],{"class":230},"[CLIENT]",[221,13043,367],{"class":350},[221,13045,515],{"class":350},[221,13047,2588],{"class":346},[221,13049,683],{"class":350},[221,13051,2527],{"class":346},[221,13053,438],{"class":357},[221,13055,13056],{"class":223,"line":402},[221,13057,2161],{"class":350},[221,13059,13060,13062],{"class":223,"line":420},[221,13061,4758],{"class":350},[221,13063,438],{"class":357},[221,13065,13066,13068],{"class":223,"line":426},[221,13067,435],{"class":350},[221,13069,438],{"class":346},[279,13071,13073],{"id":13072},"client-identity","Client Identity",[198,13075,13076,13077,13080],{},"Attach user identity to all client logs with ",[218,13078,13079],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[207,13082,13083,13184],{},[210,13084,13087],{"className":325,"code":13085,"filename":13086,"language":328,"meta":216,"style":216},"// 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)",[218,13088,13089,13094,13133,13137,13163,13168,13172,13177],{"__ignoreMap":216},[221,13090,13091],{"class":223,"line":224},[221,13092,13093],{"class":674},"// After login\n",[221,13095,13096,13099,13101,13103,13106,13108,13110,13113,13115,13117,13120,13122,13124,13127,13129,13131],{"class":223,"line":354},[221,13097,13098],{"class":342},"setIdentity",[221,13100,347],{"class":346},[221,13102,691],{"class":350},[221,13104,13105],{"class":357}," userId",[221,13107,361],{"class":350},[221,13109,410],{"class":350},[221,13111,13112],{"class":230},"usr_123",[221,13114,367],{"class":350},[221,13116,515],{"class":350},[221,13118,13119],{"class":357}," orgId",[221,13121,361],{"class":350},[221,13123,410],{"class":350},[221,13125,13126],{"class":230},"org_456",[221,13128,367],{"class":350},[221,13130,482],{"class":350},[221,13132,438],{"class":346},[221,13134,13135],{"class":223,"line":381},[221,13136,499],{"emptyLinePlaceholder":498},[221,13138,13139,13141,13143,13145,13147,13149,13151,13153,13155,13157,13159,13161],{"class":223,"line":392},[221,13140,1320],{"class":346},[221,13142,683],{"class":350},[221,13144,958],{"class":342},[221,13146,347],{"class":346},[221,13148,691],{"class":350},[221,13150,864],{"class":357},[221,13152,361],{"class":350},[221,13154,410],{"class":350},[221,13156,871],{"class":230},[221,13158,367],{"class":350},[221,13160,482],{"class":350},[221,13162,438],{"class":346},[221,13164,13165],{"class":223,"line":402},[221,13166,13167],{"class":674},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[221,13169,13170],{"class":223,"line":420},[221,13171,499],{"emptyLinePlaceholder":498},[221,13173,13174],{"class":223,"line":426},[221,13175,13176],{"class":674},"// After logout\n",[221,13178,13179,13182],{"class":223,"line":432},[221,13180,13181],{"class":342},"clearIdentity",[221,13183,849],{"class":346},[210,13185,13187],{"className":325,"code":13186,"filename":152,"language":328,"meta":216,"style":216},"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",[218,13188,13189,13217,13221,13225,13259,13263,13289,13293,13297,13301],{"__ignoreMap":216},[221,13190,13191,13193,13195,13198,13200,13203,13205,13207,13209,13211,13213,13215],{"class":223,"line":224},[221,13192,473],{"class":335},[221,13194,476],{"class":350},[221,13196,13197],{"class":346}," setIdentity",[221,13199,515],{"class":350},[221,13201,13202],{"class":346}," clearIdentity",[221,13204,515],{"class":350},[221,13206,523],{"class":346},[221,13208,482],{"class":350},[221,13210,485],{"class":335},[221,13212,410],{"class":350},[221,13214,1143],{"class":230},[221,13216,493],{"class":350},[221,13218,13219],{"class":223,"line":354},[221,13220,499],{"emptyLinePlaceholder":498},[221,13222,13223],{"class":223,"line":381},[221,13224,13093],{"class":674},[221,13226,13227,13229,13231,13233,13235,13237,13239,13241,13243,13245,13247,13249,13251,13253,13255,13257],{"class":223,"line":392},[221,13228,13098],{"class":342},[221,13230,347],{"class":346},[221,13232,691],{"class":350},[221,13234,13105],{"class":357},[221,13236,361],{"class":350},[221,13238,410],{"class":350},[221,13240,13112],{"class":230},[221,13242,367],{"class":350},[221,13244,515],{"class":350},[221,13246,13119],{"class":357},[221,13248,361],{"class":350},[221,13250,410],{"class":350},[221,13252,13126],{"class":230},[221,13254,367],{"class":350},[221,13256,482],{"class":350},[221,13258,438],{"class":346},[221,13260,13261],{"class":223,"line":402},[221,13262,499],{"emptyLinePlaceholder":498},[221,13264,13265,13267,13269,13271,13273,13275,13277,13279,13281,13283,13285,13287],{"class":223,"line":420},[221,13266,1320],{"class":346},[221,13268,683],{"class":350},[221,13270,958],{"class":342},[221,13272,347],{"class":346},[221,13274,691],{"class":350},[221,13276,864],{"class":357},[221,13278,361],{"class":350},[221,13280,410],{"class":350},[221,13282,871],{"class":230},[221,13284,367],{"class":350},[221,13286,482],{"class":350},[221,13288,438],{"class":346},[221,13290,13291],{"class":223,"line":426},[221,13292,13167],{"class":674},[221,13294,13295],{"class":223,"line":432},[221,13296,499],{"emptyLinePlaceholder":498},[221,13298,13299],{"class":223,"line":950},[221,13300,13176],{"class":674},[221,13302,13303,13305],{"class":223,"line":1286},[221,13304,13181],{"class":342},[221,13306,849],{"class":346},[198,13308,13309,13310,969,13312,13314,13315,683],{},"In Nuxt, ",[218,13311,13098],{},[218,13313,13181],{}," are auto-imported. In Next.js, import them from ",[218,13316,1143],{},[198,13318,13319],{},"Per-event fields override identity fields, so you can always pass explicit values:",[210,13321,13323],{"className":325,"code":13322,"language":328,"meta":216,"style":216},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[218,13324,13325,13347,13374],{"__ignoreMap":216},[221,13326,13327,13329,13331,13333,13335,13337,13339,13341,13343,13345],{"class":223,"line":224},[221,13328,13098],{"class":342},[221,13330,347],{"class":346},[221,13332,691],{"class":350},[221,13334,13105],{"class":357},[221,13336,361],{"class":350},[221,13338,410],{"class":350},[221,13340,13112],{"class":230},[221,13342,367],{"class":350},[221,13344,482],{"class":350},[221,13346,438],{"class":346},[221,13348,13349,13351,13353,13355,13357,13359,13361,13363,13365,13368,13370,13372],{"class":223,"line":354},[221,13350,1320],{"class":346},[221,13352,683],{"class":350},[221,13354,958],{"class":342},[221,13356,347],{"class":346},[221,13358,691],{"class":350},[221,13360,13105],{"class":357},[221,13362,361],{"class":350},[221,13364,410],{"class":350},[221,13366,13367],{"class":230},"usr_admin_override",[221,13369,367],{"class":350},[221,13371,482],{"class":350},[221,13373,438],{"class":346},[221,13375,13376],{"class":223,"line":381},[221,13377,13378],{"class":674},"// -> { userId: 'usr_admin_override', ... }\n",[754,13380,13382],{"id":13381},"syncing-identity-with-auth","Syncing identity with auth",[198,13384,13385],{},"Use a global route middleware to automatically sync identity with your auth state:",[210,13387,13390],{"className":325,"code":13388,"filename":13389,"language":328,"meta":216,"style":216},"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",[218,13391,13392,13409,13429,13433,13451,13496,13505,13512,13516],{"__ignoreMap":216},[221,13393,13394,13396,13398,13401,13403,13405,13407],{"class":223,"line":224},[221,13395,336],{"class":335},[221,13397,339],{"class":335},[221,13399,13400],{"class":342}," defineNuxtRouteMiddleware",[221,13402,347],{"class":346},[221,13404,1370],{"class":350},[221,13406,655],{"class":506},[221,13408,389],{"class":350},[221,13410,13411,13413,13415,13417,13419,13421,13424,13426],{"class":223,"line":354},[221,13412,662],{"class":506},[221,13414,476],{"class":350},[221,13416,694],{"class":346},[221,13418,482],{"class":350},[221,13420,533],{"class":350},[221,13422,13423],{"class":342}," useAuth",[221,13425,8634],{"class":357},[221,13427,13428],{"class":674},"// better-auth, supabase, clerk, etc.\n",[221,13430,13431],{"class":223,"line":381},[221,13432,499],{"emptyLinePlaceholder":498},[221,13434,13435,13438,13440,13442,13444,13447,13449],{"class":223,"line":392},[221,13436,13437],{"class":335},"  if",[221,13439,641],{"class":357},[221,13441,10990],{"class":346},[221,13443,683],{"class":350},[221,13445,13446],{"class":346},"value",[221,13448,928],{"class":357},[221,13450,351],{"class":350},[221,13452,13453,13456,13458,13460,13462,13464,13466,13468,13470,13472,13474,13476,13479,13481,13483,13485,13487,13489,13492,13494],{"class":223,"line":402},[221,13454,13455],{"class":342},"    setIdentity",[221,13457,347],{"class":357},[221,13459,691],{"class":350},[221,13461,13105],{"class":357},[221,13463,361],{"class":350},[221,13465,694],{"class":346},[221,13467,683],{"class":350},[221,13469,13446],{"class":346},[221,13471,683],{"class":350},[221,13473,2304],{"class":346},[221,13475,515],{"class":350},[221,13477,13478],{"class":357}," email",[221,13480,361],{"class":350},[221,13482,694],{"class":346},[221,13484,683],{"class":350},[221,13486,13446],{"class":346},[221,13488,683],{"class":350},[221,13490,13491],{"class":346},"email",[221,13493,482],{"class":350},[221,13495,438],{"class":357},[221,13497,13498,13500,13503],{"class":223,"line":420},[221,13499,4758],{"class":350},[221,13501,13502],{"class":335}," else",[221,13504,389],{"class":350},[221,13506,13507,13510],{"class":223,"line":426},[221,13508,13509],{"class":342},"    clearIdentity",[221,13511,849],{"class":357},[221,13513,13514],{"class":223,"line":432},[221,13515,2166],{"class":350},[221,13517,13518,13520],{"class":223,"line":950},[221,13519,435],{"class":350},[221,13521,438],{"class":346},[956,13523,13525,13535],{"color":958,"icon":13524},"i-lucide-lightbulb",[198,13526,13527,13530,13531,13534],{},[1968,13528,13529],{},"Tip:"," Use Nuxt's ",[218,13532,13533],{},"$production"," override to sample and suppress browser console output in production while keeping full visibility in development:",[210,13536,13538],{"className":325,"code":13537,"filename":327,"language":328,"meta":216,"style":216},"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",[218,13539,13540,13552,13570,13578,13598,13602,13611,13619,13632,13640,13673,13706,13710,13714,13718],{"__ignoreMap":216},[221,13541,13542,13544,13546,13548,13550],{"class":223,"line":224},[221,13543,336],{"class":335},[221,13545,339],{"class":335},[221,13547,343],{"class":342},[221,13549,347],{"class":346},[221,13551,351],{"class":350},[221,13553,13554,13556,13558,13560,13562,13564,13566,13568],{"class":223,"line":354},[221,13555,358],{"class":357},[221,13557,361],{"class":350},[221,13559,364],{"class":346},[221,13561,367],{"class":350},[221,13563,370],{"class":230},[221,13565,367],{"class":350},[221,13567,375],{"class":346},[221,13569,378],{"class":350},[221,13571,13572,13574,13576],{"class":223,"line":381},[221,13573,384],{"class":357},[221,13575,361],{"class":350},[221,13577,389],{"class":350},[221,13579,13580,13582,13584,13586,13588,13590,13592,13594,13596],{"class":223,"line":392},[221,13581,395],{"class":357},[221,13583,361],{"class":350},[221,13585,476],{"class":350},[221,13587,1240],{"class":357},[221,13589,361],{"class":350},[221,13591,410],{"class":350},[221,13593,413],{"class":230},[221,13595,367],{"class":350},[221,13597,2742],{"class":350},[221,13599,13600],{"class":223,"line":402},[221,13601,429],{"class":350},[221,13603,13604,13607,13609],{"class":223,"line":420},[221,13605,13606],{"class":357},"  $production",[221,13608,361],{"class":350},[221,13610,389],{"class":350},[221,13612,13613,13615,13617],{"class":223,"line":426},[221,13614,2715],{"class":357},[221,13616,361],{"class":350},[221,13618,389],{"class":350},[221,13620,13621,13623,13625,13627,13629],{"class":223,"line":432},[221,13622,13030],{"class":357},[221,13624,361],{"class":350},[221,13626,6775],{"class":741},[221,13628,515],{"class":350},[221,13630,13631],{"class":674}," // Suppress browser DevTools console, keep transport\n",[221,13633,13634,13636,13638],{"class":223,"line":950},[221,13635,10560],{"class":357},[221,13637,361],{"class":350},[221,13639,389],{"class":350},[221,13641,13642,13644,13646,13648,13650,13652,13654,13656,13658,13660,13662,13664,13666,13668,13671],{"class":223,"line":1286},[221,13643,10569],{"class":357},[221,13645,361],{"class":350},[221,13647,476],{"class":350},[221,13649,10576],{"class":357},[221,13651,361],{"class":350},[221,13653,8908],{"class":2598},[221,13655,515],{"class":350},[221,13657,10585],{"class":357},[221,13659,361],{"class":350},[221,13661,10433],{"class":2598},[221,13663,515],{"class":350},[221,13665,10594],{"class":357},[221,13667,361],{"class":350},[221,13669,13670],{"class":2598}," 0",[221,13672,2742],{"class":350},[221,13674,13675,13678,13680,13682,13684,13686,13688,13690,13692,13694,13696,13698,13700,13702,13704],{"class":223,"line":1296},[221,13676,13677],{"class":357},"        keep",[221,13679,361],{"class":350},[221,13681,364],{"class":346},[221,13683,691],{"class":350},[221,13685,10829],{"class":357},[221,13687,361],{"class":350},[221,13689,10834],{"class":2598},[221,13691,10837],{"class":350},[221,13693,476],{"class":350},[221,13695,5797],{"class":357},[221,13697,361],{"class":350},[221,13699,10851],{"class":2598},[221,13701,482],{"class":350},[221,13703,375],{"class":346},[221,13705,378],{"class":350},[221,13707,13708],{"class":223,"line":1306},[221,13709,3603],{"class":350},[221,13711,13712],{"class":223,"line":1312},[221,13713,423],{"class":350},[221,13715,13716],{"class":223,"line":2570},[221,13717,429],{"class":350},[221,13719,13720,13722],{"class":223,"line":2616},[221,13721,435],{"class":350},[221,13723,438],{"class":346},[202,13725,13727],{"id":13726},"typescript-configuration","TypeScript Configuration",[198,13729,13730],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[956,13732,13734],{"color":10756,"icon":13733},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[202,13736,13738],{"id":13737},"next-steps","Next Steps",[8406,13740,13741,13746],{},[8409,13742,13743,13745],{},[309,13744,20],{"href":21}," - Learn the core concepts and start using evlog",[8409,13747,13748,13751],{},[309,13749,13750],{"href":153},"Next.js Example"," - Full Next.js App Router example with enrichers, pipeline, and drain",[13753,13754,13755],"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":216,"searchDepth":354,"depth":354,"links":13757},[13758,13761,13776,13783,13786,13787],{"id":204,"depth":354,"text":205,"children":13759},[13760],{"id":281,"depth":381,"text":282},{"id":314,"depth":354,"text":315,"children":13762},[13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,13775],{"id":318,"depth":381,"text":319},{"id":456,"depth":381,"text":152},{"id":1905,"depth":381,"text":157},{"id":2635,"depth":381,"text":2636},{"id":2904,"depth":381,"text":2905},{"id":3179,"depth":381,"text":162},{"id":3788,"depth":381,"text":167},{"id":5136,"depth":381,"text":172},{"id":5975,"depth":381,"text":177},{"id":6626,"depth":381,"text":182},{"id":7308,"depth":381,"text":187},{"id":8073,"depth":381,"text":8074},{"id":8442,"depth":381,"text":8443},{"id":9157,"depth":354,"text":9158,"children":13777},[13778,13779,13780,13781,13782],{"id":9406,"depth":381,"text":9407},{"id":9809,"depth":381,"text":9810},{"id":10332,"depth":381,"text":56},{"id":11296,"depth":381,"text":11297},{"id":12031,"depth":381,"text":12032},{"id":12615,"depth":354,"text":9403,"children":13784},[13785],{"id":13072,"depth":381,"text":13073},{"id":13726,"depth":354,"text":13727},{"id":13737,"depth":354,"text":13738},"Install evlog in your Nuxt, Next.js, SvelteKit, Nitro, NestJS, or any TypeScript project. Configure sampling, log draining, and client transport.","md",[13791],{"label":20,"icon":23,"to":21,"color":1896,"variant":13792},"subtle",{},{"title":15,"icon":18},{"title":193,"description":13788},"191XeL8afhiqYaLWpFQRn8M-GY4r43Y38xjnuNxYo_I",[13798,13800],{"title":10,"path":11,"stem":12,"description":13799,"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":13801,"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.",1772902099643]