[{"data":1,"prerenderedAt":11771},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":166,"-getting-started-installation-surround":11766},[4,30,55,105,122,136],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45,50],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"icon":54},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields","i-simple-icons-typescript",{"title":56,"path":57,"stem":58,"children":59,"page":29},"Adapters","/adapters","3.adapters",[60,65,70,75,80,85,90,95,100],{"title":61,"path":62,"stem":63,"icon":64},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":66,"path":67,"stem":68,"icon":69},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":71,"path":72,"stem":73,"icon":74},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":76,"path":77,"stem":78,"icon":79},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":81,"path":82,"stem":83,"icon":84},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":86,"path":87,"stem":88,"icon":89},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":91,"path":92,"stem":93,"icon":94},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":96,"path":97,"stem":98,"icon":99},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":101,"path":102,"stem":103,"icon":104},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Enrichers","/enrichers","4.enrichers",[110,113,118],{"title":61,"path":111,"stem":112,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":114,"path":115,"stem":116,"icon":117},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":119,"path":120,"stem":121,"icon":94},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":123,"path":124,"stem":125,"children":126,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[127,131],{"title":61,"path":128,"stem":129,"icon":130},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":132,"path":133,"stem":134,"icon":135},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":137,"path":138,"stem":139,"children":140,"page":29},"Examples","/examples","6.examples",[141,146,151,156,161],{"title":142,"path":143,"stem":144,"icon":145},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":147,"path":148,"stem":149,"icon":150},"TanStack Start","/examples/tanstack-start","6.examples/2.tanstack-start","i-custom-tanstack",{"title":152,"path":153,"stem":154,"icon":155},"Hono","/examples/hono","6.examples/3.hono","i-simple-icons-hono",{"title":157,"path":158,"stem":159,"icon":160},"Express","/examples/express","6.examples/4.express","i-simple-icons-express",{"title":162,"path":163,"stem":164,"icon":165},"Elysia","/examples/elysia","6.examples/5.elysia","i-custom-elysia",{"id":167,"title":168,"body":169,"description":11757,"extension":11758,"links":11759,"meta":11762,"navigation":11763,"path":16,"seo":11764,"stem":17,"__hash__":11765},"docs/1.getting-started/2.installation.md","Install evlog",{"type":170,"value":171,"toc":11727},"minimark",[172,176,181,253,258,261,280,287,291,295,298,414,429,432,438,536,542,728,733,738,930,953,957,974,1060,1070,1083,1087,1093,1290,1297,1418,1422,1427,1702,1706,1869,1878,1882,1889,2008,2013,2148,2152,2158,2268,2272,2402,2425,2428,2441,2453,2584,2595,2874,2886,2903,3034,3040,3044,3047,3369,3372,3390,3393,3419,3429,3432,3439,3456,3796,3803,4111,4120,4127,4130,4144,4160,4412,4415,4691,4694,4954,4959,4962,4974,4990,5212,5215,5491,5498,5725,5730,5734,5745,5761,6009,6011,6289,6294,6385,6396,6402,6406,6409,6600,6613,6626,6713,6720,6724,6740,7109,7117,7121,7128,7353,7367,7371,7378,7761,7772,7776,7779,8286,8297,8300,8303,8307,8314,8721,8735,8739,8746,8854,8861,8865,8874,9244,9262,9266,9273,9660,9666,9694,9719,9723,9728,9998,10002,10005,10402,10478,10481,10576,10582,10585,10595,10853,10857,10886,10899,10905,11039,11043,11050,11276,11286,11289,11348,11352,11355,11492,11695,11699,11702,11706,11710,11723],[173,174,175],"p",{},"evlog supports multiple environments: Nuxt, Next.js, Nitro, Cloudflare Workers, and standalone TypeScript.",[177,178,180],"h2",{"id":179},"install","Install",[182,183,184,210,225,239],"code-group",{},[185,186,192],"pre",{"className":187,"code":188,"filename":189,"language":190,"meta":191,"style":191},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[193,194,195],"code",{"__ignoreMap":191},[196,197,200,203,207],"span",{"class":198,"line":199},"line",1,[196,201,189],{"class":202},"sBMFI",[196,204,206],{"class":205},"sfazB"," add",[196,208,209],{"class":205}," evlog\n",[185,211,214],{"className":187,"code":212,"filename":213,"language":190,"meta":191,"style":191},"npm install evlog\n","npm",[193,215,216],{"__ignoreMap":191},[196,217,218,220,223],{"class":198,"line":199},[196,219,213],{"class":202},[196,221,222],{"class":205}," install",[196,224,209],{"class":205},[185,226,229],{"className":187,"code":227,"filename":228,"language":190,"meta":191,"style":191},"yarn add evlog\n","yarn",[193,230,231],{"__ignoreMap":191},[196,232,233,235,237],{"class":198,"line":199},[196,234,228],{"class":202},[196,236,206],{"class":205},[196,238,209],{"class":205},[185,240,243],{"className":187,"code":241,"filename":242,"language":190,"meta":191,"style":191},"bun add evlog\n","bun",[193,244,245],{"__ignoreMap":191},[196,246,247,249,251],{"class":198,"line":199},[196,248,242],{"class":202},[196,250,206],{"class":205},[196,252,209],{"class":205},[254,255,257],"h3",{"id":256},"using-agent-skills","Using Agent Skills",[173,259,260],{},"If you use an AI assistant (Claude Code, Cursor, etc.), install the evlog skill for guided setup and code review:",[185,262,265],{"className":187,"code":263,"filename":264,"language":190,"meta":191,"style":191},"npx skills add hugorcd/evlog\n","Terminal",[193,266,267],{"__ignoreMap":191},[196,268,269,272,275,277],{"class":198,"line":199},[196,270,271],{"class":202},"npx",[196,273,274],{"class":205}," skills",[196,276,206],{"class":205},[196,278,279],{"class":205}," hugorcd/evlog\n",[173,281,282,283,286],{},"Your AI assistant can then help you set up evlog, review your logging patterns, and migrate existing code to wide events. See ",[284,285,25],"a",{"href":26}," for details.",[177,288,290],{"id":289},"setup","Setup",[254,292,294],{"id":293},"nuxt","Nuxt",[173,296,297],{},"Add evlog to your Nuxt config:",[185,299,304],{"className":300,"code":301,"filename":302,"language":303,"meta":191,"style":191},"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",[193,305,306,327,354,365,375,393,399,405],{"__ignoreMap":191},[196,307,308,312,315,319,323],{"class":198,"line":199},[196,309,311],{"class":310},"s7zQu","export",[196,313,314],{"class":310}," default",[196,316,318],{"class":317},"s2Zo4"," defineNuxtConfig",[196,320,322],{"class":321},"sTEyZ","(",[196,324,326],{"class":325},"sMK4o","{\n",[196,328,330,334,337,340,343,346,348,351],{"class":198,"line":329},2,[196,331,333],{"class":332},"swJcz","  modules",[196,335,336],{"class":325},":",[196,338,339],{"class":321}," [",[196,341,342],{"class":325},"'",[196,344,345],{"class":205},"evlog/nuxt",[196,347,342],{"class":325},[196,349,350],{"class":321},"]",[196,352,353],{"class":325},",\n",[196,355,357,360,362],{"class":198,"line":356},3,[196,358,359],{"class":332},"  evlog",[196,361,336],{"class":325},[196,363,364],{"class":325}," {\n",[196,366,368,371,373],{"class":198,"line":367},4,[196,369,370],{"class":332},"    env",[196,372,336],{"class":325},[196,374,364],{"class":325},[196,376,378,381,383,386,389,391],{"class":198,"line":377},5,[196,379,380],{"class":332},"      service",[196,382,336],{"class":325},[196,384,385],{"class":325}," '",[196,387,388],{"class":205},"my-app",[196,390,342],{"class":325},[196,392,353],{"class":325},[196,394,396],{"class":198,"line":395},6,[196,397,398],{"class":325},"    },\n",[196,400,402],{"class":198,"line":401},7,[196,403,404],{"class":325},"  },\n",[196,406,408,411],{"class":198,"line":407},8,[196,409,410],{"class":325},"}",[196,412,413],{"class":321},")\n",[173,415,416,417,420,421,424,425,428],{},"That's it. ",[193,418,419],{},"useLogger",", ",[193,422,423],{},"createError",", and ",[193,426,427],{},"parseError"," are auto-imported.",[254,430,142],{"id":431},"nextjs",[173,433,434,435,336],{},"Create a shared evlog instance with ",[193,436,437],{},"createEvlog()",[185,439,442],{"className":300,"code":440,"filename":441,"language":303,"meta":191,"style":191},"import { createEvlog } from 'evlog/next'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib/evlog.ts",[193,443,444,469,475,515,530],{"__ignoreMap":191},[196,445,446,449,452,455,458,461,463,466],{"class":198,"line":199},[196,447,448],{"class":310},"import",[196,450,451],{"class":325}," {",[196,453,454],{"class":321}," createEvlog",[196,456,457],{"class":325}," }",[196,459,460],{"class":310}," from",[196,462,385],{"class":325},[196,464,465],{"class":205},"evlog/next",[196,467,468],{"class":325},"'\n",[196,470,471],{"class":198,"line":329},[196,472,474],{"emptyLinePlaceholder":473},true,"\n",[196,476,477,479,483,485,488,491,494,496,499,501,504,506,509,511,513],{"class":198,"line":356},[196,478,311],{"class":310},[196,480,482],{"class":481},"spNyl"," const",[196,484,451],{"class":325},[196,486,487],{"class":321}," withEvlog",[196,489,490],{"class":325},",",[196,492,493],{"class":321}," useLogger",[196,495,490],{"class":325},[196,497,498],{"class":321}," log",[196,500,490],{"class":325},[196,502,503],{"class":321}," createError ",[196,505,410],{"class":325},[196,507,508],{"class":325}," =",[196,510,454],{"class":317},[196,512,322],{"class":321},[196,514,326],{"class":325},[196,516,517,520,522,524,526,528],{"class":198,"line":367},[196,518,519],{"class":332},"  service",[196,521,336],{"class":325},[196,523,385],{"class":325},[196,525,388],{"class":205},[196,527,342],{"class":325},[196,529,353],{"class":325},[196,531,532,534],{"class":198,"line":377},[196,533,410],{"class":325},[196,535,413],{"class":321},[173,537,538,539,336],{},"Wrap your route handlers with ",[193,540,541],{},"withEvlog()",[185,543,546],{"className":300,"code":544,"filename":545,"language":303,"meta":191,"style":191},"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",[193,547,548,568,591,595,633,651,692,722],{"__ignoreMap":191},[196,549,550,552,554,557,559,561,563,566],{"class":198,"line":199},[196,551,448],{"class":310},[196,553,451],{"class":325},[196,555,556],{"class":321}," NextRequest",[196,558,457],{"class":325},[196,560,460],{"class":310},[196,562,385],{"class":325},[196,564,565],{"class":205},"next/server",[196,567,468],{"class":325},[196,569,570,572,574,576,578,580,582,584,586,589],{"class":198,"line":329},[196,571,448],{"class":310},[196,573,451],{"class":325},[196,575,487],{"class":321},[196,577,490],{"class":325},[196,579,493],{"class":321},[196,581,457],{"class":325},[196,583,460],{"class":310},[196,585,385],{"class":325},[196,587,588],{"class":205},"@/lib/evlog",[196,590,468],{"class":325},[196,592,593],{"class":198,"line":356},[196,594,474],{"emptyLinePlaceholder":473},[196,596,597,599,601,604,607,609,611,614,617,621,623,625,628,631],{"class":198,"line":367},[196,598,311],{"class":310},[196,600,482],{"class":481},[196,602,603],{"class":321}," POST ",[196,605,606],{"class":325},"=",[196,608,487],{"class":317},[196,610,322],{"class":321},[196,612,613],{"class":481},"async",[196,615,616],{"class":325}," (",[196,618,620],{"class":619},"sHdIc","request",[196,622,336],{"class":325},[196,624,556],{"class":202},[196,626,627],{"class":325},")",[196,629,630],{"class":481}," =>",[196,632,364],{"class":325},[196,634,635,638,640,642,644,647],{"class":198,"line":377},[196,636,637],{"class":481},"  const",[196,639,498],{"class":321},[196,641,508],{"class":325},[196,643,493],{"class":317},[196,645,646],{"class":332},"()  ",[196,648,650],{"class":649},"sHwdD","// Zero arguments — AsyncLocalStorage\n",[196,652,653,656,659,662,664,667,670,672,674,677,679,681,684,686,688,690],{"class":198,"line":395},[196,654,655],{"class":321},"  log",[196,657,658],{"class":325},".",[196,660,661],{"class":317},"set",[196,663,322],{"class":332},[196,665,666],{"class":325},"{",[196,668,669],{"class":332}," user",[196,671,336],{"class":325},[196,673,451],{"class":325},[196,675,676],{"class":332}," id",[196,678,336],{"class":325},[196,680,385],{"class":325},[196,682,683],{"class":205},"123",[196,685,342],{"class":325},[196,687,457],{"class":325},[196,689,457],{"class":325},[196,691,413],{"class":332},[196,693,694,697,700,702,705,707,709,712,714,718,720],{"class":198,"line":401},[196,695,696],{"class":310},"  return",[196,698,699],{"class":321}," Response",[196,701,658],{"class":325},[196,703,704],{"class":317},"json",[196,706,322],{"class":332},[196,708,666],{"class":325},[196,710,711],{"class":332}," success",[196,713,336],{"class":325},[196,715,717],{"class":716},"sfNiH"," true",[196,719,457],{"class":325},[196,721,413],{"class":332},[196,723,724,726],{"class":198,"line":407},[196,725,410],{"class":325},[196,727,413],{"class":321},[729,730,732],"h4",{"id":731},"server-actions","Server Actions",[173,734,735,737],{},[193,736,541],{}," works with server actions — just wrap the function:",[185,739,742],{"className":300,"code":740,"filename":741,"language":303,"meta":191,"style":191},"'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",[193,743,744,753,775,779,812,825,867,908,923],{"__ignoreMap":191},[196,745,746,748,751],{"class":198,"line":199},[196,747,342],{"class":325},[196,749,750],{"class":205},"use server",[196,752,468],{"class":325},[196,754,755,757,759,761,763,765,767,769,771,773],{"class":198,"line":329},[196,756,448],{"class":310},[196,758,451],{"class":325},[196,760,487],{"class":321},[196,762,490],{"class":325},[196,764,493],{"class":321},[196,766,457],{"class":325},[196,768,460],{"class":310},[196,770,385],{"class":325},[196,772,588],{"class":205},[196,774,468],{"class":325},[196,776,777],{"class":198,"line":356},[196,778,474],{"emptyLinePlaceholder":473},[196,780,781,783,785,788,790,792,794,796,798,801,803,806,808,810],{"class":198,"line":367},[196,782,311],{"class":310},[196,784,482],{"class":481},[196,786,787],{"class":321}," checkout ",[196,789,606],{"class":325},[196,791,487],{"class":317},[196,793,322],{"class":321},[196,795,613],{"class":481},[196,797,616],{"class":325},[196,799,800],{"class":619},"formData",[196,802,336],{"class":325},[196,804,805],{"class":202}," FormData",[196,807,627],{"class":325},[196,809,630],{"class":481},[196,811,364],{"class":325},[196,813,814,816,818,820,822],{"class":198,"line":377},[196,815,637],{"class":481},[196,817,498],{"class":321},[196,819,508],{"class":325},[196,821,493],{"class":317},[196,823,824],{"class":332},"()\n",[196,826,827,829,831,833,835,837,840,842,844,847,849,851,854,856,858,861,863,865],{"class":198,"line":395},[196,828,655],{"class":321},[196,830,658],{"class":325},[196,832,661],{"class":317},[196,834,322],{"class":332},[196,836,666],{"class":325},[196,838,839],{"class":332}," action",[196,841,336],{"class":325},[196,843,385],{"class":325},[196,845,846],{"class":205},"checkout",[196,848,342],{"class":325},[196,850,490],{"class":325},[196,852,853],{"class":332}," source",[196,855,336],{"class":325},[196,857,385],{"class":325},[196,859,860],{"class":205},"server-action",[196,862,342],{"class":325},[196,864,457],{"class":325},[196,866,413],{"class":332},[196,868,869,871,873,875,877,879,882,884,887,889,892,894,896,899,901,904,906],{"class":198,"line":401},[196,870,655],{"class":321},[196,872,658],{"class":325},[196,874,661],{"class":317},[196,876,322],{"class":332},[196,878,666],{"class":325},[196,880,881],{"class":332}," item",[196,883,336],{"class":325},[196,885,886],{"class":321}," formData",[196,888,658],{"class":325},[196,890,891],{"class":317},"get",[196,893,322],{"class":332},[196,895,342],{"class":325},[196,897,898],{"class":205},"item",[196,900,342],{"class":325},[196,902,903],{"class":332},") ",[196,905,410],{"class":325},[196,907,413],{"class":332},[196,909,910,912,914,916,918,920],{"class":198,"line":407},[196,911,696],{"class":310},[196,913,451],{"class":325},[196,915,711],{"class":332},[196,917,336],{"class":325},[196,919,717],{"class":716},[196,921,922],{"class":325}," }\n",[196,924,926,928],{"class":198,"line":925},9,[196,927,410],{"class":325},[196,929,413],{"class":321},[931,932,934,935,420,938,940,941,944,945,948,949,952],"callout",{"color":933,"icon":13},"info","When the first argument is not a ",[193,936,937],{},"Request",[193,939,541],{}," still creates a logger but with ",[193,942,943],{},"method: 'UNKNOWN'"," and ",[193,946,947],{},"path: '/'",". Use ",[193,950,951],{},"log.set()"," to add context.",[729,954,956],{"id":955},"middleware","Middleware",[173,958,959,960,963,964,944,967,970,971,973],{},"The optional ",[193,961,962],{},"evlogMiddleware()"," sets ",[193,965,966],{},"x-request-id",[193,968,969],{},"x-evlog-start"," headers so ",[193,972,541],{}," can reuse them for consistent timing and request correlation across the middleware → handler chain.",[185,975,978],{"className":300,"code":976,"filename":977,"language":303,"meta":191,"style":191},"import { evlogMiddleware } from 'evlog/next'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['/api/:path*'],\n}\n","proxy.ts",[193,979,980,999,1003,1018,1022,1035,1055],{"__ignoreMap":191},[196,981,982,984,986,989,991,993,995,997],{"class":198,"line":199},[196,983,448],{"class":310},[196,985,451],{"class":325},[196,987,988],{"class":321}," evlogMiddleware",[196,990,457],{"class":325},[196,992,460],{"class":310},[196,994,385],{"class":325},[196,996,465],{"class":205},[196,998,468],{"class":325},[196,1000,1001],{"class":198,"line":329},[196,1002,474],{"emptyLinePlaceholder":473},[196,1004,1005,1007,1009,1012,1014,1016],{"class":198,"line":356},[196,1006,311],{"class":310},[196,1008,482],{"class":481},[196,1010,1011],{"class":321}," proxy ",[196,1013,606],{"class":325},[196,1015,988],{"class":317},[196,1017,824],{"class":321},[196,1019,1020],{"class":198,"line":367},[196,1021,474],{"emptyLinePlaceholder":473},[196,1023,1024,1026,1028,1031,1033],{"class":198,"line":377},[196,1025,311],{"class":310},[196,1027,482],{"class":481},[196,1029,1030],{"class":321}," config ",[196,1032,606],{"class":325},[196,1034,364],{"class":325},[196,1036,1037,1040,1042,1044,1046,1049,1051,1053],{"class":198,"line":395},[196,1038,1039],{"class":332},"  matcher",[196,1041,336],{"class":325},[196,1043,339],{"class":321},[196,1045,342],{"class":325},[196,1047,1048],{"class":205},"/api/:path*",[196,1050,342],{"class":325},[196,1052,350],{"class":321},[196,1054,353],{"class":325},[196,1056,1057],{"class":198,"line":401},[196,1058,1059],{"class":325},"}\n",[173,1061,1062,1063,1065,1066,1069],{},"Without the middleware, ",[193,1064,541],{}," generates its own ",[193,1067,1068],{},"requestId"," and measures timing internally.",[931,1071,1072,1073,1076,1077,1079,1080,1082],{"color":933,"icon":13},"Older versions of Next.js use ",[193,1074,1075],{},"middleware.ts"," instead of ",[193,1078,977],{},". The evlog middleware works with both — import from ",[193,1081,465],{}," regardless.",[729,1084,1086],{"id":1085},"client-provider","Client Provider",[173,1088,1089,1090,336],{},"For client-side logging, wrap your root layout with ",[193,1091,1092],{},"EvlogProvider",[185,1094,1099],{"className":1095,"code":1096,"filename":1097,"language":1098,"meta":191,"style":191},"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",[193,1100,1101,1121,1125,1165,1172,1196,1206,1240,1250,1259,1269,1279,1285],{"__ignoreMap":191},[196,1102,1103,1105,1107,1110,1112,1114,1116,1119],{"class":198,"line":199},[196,1104,448],{"class":310},[196,1106,451],{"class":325},[196,1108,1109],{"class":321}," EvlogProvider",[196,1111,457],{"class":325},[196,1113,460],{"class":310},[196,1115,385],{"class":325},[196,1117,1118],{"class":205},"evlog/next/client",[196,1120,468],{"class":325},[196,1122,1123],{"class":198,"line":329},[196,1124,474],{"emptyLinePlaceholder":473},[196,1126,1127,1129,1131,1134,1137,1140,1143,1146,1148,1150,1152,1155,1157,1160,1163],{"class":198,"line":356},[196,1128,311],{"class":310},[196,1130,314],{"class":310},[196,1132,1133],{"class":481}," function",[196,1135,1136],{"class":317}," Layout",[196,1138,1139],{"class":325},"({",[196,1141,1142],{"class":619}," children",[196,1144,1145],{"class":325}," }:",[196,1147,451],{"class":325},[196,1149,1142],{"class":332},[196,1151,336],{"class":325},[196,1153,1154],{"class":202}," React",[196,1156,658],{"class":325},[196,1158,1159],{"class":202},"ReactNode",[196,1161,1162],{"class":325}," })",[196,1164,364],{"class":325},[196,1166,1167,1169],{"class":198,"line":367},[196,1168,696],{"class":310},[196,1170,1171],{"class":332}," (\n",[196,1173,1174,1177,1180,1183,1185,1188,1191,1193],{"class":198,"line":377},[196,1175,1176],{"class":325},"    \u003C",[196,1178,1179],{"class":332},"html",[196,1181,1182],{"class":481}," lang",[196,1184,606],{"class":325},[196,1186,1187],{"class":325},"\"",[196,1189,1190],{"class":205},"en",[196,1192,1187],{"class":325},[196,1194,1195],{"class":325},">\n",[196,1197,1198,1201,1204],{"class":198,"line":395},[196,1199,1200],{"class":325},"      \u003C",[196,1202,1203],{"class":332},"body",[196,1205,1195],{"class":325},[196,1207,1208,1211,1213,1216,1218,1220,1222,1224,1227,1230,1233,1235,1237],{"class":198,"line":401},[196,1209,1210],{"class":325},"        \u003C",[196,1212,1092],{"class":202},[196,1214,1215],{"class":481}," service",[196,1217,606],{"class":325},[196,1219,1187],{"class":325},[196,1221,388],{"class":205},[196,1223,1187],{"class":325},[196,1225,1226],{"class":481}," transport",[196,1228,1229],{"class":325},"={{",[196,1231,1232],{"class":332}," enabled",[196,1234,336],{"class":325},[196,1236,717],{"class":716},[196,1238,1239],{"class":325}," }}>\n",[196,1241,1242,1245,1248],{"class":198,"line":407},[196,1243,1244],{"class":325},"          {",[196,1246,1247],{"class":321},"children",[196,1249,1059],{"class":325},[196,1251,1252,1255,1257],{"class":198,"line":925},[196,1253,1254],{"class":325},"        \u003C/",[196,1256,1092],{"class":202},[196,1258,1195],{"class":325},[196,1260,1262,1265,1267],{"class":198,"line":1261},10,[196,1263,1264],{"class":325},"      \u003C/",[196,1266,1203],{"class":332},[196,1268,1195],{"class":325},[196,1270,1272,1275,1277],{"class":198,"line":1271},11,[196,1273,1274],{"class":325},"    \u003C/",[196,1276,1179],{"class":332},[196,1278,1195],{"class":325},[196,1280,1282],{"class":198,"line":1281},12,[196,1283,1284],{"class":332},"  )\n",[196,1286,1288],{"class":198,"line":1287},13,[196,1289,1059],{"class":325},[173,1291,1292,1293,1296],{},"Then use ",[193,1294,1295],{},"log"," in any client component:",[185,1298,1301],{"className":1095,"code":1299,"filename":1300,"language":1098,"meta":191,"style":191},"'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",[193,1302,1303,1312,1330,1334,1348,1354,1397,1402,1410,1414],{"__ignoreMap":191},[196,1304,1305,1307,1310],{"class":198,"line":199},[196,1306,342],{"class":325},[196,1308,1309],{"class":205},"use client",[196,1311,468],{"class":325},[196,1313,1314,1316,1318,1320,1322,1324,1326,1328],{"class":198,"line":329},[196,1315,448],{"class":310},[196,1317,451],{"class":325},[196,1319,498],{"class":321},[196,1321,457],{"class":325},[196,1323,460],{"class":310},[196,1325,385],{"class":325},[196,1327,1118],{"class":205},[196,1329,468],{"class":325},[196,1331,1332],{"class":198,"line":356},[196,1333,474],{"emptyLinePlaceholder":473},[196,1335,1336,1338,1340,1343,1346],{"class":198,"line":367},[196,1337,311],{"class":310},[196,1339,1133],{"class":481},[196,1341,1342],{"class":317}," CheckoutButton",[196,1344,1345],{"class":325},"()",[196,1347,364],{"class":325},[196,1349,1350,1352],{"class":198,"line":377},[196,1351,696],{"class":310},[196,1353,1171],{"class":332},[196,1355,1356,1358,1361,1364,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1388,1390,1392,1394],{"class":198,"line":395},[196,1357,1176],{"class":325},[196,1359,1360],{"class":332},"button",[196,1362,1363],{"class":481}," onClick",[196,1365,1366],{"class":325},"={()",[196,1368,630],{"class":481},[196,1370,498],{"class":321},[196,1372,658],{"class":325},[196,1374,933],{"class":317},[196,1376,322],{"class":321},[196,1378,666],{"class":325},[196,1380,839],{"class":332},[196,1382,336],{"class":325},[196,1384,385],{"class":325},[196,1386,1387],{"class":205},"checkout_click",[196,1389,342],{"class":325},[196,1391,457],{"class":325},[196,1393,627],{"class":321},[196,1395,1396],{"class":325},"}>\n",[196,1398,1399],{"class":198,"line":401},[196,1400,1401],{"class":321},"      Checkout\n",[196,1403,1404,1406,1408],{"class":198,"line":407},[196,1405,1274],{"class":325},[196,1407,1360],{"class":332},[196,1409,1195],{"class":325},[196,1411,1412],{"class":198,"line":925},[196,1413,1284],{"class":332},[196,1415,1416],{"class":198,"line":1261},[196,1417,1059],{"class":325},[729,1419,1421],{"id":1420},"configuration-reference","Configuration Reference",[173,1423,1424,1425,336],{},"All options for ",[193,1426,437],{},[1428,1429,1430,1449],"table",{},[1431,1432,1433],"thead",{},[1434,1435,1436,1440,1443,1446],"tr",{},[1437,1438,1439],"th",{},"Option",[1437,1441,1442],{},"Type",[1437,1444,1445],{},"Default",[1437,1447,1448],{},"Description",[1450,1451,1452,1473,1493,1510,1528,1548,1567,1586,1604,1623,1642,1661,1684],"tbody",{},[1434,1453,1454,1460,1465,1470],{},[1455,1456,1457],"td",{},[193,1458,1459],{},"service",[1455,1461,1462],{},[193,1463,1464],{},"string",[1455,1466,1467],{},[193,1468,1469],{},"'app'",[1455,1471,1472],{},"Service name shown in logs",[1434,1474,1475,1480,1485,1490],{},[1455,1476,1477],{},[193,1478,1479],{},"enabled",[1455,1481,1482],{},[193,1483,1484],{},"boolean",[1455,1486,1487],{},[193,1488,1489],{},"true",[1455,1491,1492],{},"Globally enable/disable all logging",[1434,1494,1495,1500,1504,1507],{},[1455,1496,1497],{},[193,1498,1499],{},"pretty",[1455,1501,1502],{},[193,1503,1484],{},[1455,1505,1506],{},"Auto",[1455,1508,1509],{},"Pretty print (true in dev, false in prod)",[1434,1511,1512,1517,1522,1525],{},[1455,1513,1514],{},[193,1515,1516],{},"env",[1455,1518,1519],{},[193,1520,1521],{},"Partial\u003CEnvironmentContext>",[1455,1523,1524],{},"Auto-detected",[1455,1526,1527],{},"Environment, version, commitHash, region",[1434,1529,1530,1535,1540,1545],{},[1455,1531,1532],{},[193,1533,1534],{},"sampling.rates",[1455,1536,1537],{},[193,1538,1539],{},"SamplingRates",[1455,1541,1542],{},[193,1543,1544],{},"undefined",[1455,1546,1547],{},"Head sampling rates per level (0-100%)",[1434,1549,1550,1555,1560,1564],{},[1455,1551,1552],{},[193,1553,1554],{},"sampling.keep",[1455,1556,1557],{},[193,1558,1559],{},"TailSamplingCondition[]",[1455,1561,1562],{},[193,1563,1544],{},[1455,1565,1566],{},"Tail sampling conditions (OR logic)",[1434,1568,1569,1574,1579,1583],{},[1455,1570,1571],{},[193,1572,1573],{},"include",[1455,1575,1576],{},[193,1577,1578],{},"string[]",[1455,1580,1581],{},[193,1582,1544],{},[1455,1584,1585],{},"Route patterns to log (glob)",[1434,1587,1588,1593,1597,1601],{},[1455,1589,1590],{},[193,1591,1592],{},"exclude",[1455,1594,1595],{},[193,1596,1578],{},[1455,1598,1599],{},[193,1600,1544],{},[1455,1602,1603],{},"Route patterns to exclude (glob, takes precedence)",[1434,1605,1606,1611,1616,1620],{},[1455,1607,1608],{},[193,1609,1610],{},"routes",[1455,1612,1613],{},[193,1614,1615],{},"Record\u003Cstring, RouteConfig>",[1455,1617,1618],{},[193,1619,1544],{},[1455,1621,1622],{},"Route-specific service names",[1434,1624,1625,1630,1635,1639],{},[1455,1626,1627],{},[193,1628,1629],{},"drain",[1455,1631,1632],{},[193,1633,1634],{},"(ctx: DrainContext) => void",[1455,1636,1637],{},[193,1638,1544],{},[1455,1640,1641],{},"Drain callback for external services",[1434,1643,1644,1649,1654,1658],{},[1455,1645,1646],{},[193,1647,1648],{},"enrich",[1455,1650,1651],{},[193,1652,1653],{},"(ctx: EnrichContext) => void",[1455,1655,1656],{},[193,1657,1544],{},[1455,1659,1660],{},"Enrich callback for derived context",[1434,1662,1663,1668,1673,1677],{},[1455,1664,1665],{},[193,1666,1667],{},"keep",[1455,1669,1670],{},[193,1671,1672],{},"(ctx: TailSamplingContext) => void",[1455,1674,1675],{},[193,1676,1544],{},[1455,1678,1679,1680,1683],{},"Custom tail sampling callback. Set ",[193,1681,1682],{},"ctx.shouldKeep = true"," to force-keep",[1434,1685,1686,1691,1695,1699],{},[1455,1687,1688],{},[193,1689,1690],{},"stringify",[1455,1692,1693],{},[193,1694,1484],{},[1455,1696,1697],{},[193,1698,1489],{},[1455,1700,1701],{},"JSON stringify output (false for raw objects)",[729,1703,1705],{"id":1704},"comparison-with-nuxt","Comparison with Nuxt",[1428,1707,1708,1725],{},[1431,1709,1710],{},[1434,1711,1712,1715,1720],{},[1437,1713,1714],{},"Feature",[1437,1716,1717,1718,627],{},"Nuxt (",[193,1719,345],{},[1437,1721,1722,1723,627],{},"Next.js (",[193,1724,465],{},[1450,1726,1727,1741,1757,1770,1783,1799,1813,1827,1841,1854],{},[1434,1728,1729,1731,1736],{},[1455,1730,290],{},[1455,1732,1733],{},[193,1734,1735],{},"modules: ['evlog/nuxt']",[1455,1737,1738,1740],{},[193,1739,437],{}," factory",[1434,1742,1743,1746,1751],{},[1455,1744,1745],{},"Logger",[1455,1747,1748],{},[193,1749,1750],{},"useLogger(event)",[1455,1752,1753,1756],{},[193,1754,1755],{},"useLogger()"," (zero args)",[1434,1758,1759,1762,1765],{},[1455,1760,1761],{},"Auto-import",[1455,1763,1764],{},"Yes",[1455,1766,1767,1768,627],{},"No (import from ",[193,1769,588],{},[1434,1771,1772,1775,1778],{},[1455,1773,1774],{},"Request scoping",[1455,1776,1777],{},"Nitro hooks",[1455,1779,1780],{},[193,1781,1782],{},"AsyncLocalStorage",[1434,1784,1785,1788,1794],{},[1455,1786,1787],{},"Drain",[1455,1789,1790,1793],{},[193,1791,1792],{},"evlog:drain"," hook",[1455,1795,1796,1798],{},[193,1797,1629],{}," callback",[1434,1800,1801,1804,1809],{},[1455,1802,1803],{},"Enrich",[1455,1805,1806,1793],{},[193,1807,1808],{},"evlog:enrich",[1455,1810,1811,1798],{},[193,1812,1648],{},[1434,1814,1815,1818,1823],{},[1455,1816,1817],{},"Tail sampling (rules)",[1455,1819,1820,1822],{},[193,1821,1554],{}," conditions",[1455,1824,1825,1822],{},[193,1826,1554],{},[1434,1828,1829,1832,1837],{},[1455,1830,1831],{},"Tail sampling (custom)",[1455,1833,1834,1793],{},[193,1835,1836],{},"evlog:emit:keep",[1455,1838,1839,1798],{},[193,1840,1667],{},[1434,1842,1843,1846,1849],{},[1455,1844,1845],{},"Client",[1455,1847,1848],{},"Auto-configured Vue plugin",[1455,1850,1851,1853],{},[193,1852,1092],{}," React component",[1434,1855,1856,1859,1862],{},[1455,1857,1858],{},"Emit",[1455,1860,1861],{},"Automatic (afterResponse hook)",[1455,1863,1864,1865,1868],{},"Automatic (",[193,1866,1867],{},"withEvlog"," wrapper)",[931,1870,1873,1874,1877],{"color":1871,"icon":1872},"neutral","i-lucide-arrow-right","See a full working ",[284,1875,1876],{"href":143},"Next.js example"," with enrichers, pipeline, drain, tail sampling, and client provider.",[254,1879,1881],{"id":1880},"nitro-v3","Nitro v3",[173,1883,1884,1885,1888],{},"Register evlog as a Nitro module using the ",[193,1886,1887],{},"nitro"," package:",[185,1890,1893],{"className":300,"code":1891,"filename":1892,"language":303,"meta":191,"style":191},"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",[193,1894,1895,1914,1931,1935,1947,1956,1965,1988,1995,2002],{"__ignoreMap":191},[196,1896,1897,1899,1901,1904,1906,1908,1910,1912],{"class":198,"line":199},[196,1898,448],{"class":310},[196,1900,451],{"class":325},[196,1902,1903],{"class":321}," defineConfig",[196,1905,457],{"class":325},[196,1907,460],{"class":310},[196,1909,385],{"class":325},[196,1911,1887],{"class":205},[196,1913,468],{"class":325},[196,1915,1916,1918,1921,1924,1926,1929],{"class":198,"line":329},[196,1917,448],{"class":310},[196,1919,1920],{"class":321}," evlog ",[196,1922,1923],{"class":310},"from",[196,1925,385],{"class":325},[196,1927,1928],{"class":205},"evlog/nitro/v3",[196,1930,468],{"class":325},[196,1932,1933],{"class":198,"line":356},[196,1934,474],{"emptyLinePlaceholder":473},[196,1936,1937,1939,1941,1943,1945],{"class":198,"line":367},[196,1938,311],{"class":310},[196,1940,314],{"class":310},[196,1942,1903],{"class":317},[196,1944,322],{"class":321},[196,1946,326],{"class":325},[196,1948,1949,1951,1953],{"class":198,"line":377},[196,1950,333],{"class":332},[196,1952,336],{"class":325},[196,1954,1955],{"class":321}," [\n",[196,1957,1958,1961,1963],{"class":198,"line":395},[196,1959,1960],{"class":317},"    evlog",[196,1962,322],{"class":321},[196,1964,326],{"class":325},[196,1966,1967,1970,1972,1974,1976,1978,1980,1983,1985],{"class":198,"line":401},[196,1968,1969],{"class":332},"      env",[196,1971,336],{"class":325},[196,1973,451],{"class":325},[196,1975,1215],{"class":332},[196,1977,336],{"class":325},[196,1979,385],{"class":325},[196,1981,1982],{"class":205},"my-api",[196,1984,342],{"class":325},[196,1986,1987],{"class":325}," },\n",[196,1989,1990,1993],{"class":198,"line":407},[196,1991,1992],{"class":325},"    }",[196,1994,413],{"class":321},[196,1996,1997,2000],{"class":198,"line":925},[196,1998,1999],{"class":321},"  ]",[196,2001,353],{"class":325},[196,2003,2004,2006],{"class":198,"line":1261},[196,2005,410],{"class":325},[196,2007,413],{"class":321},[173,2009,1292,2010,2012],{},[193,2011,419],{}," in your routes:",[185,2014,2017],{"className":300,"code":2015,"filename":2016,"language":303,"meta":191,"style":191},"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",[193,2018,2019,2039,2057,2061,2084,2100,2127,2142],{"__ignoreMap":191},[196,2020,2021,2023,2025,2028,2030,2032,2034,2037],{"class":198,"line":199},[196,2022,448],{"class":310},[196,2024,451],{"class":325},[196,2026,2027],{"class":321}," defineHandler",[196,2029,457],{"class":325},[196,2031,460],{"class":310},[196,2033,385],{"class":325},[196,2035,2036],{"class":205},"nitro/h3",[196,2038,468],{"class":325},[196,2040,2041,2043,2045,2047,2049,2051,2053,2055],{"class":198,"line":329},[196,2042,448],{"class":310},[196,2044,451],{"class":325},[196,2046,493],{"class":321},[196,2048,457],{"class":325},[196,2050,460],{"class":310},[196,2052,385],{"class":325},[196,2054,1928],{"class":205},[196,2056,468],{"class":325},[196,2058,2059],{"class":198,"line":356},[196,2060,474],{"emptyLinePlaceholder":473},[196,2062,2063,2065,2067,2069,2071,2073,2075,2078,2080,2082],{"class":198,"line":367},[196,2064,311],{"class":310},[196,2066,314],{"class":310},[196,2068,2027],{"class":317},[196,2070,322],{"class":321},[196,2072,613],{"class":481},[196,2074,616],{"class":325},[196,2076,2077],{"class":619},"event",[196,2079,627],{"class":325},[196,2081,630],{"class":481},[196,2083,364],{"class":325},[196,2085,2086,2088,2090,2092,2094,2096,2098],{"class":198,"line":377},[196,2087,637],{"class":481},[196,2089,498],{"class":321},[196,2091,508],{"class":325},[196,2093,493],{"class":317},[196,2095,322],{"class":332},[196,2097,2077],{"class":321},[196,2099,413],{"class":332},[196,2101,2102,2104,2106,2108,2110,2112,2114,2116,2118,2121,2123,2125],{"class":198,"line":395},[196,2103,655],{"class":321},[196,2105,658],{"class":325},[196,2107,661],{"class":317},[196,2109,322],{"class":332},[196,2111,666],{"class":325},[196,2113,839],{"class":332},[196,2115,336],{"class":325},[196,2117,385],{"class":325},[196,2119,2120],{"class":205},"hello",[196,2122,342],{"class":325},[196,2124,457],{"class":325},[196,2126,413],{"class":332},[196,2128,2129,2131,2133,2136,2138,2140],{"class":198,"line":401},[196,2130,696],{"class":310},[196,2132,451],{"class":325},[196,2134,2135],{"class":332}," ok",[196,2137,336],{"class":325},[196,2139,717],{"class":716},[196,2141,922],{"class":325},[196,2143,2144,2146],{"class":198,"line":407},[196,2145,410],{"class":325},[196,2147,413],{"class":321},[254,2149,2151],{"id":2150},"nitro-v2","Nitro v2",[173,2153,2154,2155,336],{},"Same approach with ",[193,2156,2157],{},"nitropack",[185,2159,2161],{"className":300,"code":2160,"filename":1892,"language":303,"meta":191,"style":191},"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",[193,2162,2163,2183,2198,2202,2214,2222,2230,2250,2256,2262],{"__ignoreMap":191},[196,2164,2165,2167,2169,2172,2174,2176,2178,2181],{"class":198,"line":199},[196,2166,448],{"class":310},[196,2168,451],{"class":325},[196,2170,2171],{"class":321}," defineNitroConfig",[196,2173,457],{"class":325},[196,2175,460],{"class":310},[196,2177,385],{"class":325},[196,2179,2180],{"class":205},"nitropack/config",[196,2182,468],{"class":325},[196,2184,2185,2187,2189,2191,2193,2196],{"class":198,"line":329},[196,2186,448],{"class":310},[196,2188,1920],{"class":321},[196,2190,1923],{"class":310},[196,2192,385],{"class":325},[196,2194,2195],{"class":205},"evlog/nitro",[196,2197,468],{"class":325},[196,2199,2200],{"class":198,"line":356},[196,2201,474],{"emptyLinePlaceholder":473},[196,2203,2204,2206,2208,2210,2212],{"class":198,"line":367},[196,2205,311],{"class":310},[196,2207,314],{"class":310},[196,2209,2171],{"class":317},[196,2211,322],{"class":321},[196,2213,326],{"class":325},[196,2215,2216,2218,2220],{"class":198,"line":377},[196,2217,333],{"class":332},[196,2219,336],{"class":325},[196,2221,1955],{"class":321},[196,2223,2224,2226,2228],{"class":198,"line":395},[196,2225,1960],{"class":317},[196,2227,322],{"class":321},[196,2229,326],{"class":325},[196,2231,2232,2234,2236,2238,2240,2242,2244,2246,2248],{"class":198,"line":401},[196,2233,1969],{"class":332},[196,2235,336],{"class":325},[196,2237,451],{"class":325},[196,2239,1215],{"class":332},[196,2241,336],{"class":325},[196,2243,385],{"class":325},[196,2245,1982],{"class":205},[196,2247,342],{"class":325},[196,2249,1987],{"class":325},[196,2251,2252,2254],{"class":198,"line":407},[196,2253,1992],{"class":325},[196,2255,413],{"class":321},[196,2257,2258,2260],{"class":198,"line":925},[196,2259,1999],{"class":321},[196,2261,353],{"class":325},[196,2263,2264,2266],{"class":198,"line":1261},[196,2265,410],{"class":325},[196,2267,413],{"class":321},[173,2269,1292,2270,2012],{},[193,2271,419],{},[185,2273,2275],{"className":300,"code":2274,"filename":2016,"language":303,"meta":191,"style":191},"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",[193,2276,2277,2296,2314,2318,2340,2356,2382,2396],{"__ignoreMap":191},[196,2278,2279,2281,2283,2286,2288,2290,2292,2294],{"class":198,"line":199},[196,2280,448],{"class":310},[196,2282,451],{"class":325},[196,2284,2285],{"class":321}," defineEventHandler",[196,2287,457],{"class":325},[196,2289,460],{"class":310},[196,2291,385],{"class":325},[196,2293,254],{"class":205},[196,2295,468],{"class":325},[196,2297,2298,2300,2302,2304,2306,2308,2310,2312],{"class":198,"line":329},[196,2299,448],{"class":310},[196,2301,451],{"class":325},[196,2303,493],{"class":321},[196,2305,457],{"class":325},[196,2307,460],{"class":310},[196,2309,385],{"class":325},[196,2311,2195],{"class":205},[196,2313,468],{"class":325},[196,2315,2316],{"class":198,"line":356},[196,2317,474],{"emptyLinePlaceholder":473},[196,2319,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338],{"class":198,"line":367},[196,2321,311],{"class":310},[196,2323,314],{"class":310},[196,2325,2285],{"class":317},[196,2327,322],{"class":321},[196,2329,613],{"class":481},[196,2331,616],{"class":325},[196,2333,2077],{"class":619},[196,2335,627],{"class":325},[196,2337,630],{"class":481},[196,2339,364],{"class":325},[196,2341,2342,2344,2346,2348,2350,2352,2354],{"class":198,"line":377},[196,2343,637],{"class":481},[196,2345,498],{"class":321},[196,2347,508],{"class":325},[196,2349,493],{"class":317},[196,2351,322],{"class":332},[196,2353,2077],{"class":321},[196,2355,413],{"class":332},[196,2357,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380],{"class":198,"line":395},[196,2359,655],{"class":321},[196,2361,658],{"class":325},[196,2363,661],{"class":317},[196,2365,322],{"class":332},[196,2367,666],{"class":325},[196,2369,839],{"class":332},[196,2371,336],{"class":325},[196,2373,385],{"class":325},[196,2375,2120],{"class":205},[196,2377,342],{"class":325},[196,2379,457],{"class":325},[196,2381,413],{"class":332},[196,2383,2384,2386,2388,2390,2392,2394],{"class":198,"line":401},[196,2385,696],{"class":310},[196,2387,451],{"class":325},[196,2389,2135],{"class":332},[196,2391,336],{"class":325},[196,2393,717],{"class":716},[196,2395,922],{"class":325},[196,2397,2398,2400],{"class":198,"line":407},[196,2399,410],{"class":325},[196,2401,413],{"class":321},[931,2403,2404,2408,2409,2411,2412,2415,2416,2418,2419,2421,2422,2424],{"color":933,"icon":13},[2405,2406,2407],"strong",{},"Note:"," ",[193,2410,423],{}," is always imported from ",[193,2413,2414],{},"evlog"," regardless of Nitro version. Only the module and ",[193,2417,419],{}," imports differ: ",[193,2420,1928],{}," for v3, ",[193,2423,2195],{}," for v2.",[254,2426,147],{"id":2427},"tanstack-start",[173,2429,2430,2431,2434,2435,2438,2439,336],{},"TanStack Start uses Nitro v3 under the hood. A project created with ",[193,2432,2433],{},"npm create @tanstack/start@latest"," already includes the ",[193,2436,2437],{},"nitro()"," Vite plugin — just install evlog and add a ",[193,2440,1892],{},[185,2442,2443],{"className":187,"code":212,"language":190,"meta":191,"style":191},[193,2444,2445],{"__ignoreMap":191},[196,2446,2447,2449,2451],{"class":198,"line":199},[196,2448,213],{"class":202},[196,2450,222],{"class":205},[196,2452,209],{"class":205},[185,2454,2456],{"className":300,"code":2455,"filename":1892,"language":303,"meta":191,"style":191},"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",[193,2457,2458,2476,2490,2494,2506,2515,2526,2530,2538,2546,2566,2572,2578],{"__ignoreMap":191},[196,2459,2460,2462,2464,2466,2468,2470,2472,2474],{"class":198,"line":199},[196,2461,448],{"class":310},[196,2463,451],{"class":325},[196,2465,1903],{"class":321},[196,2467,457],{"class":325},[196,2469,460],{"class":310},[196,2471,385],{"class":325},[196,2473,1887],{"class":205},[196,2475,468],{"class":325},[196,2477,2478,2480,2482,2484,2486,2488],{"class":198,"line":329},[196,2479,448],{"class":310},[196,2481,1920],{"class":321},[196,2483,1923],{"class":310},[196,2485,385],{"class":325},[196,2487,1928],{"class":205},[196,2489,468],{"class":325},[196,2491,2492],{"class":198,"line":356},[196,2493,474],{"emptyLinePlaceholder":473},[196,2495,2496,2498,2500,2502,2504],{"class":198,"line":367},[196,2497,311],{"class":310},[196,2499,314],{"class":310},[196,2501,1903],{"class":317},[196,2503,322],{"class":321},[196,2505,326],{"class":325},[196,2507,2508,2511,2513],{"class":198,"line":377},[196,2509,2510],{"class":332},"  experimental",[196,2512,336],{"class":325},[196,2514,364],{"class":325},[196,2516,2517,2520,2522,2524],{"class":198,"line":395},[196,2518,2519],{"class":332},"    asyncContext",[196,2521,336],{"class":325},[196,2523,717],{"class":716},[196,2525,353],{"class":325},[196,2527,2528],{"class":198,"line":401},[196,2529,404],{"class":325},[196,2531,2532,2534,2536],{"class":198,"line":407},[196,2533,333],{"class":332},[196,2535,336],{"class":325},[196,2537,1955],{"class":321},[196,2539,2540,2542,2544],{"class":198,"line":925},[196,2541,1960],{"class":317},[196,2543,322],{"class":321},[196,2545,326],{"class":325},[196,2547,2548,2550,2552,2554,2556,2558,2560,2562,2564],{"class":198,"line":1261},[196,2549,1969],{"class":332},[196,2551,336],{"class":325},[196,2553,451],{"class":325},[196,2555,1215],{"class":332},[196,2557,336],{"class":325},[196,2559,385],{"class":325},[196,2561,388],{"class":205},[196,2563,342],{"class":325},[196,2565,1987],{"class":325},[196,2567,2568,2570],{"class":198,"line":1271},[196,2569,1992],{"class":325},[196,2571,413],{"class":321},[196,2573,2574,2576],{"class":198,"line":1281},[196,2575,1999],{"class":321},[196,2577,353],{"class":325},[196,2579,2580,2582],{"class":198,"line":1287},[196,2581,410],{"class":325},[196,2583,413],{"class":321},[173,2585,2586,2587,2590,2591,2594],{},"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 ",[193,2588,2589],{},"useRequest()"," from ",[193,2592,2593],{},"nitro/context"," to access the request-scoped logger:",[185,2596,2599],{"className":300,"code":2597,"filename":2598,"language":303,"meta":191,"style":191},"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",[193,2600,2601,2621,2640,2662,2666,2693,2702,2711,2728,2742,2767,2771,2821,2825,2851,2857,2862,2867],{"__ignoreMap":191},[196,2602,2603,2605,2607,2610,2612,2614,2616,2619],{"class":198,"line":199},[196,2604,448],{"class":310},[196,2606,451],{"class":325},[196,2608,2609],{"class":321}," createFileRoute",[196,2611,457],{"class":325},[196,2613,460],{"class":310},[196,2615,385],{"class":325},[196,2617,2618],{"class":205},"@tanstack/react-router",[196,2620,468],{"class":325},[196,2622,2623,2625,2627,2630,2632,2634,2636,2638],{"class":198,"line":329},[196,2624,448],{"class":310},[196,2626,451],{"class":325},[196,2628,2629],{"class":321}," useRequest",[196,2631,457],{"class":325},[196,2633,460],{"class":310},[196,2635,385],{"class":325},[196,2637,2593],{"class":205},[196,2639,468],{"class":325},[196,2641,2642,2644,2647,2649,2652,2654,2656,2658,2660],{"class":198,"line":356},[196,2643,448],{"class":310},[196,2645,2646],{"class":310}," type",[196,2648,451],{"class":325},[196,2650,2651],{"class":321}," RequestLogger",[196,2653,457],{"class":325},[196,2655,460],{"class":310},[196,2657,385],{"class":325},[196,2659,2414],{"class":205},[196,2661,468],{"class":325},[196,2663,2664],{"class":198,"line":367},[196,2665,474],{"emptyLinePlaceholder":473},[196,2667,2668,2670,2672,2675,2677,2679,2681,2683,2686,2688,2691],{"class":198,"line":377},[196,2669,311],{"class":310},[196,2671,482],{"class":481},[196,2673,2674],{"class":321}," Route ",[196,2676,606],{"class":325},[196,2678,2609],{"class":317},[196,2680,322],{"class":321},[196,2682,342],{"class":325},[196,2684,2685],{"class":205},"/api/hello",[196,2687,342],{"class":325},[196,2689,2690],{"class":321},")(",[196,2692,326],{"class":325},[196,2694,2695,2698,2700],{"class":198,"line":395},[196,2696,2697],{"class":332},"  server",[196,2699,336],{"class":325},[196,2701,364],{"class":325},[196,2703,2704,2707,2709],{"class":198,"line":401},[196,2705,2706],{"class":332},"    handlers",[196,2708,336],{"class":325},[196,2710,364],{"class":325},[196,2712,2713,2716,2718,2721,2724,2726],{"class":198,"line":407},[196,2714,2715],{"class":317},"      GET",[196,2717,336],{"class":325},[196,2719,2720],{"class":481}," async",[196,2722,2723],{"class":325}," ()",[196,2725,630],{"class":481},[196,2727,364],{"class":325},[196,2729,2730,2733,2736,2738,2740],{"class":198,"line":925},[196,2731,2732],{"class":481},"        const",[196,2734,2735],{"class":321}," req",[196,2737,508],{"class":325},[196,2739,2629],{"class":317},[196,2741,824],{"class":332},[196,2743,2744,2746,2748,2750,2752,2754,2757,2759,2761,2764],{"class":198,"line":1261},[196,2745,2732],{"class":481},[196,2747,498],{"class":321},[196,2749,508],{"class":325},[196,2751,2735],{"class":321},[196,2753,658],{"class":325},[196,2755,2756],{"class":321},"context",[196,2758,658],{"class":325},[196,2760,1295],{"class":321},[196,2762,2763],{"class":310}," as",[196,2765,2766],{"class":202}," RequestLogger\n",[196,2768,2769],{"class":198,"line":1271},[196,2770,474],{"emptyLinePlaceholder":473},[196,2772,2773,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2799,2801,2803,2806,2808,2810,2813,2815,2817,2819],{"class":198,"line":1281},[196,2774,2775],{"class":321},"        log",[196,2777,658],{"class":325},[196,2779,661],{"class":317},[196,2781,322],{"class":332},[196,2783,666],{"class":325},[196,2785,669],{"class":332},[196,2787,336],{"class":325},[196,2789,451],{"class":325},[196,2791,676],{"class":332},[196,2793,336],{"class":325},[196,2795,385],{"class":325},[196,2797,2798],{"class":205},"user_123",[196,2800,342],{"class":325},[196,2802,490],{"class":325},[196,2804,2805],{"class":332}," plan",[196,2807,336],{"class":325},[196,2809,385],{"class":325},[196,2811,2812],{"class":205},"pro",[196,2814,342],{"class":325},[196,2816,457],{"class":325},[196,2818,457],{"class":325},[196,2820,413],{"class":332},[196,2822,2823],{"class":198,"line":1287},[196,2824,474],{"emptyLinePlaceholder":473},[196,2826,2828,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849],{"class":198,"line":2827},14,[196,2829,2830],{"class":310},"        return",[196,2832,699],{"class":321},[196,2834,658],{"class":325},[196,2836,704],{"class":317},[196,2838,322],{"class":332},[196,2840,666],{"class":325},[196,2842,2135],{"class":332},[196,2844,336],{"class":325},[196,2846,717],{"class":716},[196,2848,457],{"class":325},[196,2850,413],{"class":332},[196,2852,2854],{"class":198,"line":2853},15,[196,2855,2856],{"class":325},"      },\n",[196,2858,2860],{"class":198,"line":2859},16,[196,2861,398],{"class":325},[196,2863,2865],{"class":198,"line":2864},17,[196,2866,404],{"class":325},[196,2868,2870,2872],{"class":198,"line":2869},18,[196,2871,410],{"class":325},[196,2873,413],{"class":321},[931,2875,2876,2878,2879,2881,2882,2885],{"color":933,"icon":13},[193,2877,2589],{}," is an experimental Nitro v3 feature that uses ",[193,2880,1782],{}," to access the current request from anywhere in the call stack. It requires ",[193,2883,2884],{},"experimental.asyncContext: true"," and works on Node.js and Bun runtimes.",[173,2887,2888,2889,2892,2893,420,2896,424,2899,2902],{},"For ",[193,2890,2891],{},"throw createError()"," to return structured JSON with ",[193,2894,2895],{},"why",[193,2897,2898],{},"fix",[193,2900,2901],{},"link",", add the error handling middleware to your root route:",[185,2904,2907],{"className":300,"code":2905,"filename":2906,"language":303,"meta":191,"style":191},"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",[193,2908,2909,2928,2948,2967,2971,2987,2995,3019,3023,3028],{"__ignoreMap":191},[196,2910,2911,2913,2915,2918,2920,2922,2924,2926],{"class":198,"line":199},[196,2912,448],{"class":310},[196,2914,451],{"class":325},[196,2916,2917],{"class":321}," createRootRoute",[196,2919,457],{"class":325},[196,2921,460],{"class":310},[196,2923,385],{"class":325},[196,2925,2618],{"class":205},[196,2927,468],{"class":325},[196,2929,2930,2932,2934,2937,2939,2941,2943,2946],{"class":198,"line":329},[196,2931,448],{"class":310},[196,2933,451],{"class":325},[196,2935,2936],{"class":321}," createMiddleware",[196,2938,457],{"class":325},[196,2940,460],{"class":310},[196,2942,385],{"class":325},[196,2944,2945],{"class":205},"@tanstack/react-start",[196,2947,468],{"class":325},[196,2949,2950,2952,2954,2957,2959,2961,2963,2965],{"class":198,"line":356},[196,2951,448],{"class":310},[196,2953,451],{"class":325},[196,2955,2956],{"class":321}," evlogErrorHandler",[196,2958,457],{"class":325},[196,2960,460],{"class":310},[196,2962,385],{"class":325},[196,2964,1928],{"class":205},[196,2966,468],{"class":325},[196,2968,2969],{"class":198,"line":367},[196,2970,474],{"emptyLinePlaceholder":473},[196,2972,2973,2975,2977,2979,2981,2983,2985],{"class":198,"line":377},[196,2974,311],{"class":310},[196,2976,482],{"class":481},[196,2978,2674],{"class":321},[196,2980,606],{"class":325},[196,2982,2917],{"class":317},[196,2984,322],{"class":321},[196,2986,326],{"class":325},[196,2988,2989,2991,2993],{"class":198,"line":395},[196,2990,2697],{"class":332},[196,2992,336],{"class":325},[196,2994,364],{"class":325},[196,2996,2997,3000,3002,3004,3007,3009,3011,3014,3017],{"class":198,"line":401},[196,2998,2999],{"class":332},"    middleware",[196,3001,336],{"class":325},[196,3003,339],{"class":321},[196,3005,3006],{"class":317},"createMiddleware",[196,3008,1345],{"class":321},[196,3010,658],{"class":325},[196,3012,3013],{"class":317},"server",[196,3015,3016],{"class":321},"(evlogErrorHandler)]",[196,3018,353],{"class":325},[196,3020,3021],{"class":198,"line":407},[196,3022,404],{"class":325},[196,3024,3025],{"class":198,"line":925},[196,3026,3027],{"class":649},"  // ... head, shellComponent, etc.\n",[196,3029,3030,3032],{"class":198,"line":1261},[196,3031,410],{"class":325},[196,3033,413],{"class":321},[931,3035,1873,3036,3039],{"color":1871,"icon":1872},[284,3037,3038],{"href":148},"TanStack Start example"," with API routes, structured errors, and wide event logging.",[254,3041,3043],{"id":3042},"cloudflare-workers","Cloudflare Workers",[173,3045,3046],{},"Use the Workers adapter for structured logs and correct platform severity.",[185,3048,3051],{"className":300,"code":3049,"filename":3050,"language":303,"meta":191,"style":191},"import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'\n\ninitWorkersLogger({\n  env: { service: 'edge-api' },\n})\n\nexport default {\n  async fetch(request: Request) {\n    const log = createWorkersLogger(request)\n\n    try {\n      log.set({ route: 'health' })\n      const response = new Response('ok', { status: 200 })\n      log.emit({ status: response.status })\n      return response\n    } catch (error) {\n      log.error(error as Error)\n      log.emit({ status: 500 })\n      throw error\n    }\n  },\n}\n","src/index.ts",[193,3052,3053,3078,3082,3091,3113,3119,3123,3131,3152,3169,3173,3180,3209,3250,3278,3286,3302,3321,3344,3353,3359,3364],{"__ignoreMap":191},[196,3054,3055,3057,3059,3062,3064,3067,3069,3071,3073,3076],{"class":198,"line":199},[196,3056,448],{"class":310},[196,3058,451],{"class":325},[196,3060,3061],{"class":321}," initWorkersLogger",[196,3063,490],{"class":325},[196,3065,3066],{"class":321}," createWorkersLogger",[196,3068,457],{"class":325},[196,3070,460],{"class":310},[196,3072,385],{"class":325},[196,3074,3075],{"class":205},"evlog/workers",[196,3077,468],{"class":325},[196,3079,3080],{"class":198,"line":329},[196,3081,474],{"emptyLinePlaceholder":473},[196,3083,3084,3087,3089],{"class":198,"line":356},[196,3085,3086],{"class":317},"initWorkersLogger",[196,3088,322],{"class":321},[196,3090,326],{"class":325},[196,3092,3093,3096,3098,3100,3102,3104,3106,3109,3111],{"class":198,"line":367},[196,3094,3095],{"class":332},"  env",[196,3097,336],{"class":325},[196,3099,451],{"class":325},[196,3101,1215],{"class":332},[196,3103,336],{"class":325},[196,3105,385],{"class":325},[196,3107,3108],{"class":205},"edge-api",[196,3110,342],{"class":325},[196,3112,1987],{"class":325},[196,3114,3115,3117],{"class":198,"line":377},[196,3116,410],{"class":325},[196,3118,413],{"class":321},[196,3120,3121],{"class":198,"line":395},[196,3122,474],{"emptyLinePlaceholder":473},[196,3124,3125,3127,3129],{"class":198,"line":401},[196,3126,311],{"class":310},[196,3128,314],{"class":310},[196,3130,364],{"class":325},[196,3132,3133,3136,3139,3141,3143,3145,3148,3150],{"class":198,"line":407},[196,3134,3135],{"class":481},"  async",[196,3137,3138],{"class":332}," fetch",[196,3140,322],{"class":325},[196,3142,620],{"class":619},[196,3144,336],{"class":325},[196,3146,3147],{"class":202}," Request",[196,3149,627],{"class":325},[196,3151,364],{"class":325},[196,3153,3154,3157,3159,3161,3163,3165,3167],{"class":198,"line":925},[196,3155,3156],{"class":481},"    const",[196,3158,498],{"class":321},[196,3160,508],{"class":325},[196,3162,3066],{"class":317},[196,3164,322],{"class":332},[196,3166,620],{"class":321},[196,3168,413],{"class":332},[196,3170,3171],{"class":198,"line":1261},[196,3172,474],{"emptyLinePlaceholder":473},[196,3174,3175,3178],{"class":198,"line":1271},[196,3176,3177],{"class":310},"    try",[196,3179,364],{"class":325},[196,3181,3182,3185,3187,3189,3191,3193,3196,3198,3200,3203,3205,3207],{"class":198,"line":1281},[196,3183,3184],{"class":321},"      log",[196,3186,658],{"class":325},[196,3188,661],{"class":317},[196,3190,322],{"class":332},[196,3192,666],{"class":325},[196,3194,3195],{"class":332}," route",[196,3197,336],{"class":325},[196,3199,385],{"class":325},[196,3201,3202],{"class":205},"health",[196,3204,342],{"class":325},[196,3206,457],{"class":325},[196,3208,413],{"class":332},[196,3210,3211,3214,3217,3219,3222,3224,3226,3228,3231,3233,3235,3237,3240,3242,3246,3248],{"class":198,"line":1287},[196,3212,3213],{"class":481},"      const",[196,3215,3216],{"class":321}," response",[196,3218,508],{"class":325},[196,3220,3221],{"class":325}," new",[196,3223,699],{"class":317},[196,3225,322],{"class":332},[196,3227,342],{"class":325},[196,3229,3230],{"class":205},"ok",[196,3232,342],{"class":325},[196,3234,490],{"class":325},[196,3236,451],{"class":325},[196,3238,3239],{"class":332}," status",[196,3241,336],{"class":325},[196,3243,3245],{"class":3244},"sbssI"," 200",[196,3247,457],{"class":325},[196,3249,413],{"class":332},[196,3251,3252,3254,3256,3259,3261,3263,3265,3267,3269,3271,3274,3276],{"class":198,"line":2827},[196,3253,3184],{"class":321},[196,3255,658],{"class":325},[196,3257,3258],{"class":317},"emit",[196,3260,322],{"class":332},[196,3262,666],{"class":325},[196,3264,3239],{"class":332},[196,3266,336],{"class":325},[196,3268,3216],{"class":321},[196,3270,658],{"class":325},[196,3272,3273],{"class":321},"status",[196,3275,457],{"class":325},[196,3277,413],{"class":332},[196,3279,3280,3283],{"class":198,"line":2853},[196,3281,3282],{"class":310},"      return",[196,3284,3285],{"class":321}," response\n",[196,3287,3288,3290,3293,3295,3298,3300],{"class":198,"line":2859},[196,3289,1992],{"class":325},[196,3291,3292],{"class":310}," catch",[196,3294,616],{"class":332},[196,3296,3297],{"class":321},"error",[196,3299,903],{"class":332},[196,3301,326],{"class":325},[196,3303,3304,3306,3308,3310,3312,3314,3316,3319],{"class":198,"line":2864},[196,3305,3184],{"class":321},[196,3307,658],{"class":325},[196,3309,3297],{"class":317},[196,3311,322],{"class":332},[196,3313,3297],{"class":321},[196,3315,2763],{"class":310},[196,3317,3318],{"class":202}," Error",[196,3320,413],{"class":332},[196,3322,3323,3325,3327,3329,3331,3333,3335,3337,3340,3342],{"class":198,"line":2869},[196,3324,3184],{"class":321},[196,3326,658],{"class":325},[196,3328,3258],{"class":317},[196,3330,322],{"class":332},[196,3332,666],{"class":325},[196,3334,3239],{"class":332},[196,3336,336],{"class":325},[196,3338,3339],{"class":3244}," 500",[196,3341,457],{"class":325},[196,3343,413],{"class":332},[196,3345,3347,3350],{"class":198,"line":3346},19,[196,3348,3349],{"class":310},"      throw",[196,3351,3352],{"class":321}," error\n",[196,3354,3356],{"class":198,"line":3355},20,[196,3357,3358],{"class":325},"    }\n",[196,3360,3362],{"class":198,"line":3361},21,[196,3363,404],{"class":325},[196,3365,3367],{"class":198,"line":3366},22,[196,3368,1059],{"class":325},[173,3370,3371],{},"Disable invocation logs to avoid duplicate request logs:",[185,3373,3378],{"className":3374,"code":3375,"filename":3376,"language":3377,"meta":191,"style":191},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[193,3379,3380,3385],{"__ignoreMap":191},[196,3381,3382],{"class":198,"line":199},[196,3383,3384],{},"[observability.logs]\n",[196,3386,3387],{"class":198,"line":329},[196,3388,3389],{},"invocation_logs = false\n",[173,3391,3392],{},"Notes:",[3394,3395,3396,3406,3412],"ul",{},[3397,3398,3399,3401,3402,3405],"li",{},[193,3400,1068],{}," defaults to ",[193,3403,3404],{},"cf-ray"," when available",[3397,3407,3408,3411],{},[193,3409,3410],{},"request.cf"," is included (colo, country, asn) unless disabled",[3397,3413,3414,3415,3418],{},"Use ",[193,3416,3417],{},"headerAllowlist"," to avoid logging sensitive headers",[931,3420,3421,3422,3428],{"color":1871,"icon":1872},"See the full ",[284,3423,3427],{"href":3424,"rel":3425},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[3426],"nofollow","workers example"," for a complete working project.",[254,3430,152],{"id":3431},"hono",[173,3433,3434,3435,3438],{},"evlog provides a first-class Hono middleware at ",[193,3436,3437],{},"evlog/hono",". It auto-creates a request-scoped logger and emits a wide event on response.",[185,3440,3442],{"className":187,"code":3441,"language":190,"meta":191,"style":191},"bun add evlog hono\n",[193,3443,3444],{"__ignoreMap":191},[196,3445,3446,3448,3450,3453],{"class":198,"line":199},[196,3447,242],{"class":202},[196,3449,206],{"class":205},[196,3451,3452],{"class":205}," evlog",[196,3454,3455],{"class":205}," hono\n",[185,3457,3459],{"className":300,"code":3458,"filename":3050,"language":303,"meta":191,"style":191},"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",[193,3460,3461,3481,3500,3519,3544,3548,3557,3578,3584,3588,3613,3617,3634,3638,3668,3693,3726,3751,3757,3761],{"__ignoreMap":191},[196,3462,3463,3465,3467,3470,3472,3474,3476,3479],{"class":198,"line":199},[196,3464,448],{"class":310},[196,3466,451],{"class":325},[196,3468,3469],{"class":321}," serve",[196,3471,457],{"class":325},[196,3473,460],{"class":310},[196,3475,385],{"class":325},[196,3477,3478],{"class":205},"@hono/node-server",[196,3480,468],{"class":325},[196,3482,3483,3485,3487,3490,3492,3494,3496,3498],{"class":198,"line":329},[196,3484,448],{"class":310},[196,3486,451],{"class":325},[196,3488,3489],{"class":321}," Hono",[196,3491,457],{"class":325},[196,3493,460],{"class":310},[196,3495,385],{"class":325},[196,3497,3431],{"class":205},[196,3499,468],{"class":325},[196,3501,3502,3504,3506,3509,3511,3513,3515,3517],{"class":198,"line":356},[196,3503,448],{"class":310},[196,3505,451],{"class":325},[196,3507,3508],{"class":321}," initLogger",[196,3510,457],{"class":325},[196,3512,460],{"class":310},[196,3514,385],{"class":325},[196,3516,2414],{"class":205},[196,3518,468],{"class":325},[196,3520,3521,3523,3525,3527,3529,3531,3534,3536,3538,3540,3542],{"class":198,"line":367},[196,3522,448],{"class":310},[196,3524,451],{"class":325},[196,3526,3452],{"class":321},[196,3528,490],{"class":325},[196,3530,2646],{"class":310},[196,3532,3533],{"class":321}," EvlogVariables",[196,3535,457],{"class":325},[196,3537,460],{"class":310},[196,3539,385],{"class":325},[196,3541,3437],{"class":205},[196,3543,468],{"class":325},[196,3545,3546],{"class":198,"line":377},[196,3547,474],{"emptyLinePlaceholder":473},[196,3549,3550,3553,3555],{"class":198,"line":395},[196,3551,3552],{"class":317},"initLogger",[196,3554,322],{"class":321},[196,3556,326],{"class":325},[196,3558,3559,3561,3563,3565,3567,3569,3571,3574,3576],{"class":198,"line":401},[196,3560,3095],{"class":332},[196,3562,336],{"class":325},[196,3564,451],{"class":325},[196,3566,1215],{"class":332},[196,3568,336],{"class":325},[196,3570,385],{"class":325},[196,3572,3573],{"class":205},"hono-api",[196,3575,342],{"class":325},[196,3577,1987],{"class":325},[196,3579,3580,3582],{"class":198,"line":407},[196,3581,410],{"class":325},[196,3583,413],{"class":321},[196,3585,3586],{"class":198,"line":925},[196,3587,474],{"emptyLinePlaceholder":473},[196,3589,3590,3593,3596,3598,3600,3602,3605,3608,3611],{"class":198,"line":1261},[196,3591,3592],{"class":481},"const",[196,3594,3595],{"class":321}," app ",[196,3597,606],{"class":325},[196,3599,3221],{"class":325},[196,3601,3489],{"class":317},[196,3603,3604],{"class":325},"\u003C",[196,3606,3607],{"class":202},"EvlogVariables",[196,3609,3610],{"class":325},">",[196,3612,824],{"class":321},[196,3614,3615],{"class":198,"line":1271},[196,3616,474],{"emptyLinePlaceholder":473},[196,3618,3619,3622,3624,3627,3629,3631],{"class":198,"line":1281},[196,3620,3621],{"class":321},"app",[196,3623,658],{"class":325},[196,3625,3626],{"class":317},"use",[196,3628,322],{"class":321},[196,3630,2414],{"class":317},[196,3632,3633],{"class":321},"())\n",[196,3635,3636],{"class":198,"line":1287},[196,3637,474],{"emptyLinePlaceholder":473},[196,3639,3640,3642,3644,3646,3648,3650,3653,3655,3657,3659,3662,3664,3666],{"class":198,"line":2827},[196,3641,3621],{"class":321},[196,3643,658],{"class":325},[196,3645,891],{"class":317},[196,3647,322],{"class":321},[196,3649,342],{"class":325},[196,3651,3652],{"class":205},"/api/users",[196,3654,342],{"class":325},[196,3656,490],{"class":325},[196,3658,616],{"class":325},[196,3660,3661],{"class":619},"c",[196,3663,627],{"class":325},[196,3665,630],{"class":481},[196,3667,364],{"class":325},[196,3669,3670,3672,3674,3676,3679,3681,3683,3685,3687,3689,3691],{"class":198,"line":2853},[196,3671,637],{"class":481},[196,3673,498],{"class":321},[196,3675,508],{"class":325},[196,3677,3678],{"class":321}," c",[196,3680,658],{"class":325},[196,3682,891],{"class":317},[196,3684,322],{"class":332},[196,3686,342],{"class":325},[196,3688,1295],{"class":205},[196,3690,342],{"class":325},[196,3692,413],{"class":332},[196,3694,3695,3697,3699,3701,3703,3705,3708,3710,3712,3715,3717,3720,3722,3724],{"class":198,"line":2859},[196,3696,655],{"class":321},[196,3698,658],{"class":325},[196,3700,661],{"class":317},[196,3702,322],{"class":332},[196,3704,666],{"class":325},[196,3706,3707],{"class":332}," users",[196,3709,336],{"class":325},[196,3711,451],{"class":325},[196,3713,3714],{"class":332}," count",[196,3716,336],{"class":325},[196,3718,3719],{"class":3244}," 42",[196,3721,457],{"class":325},[196,3723,457],{"class":325},[196,3725,413],{"class":332},[196,3727,3728,3730,3732,3734,3736,3738,3740,3742,3744,3747,3749],{"class":198,"line":2864},[196,3729,696],{"class":310},[196,3731,3678],{"class":321},[196,3733,658],{"class":325},[196,3735,704],{"class":317},[196,3737,322],{"class":332},[196,3739,666],{"class":325},[196,3741,3707],{"class":332},[196,3743,336],{"class":325},[196,3745,3746],{"class":332}," [] ",[196,3748,410],{"class":325},[196,3750,413],{"class":332},[196,3752,3753,3755],{"class":198,"line":2869},[196,3754,410],{"class":325},[196,3756,413],{"class":321},[196,3758,3759],{"class":198,"line":3346},[196,3760,474],{"emptyLinePlaceholder":473},[196,3762,3763,3766,3768,3770,3772,3774,3777,3779,3782,3784,3787,3789,3792,3794],{"class":198,"line":3355},[196,3764,3765],{"class":317},"serve",[196,3767,322],{"class":321},[196,3769,666],{"class":325},[196,3771,3138],{"class":332},[196,3773,336],{"class":325},[196,3775,3776],{"class":321}," app",[196,3778,658],{"class":325},[196,3780,3781],{"class":321},"fetch",[196,3783,490],{"class":325},[196,3785,3786],{"class":332}," port",[196,3788,336],{"class":325},[196,3790,3791],{"class":3244}," 3000",[196,3793,457],{"class":325},[196,3795,413],{"class":321},[173,3797,3798,3799,3802],{},"The ",[193,3800,3801],{},"evlog()"," middleware supports the same features as Nuxt/Next.js — drain adapters, enrichers, and tail sampling:",[185,3804,3806],{"className":300,"code":3805,"language":303,"meta":191,"style":191},"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",[193,3807,3808,3828,3848,3852,3865,3869,3885,3905,3925,3934,3961,3965,3978,3996,4007,4035,4039,4056,4100,4104],{"__ignoreMap":191},[196,3809,3810,3812,3814,3817,3819,3821,3823,3826],{"class":198,"line":199},[196,3811,448],{"class":310},[196,3813,451],{"class":325},[196,3815,3816],{"class":321}," createAxiomDrain",[196,3818,457],{"class":325},[196,3820,460],{"class":310},[196,3822,385],{"class":325},[196,3824,3825],{"class":205},"evlog/axiom",[196,3827,468],{"class":325},[196,3829,3830,3832,3834,3837,3839,3841,3843,3846],{"class":198,"line":329},[196,3831,448],{"class":310},[196,3833,451],{"class":325},[196,3835,3836],{"class":321}," createUserAgentEnricher",[196,3838,457],{"class":325},[196,3840,460],{"class":310},[196,3842,385],{"class":325},[196,3844,3845],{"class":205},"evlog/enrichers",[196,3847,468],{"class":325},[196,3849,3850],{"class":198,"line":356},[196,3851,474],{"emptyLinePlaceholder":473},[196,3853,3854,3856,3859,3861,3863],{"class":198,"line":367},[196,3855,3592],{"class":481},[196,3857,3858],{"class":321}," userAgent ",[196,3860,606],{"class":325},[196,3862,3836],{"class":317},[196,3864,824],{"class":321},[196,3866,3867],{"class":198,"line":377},[196,3868,474],{"emptyLinePlaceholder":473},[196,3870,3871,3873,3875,3877,3879,3881,3883],{"class":198,"line":395},[196,3872,3621],{"class":321},[196,3874,658],{"class":325},[196,3876,3626],{"class":317},[196,3878,322],{"class":321},[196,3880,2414],{"class":317},[196,3882,322],{"class":321},[196,3884,326],{"class":325},[196,3886,3887,3890,3892,3894,3896,3899,3901,3903],{"class":198,"line":401},[196,3888,3889],{"class":332},"  include",[196,3891,336],{"class":325},[196,3893,339],{"class":321},[196,3895,342],{"class":325},[196,3897,3898],{"class":205},"/api/**",[196,3900,342],{"class":325},[196,3902,350],{"class":321},[196,3904,353],{"class":325},[196,3906,3907,3910,3912,3914,3916,3919,3921,3923],{"class":198,"line":407},[196,3908,3909],{"class":332},"  exclude",[196,3911,336],{"class":325},[196,3913,339],{"class":321},[196,3915,342],{"class":325},[196,3917,3918],{"class":205},"/_internal/**",[196,3920,342],{"class":325},[196,3922,350],{"class":321},[196,3924,353],{"class":325},[196,3926,3927,3930,3932],{"class":198,"line":925},[196,3928,3929],{"class":332},"  routes",[196,3931,336],{"class":325},[196,3933,364],{"class":325},[196,3935,3936,3939,3942,3944,3946,3948,3950,3952,3954,3957,3959],{"class":198,"line":1261},[196,3937,3938],{"class":325},"    '",[196,3940,3941],{"class":332},"/api/auth/**",[196,3943,342],{"class":325},[196,3945,336],{"class":325},[196,3947,451],{"class":325},[196,3949,1215],{"class":332},[196,3951,336],{"class":325},[196,3953,385],{"class":325},[196,3955,3956],{"class":205},"auth-service",[196,3958,342],{"class":325},[196,3960,1987],{"class":325},[196,3962,3963],{"class":198,"line":1271},[196,3964,404],{"class":325},[196,3966,3967,3970,3972,3974,3976],{"class":198,"line":1281},[196,3968,3969],{"class":332},"  drain",[196,3971,336],{"class":325},[196,3973,3816],{"class":317},[196,3975,1345],{"class":321},[196,3977,353],{"class":325},[196,3979,3980,3983,3985,3987,3990,3992,3994],{"class":198,"line":1287},[196,3981,3982],{"class":317},"  enrich",[196,3984,336],{"class":325},[196,3986,616],{"class":325},[196,3988,3989],{"class":619},"ctx",[196,3991,627],{"class":325},[196,3993,630],{"class":481},[196,3995,364],{"class":325},[196,3997,3998,4001,4003,4005],{"class":198,"line":2827},[196,3999,4000],{"class":317},"    userAgent",[196,4002,322],{"class":332},[196,4004,3989],{"class":321},[196,4006,413],{"class":332},[196,4008,4009,4012,4014,4016,4018,4021,4023,4026,4028,4030,4032],{"class":198,"line":2853},[196,4010,4011],{"class":321},"    ctx",[196,4013,658],{"class":325},[196,4015,2077],{"class":321},[196,4017,658],{"class":325},[196,4019,4020],{"class":321},"region",[196,4022,508],{"class":325},[196,4024,4025],{"class":321}," process",[196,4027,658],{"class":325},[196,4029,1516],{"class":321},[196,4031,658],{"class":325},[196,4033,4034],{"class":321},"FLY_REGION\n",[196,4036,4037],{"class":198,"line":2859},[196,4038,404],{"class":325},[196,4040,4041,4044,4046,4048,4050,4052,4054],{"class":198,"line":2864},[196,4042,4043],{"class":317},"  keep",[196,4045,336],{"class":325},[196,4047,616],{"class":325},[196,4049,3989],{"class":619},[196,4051,627],{"class":325},[196,4053,630],{"class":481},[196,4055,364],{"class":325},[196,4057,4058,4061,4063,4065,4067,4070,4073,4076,4078,4080,4083,4086,4088,4090,4092,4095,4097],{"class":198,"line":2869},[196,4059,4060],{"class":310},"    if",[196,4062,616],{"class":332},[196,4064,3989],{"class":321},[196,4066,658],{"class":325},[196,4068,4069],{"class":321},"duration",[196,4071,4072],{"class":325}," &&",[196,4074,4075],{"class":321}," ctx",[196,4077,658],{"class":325},[196,4079,4069],{"class":321},[196,4081,4082],{"class":325}," >",[196,4084,4085],{"class":3244}," 2000",[196,4087,903],{"class":332},[196,4089,3989],{"class":321},[196,4091,658],{"class":325},[196,4093,4094],{"class":321},"shouldKeep",[196,4096,508],{"class":325},[196,4098,4099],{"class":716}," true\n",[196,4101,4102],{"class":198,"line":3346},[196,4103,404],{"class":325},[196,4105,4106,4108],{"class":198,"line":3355},[196,4107,410],{"class":325},[196,4109,4110],{"class":321},"))\n",[173,4112,4113,4114,4116,4117,658],{},"Use the ",[193,4115,3607],{}," type to get typed access to ",[193,4118,4119],{},"c.get('log')",[931,4121,4122,4123,4126],{"color":1871,"icon":1872},"See the ",[284,4124,4125],{"href":153},"Hono example"," for a complete guide with drain, enrichers, tail sampling, and error handling.",[254,4128,157],{"id":4129},"express",[173,4131,4132,4133,4136,4137,4140,4141,4143],{},"evlog provides Express middleware at ",[193,4134,4135],{},"evlog/express",". It auto-creates a request-scoped logger accessible via ",[193,4138,4139],{},"req.log"," or ",[193,4142,1755],{}," and emits a wide event when the response finishes.",[185,4145,4147],{"className":187,"code":4146,"language":190,"meta":191,"style":191},"npm install evlog express\n",[193,4148,4149],{"__ignoreMap":191},[196,4150,4151,4153,4155,4157],{"class":198,"line":199},[196,4152,213],{"class":202},[196,4154,222],{"class":205},[196,4156,3452],{"class":205},[196,4158,4159],{"class":205}," express\n",[185,4161,4163],{"className":300,"code":4162,"filename":3050,"language":303,"meta":191,"style":191},"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",[193,4164,4165,4180,4198,4216,4220,4228,4249,4255,4259,4272,4276,4290,4294,4328,4363,4386,4392,4396],{"__ignoreMap":191},[196,4166,4167,4169,4172,4174,4176,4178],{"class":198,"line":199},[196,4168,448],{"class":310},[196,4170,4171],{"class":321}," express ",[196,4173,1923],{"class":310},[196,4175,385],{"class":325},[196,4177,4129],{"class":205},[196,4179,468],{"class":325},[196,4181,4182,4184,4186,4188,4190,4192,4194,4196],{"class":198,"line":329},[196,4183,448],{"class":310},[196,4185,451],{"class":325},[196,4187,3508],{"class":321},[196,4189,457],{"class":325},[196,4191,460],{"class":310},[196,4193,385],{"class":325},[196,4195,2414],{"class":205},[196,4197,468],{"class":325},[196,4199,4200,4202,4204,4206,4208,4210,4212,4214],{"class":198,"line":356},[196,4201,448],{"class":310},[196,4203,451],{"class":325},[196,4205,3452],{"class":321},[196,4207,457],{"class":325},[196,4209,460],{"class":310},[196,4211,385],{"class":325},[196,4213,4135],{"class":205},[196,4215,468],{"class":325},[196,4217,4218],{"class":198,"line":367},[196,4219,474],{"emptyLinePlaceholder":473},[196,4221,4222,4224,4226],{"class":198,"line":377},[196,4223,3552],{"class":317},[196,4225,322],{"class":321},[196,4227,326],{"class":325},[196,4229,4230,4232,4234,4236,4238,4240,4242,4245,4247],{"class":198,"line":395},[196,4231,3095],{"class":332},[196,4233,336],{"class":325},[196,4235,451],{"class":325},[196,4237,1215],{"class":332},[196,4239,336],{"class":325},[196,4241,385],{"class":325},[196,4243,4244],{"class":205},"express-api",[196,4246,342],{"class":325},[196,4248,1987],{"class":325},[196,4250,4251,4253],{"class":198,"line":401},[196,4252,410],{"class":325},[196,4254,413],{"class":321},[196,4256,4257],{"class":198,"line":407},[196,4258,474],{"emptyLinePlaceholder":473},[196,4260,4261,4263,4265,4267,4270],{"class":198,"line":925},[196,4262,3592],{"class":481},[196,4264,3595],{"class":321},[196,4266,606],{"class":325},[196,4268,4269],{"class":317}," express",[196,4271,824],{"class":321},[196,4273,4274],{"class":198,"line":1261},[196,4275,474],{"emptyLinePlaceholder":473},[196,4277,4278,4280,4282,4284,4286,4288],{"class":198,"line":1271},[196,4279,3621],{"class":321},[196,4281,658],{"class":325},[196,4283,3626],{"class":317},[196,4285,322],{"class":321},[196,4287,2414],{"class":317},[196,4289,3633],{"class":321},[196,4291,4292],{"class":198,"line":1281},[196,4293,474],{"emptyLinePlaceholder":473},[196,4295,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4317,4319,4322,4324,4326],{"class":198,"line":1287},[196,4297,3621],{"class":321},[196,4299,658],{"class":325},[196,4301,891],{"class":317},[196,4303,322],{"class":321},[196,4305,342],{"class":325},[196,4307,3652],{"class":205},[196,4309,342],{"class":325},[196,4311,490],{"class":325},[196,4313,616],{"class":325},[196,4315,4316],{"class":619},"req",[196,4318,490],{"class":325},[196,4320,4321],{"class":619}," res",[196,4323,627],{"class":325},[196,4325,630],{"class":481},[196,4327,364],{"class":325},[196,4329,4330,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361],{"class":198,"line":2827},[196,4331,4332],{"class":321},"  req",[196,4334,658],{"class":325},[196,4336,1295],{"class":321},[196,4338,658],{"class":325},[196,4340,661],{"class":317},[196,4342,322],{"class":332},[196,4344,666],{"class":325},[196,4346,3707],{"class":332},[196,4348,336],{"class":325},[196,4350,451],{"class":325},[196,4352,3714],{"class":332},[196,4354,336],{"class":325},[196,4356,3719],{"class":3244},[196,4358,457],{"class":325},[196,4360,457],{"class":325},[196,4362,413],{"class":332},[196,4364,4365,4368,4370,4372,4374,4376,4378,4380,4382,4384],{"class":198,"line":2853},[196,4366,4367],{"class":321},"  res",[196,4369,658],{"class":325},[196,4371,704],{"class":317},[196,4373,322],{"class":332},[196,4375,666],{"class":325},[196,4377,3707],{"class":332},[196,4379,336],{"class":325},[196,4381,3746],{"class":332},[196,4383,410],{"class":325},[196,4385,413],{"class":332},[196,4387,4388,4390],{"class":198,"line":2859},[196,4389,410],{"class":325},[196,4391,413],{"class":321},[196,4393,4394],{"class":198,"line":2864},[196,4395,474],{"emptyLinePlaceholder":473},[196,4397,4398,4400,4402,4405,4407,4410],{"class":198,"line":2869},[196,4399,3621],{"class":321},[196,4401,658],{"class":325},[196,4403,4404],{"class":317},"listen",[196,4406,322],{"class":321},[196,4408,4409],{"class":3244},"3000",[196,4411,413],{"class":321},[173,4413,4414],{},"The middleware supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[185,4416,4417],{"className":300,"code":3805,"language":303,"meta":191,"style":191},[193,4418,4419,4437,4455,4459,4471,4475,4491,4509,4527,4535,4559,4563,4575,4591,4601,4625,4629,4645,4681,4685],{"__ignoreMap":191},[196,4420,4421,4423,4425,4427,4429,4431,4433,4435],{"class":198,"line":199},[196,4422,448],{"class":310},[196,4424,451],{"class":325},[196,4426,3816],{"class":321},[196,4428,457],{"class":325},[196,4430,460],{"class":310},[196,4432,385],{"class":325},[196,4434,3825],{"class":205},[196,4436,468],{"class":325},[196,4438,4439,4441,4443,4445,4447,4449,4451,4453],{"class":198,"line":329},[196,4440,448],{"class":310},[196,4442,451],{"class":325},[196,4444,3836],{"class":321},[196,4446,457],{"class":325},[196,4448,460],{"class":310},[196,4450,385],{"class":325},[196,4452,3845],{"class":205},[196,4454,468],{"class":325},[196,4456,4457],{"class":198,"line":356},[196,4458,474],{"emptyLinePlaceholder":473},[196,4460,4461,4463,4465,4467,4469],{"class":198,"line":367},[196,4462,3592],{"class":481},[196,4464,3858],{"class":321},[196,4466,606],{"class":325},[196,4468,3836],{"class":317},[196,4470,824],{"class":321},[196,4472,4473],{"class":198,"line":377},[196,4474,474],{"emptyLinePlaceholder":473},[196,4476,4477,4479,4481,4483,4485,4487,4489],{"class":198,"line":395},[196,4478,3621],{"class":321},[196,4480,658],{"class":325},[196,4482,3626],{"class":317},[196,4484,322],{"class":321},[196,4486,2414],{"class":317},[196,4488,322],{"class":321},[196,4490,326],{"class":325},[196,4492,4493,4495,4497,4499,4501,4503,4505,4507],{"class":198,"line":401},[196,4494,3889],{"class":332},[196,4496,336],{"class":325},[196,4498,339],{"class":321},[196,4500,342],{"class":325},[196,4502,3898],{"class":205},[196,4504,342],{"class":325},[196,4506,350],{"class":321},[196,4508,353],{"class":325},[196,4510,4511,4513,4515,4517,4519,4521,4523,4525],{"class":198,"line":407},[196,4512,3909],{"class":332},[196,4514,336],{"class":325},[196,4516,339],{"class":321},[196,4518,342],{"class":325},[196,4520,3918],{"class":205},[196,4522,342],{"class":325},[196,4524,350],{"class":321},[196,4526,353],{"class":325},[196,4528,4529,4531,4533],{"class":198,"line":925},[196,4530,3929],{"class":332},[196,4532,336],{"class":325},[196,4534,364],{"class":325},[196,4536,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557],{"class":198,"line":1261},[196,4538,3938],{"class":325},[196,4540,3941],{"class":332},[196,4542,342],{"class":325},[196,4544,336],{"class":325},[196,4546,451],{"class":325},[196,4548,1215],{"class":332},[196,4550,336],{"class":325},[196,4552,385],{"class":325},[196,4554,3956],{"class":205},[196,4556,342],{"class":325},[196,4558,1987],{"class":325},[196,4560,4561],{"class":198,"line":1271},[196,4562,404],{"class":325},[196,4564,4565,4567,4569,4571,4573],{"class":198,"line":1281},[196,4566,3969],{"class":332},[196,4568,336],{"class":325},[196,4570,3816],{"class":317},[196,4572,1345],{"class":321},[196,4574,353],{"class":325},[196,4576,4577,4579,4581,4583,4585,4587,4589],{"class":198,"line":1287},[196,4578,3982],{"class":317},[196,4580,336],{"class":325},[196,4582,616],{"class":325},[196,4584,3989],{"class":619},[196,4586,627],{"class":325},[196,4588,630],{"class":481},[196,4590,364],{"class":325},[196,4592,4593,4595,4597,4599],{"class":198,"line":2827},[196,4594,4000],{"class":317},[196,4596,322],{"class":332},[196,4598,3989],{"class":321},[196,4600,413],{"class":332},[196,4602,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623],{"class":198,"line":2853},[196,4604,4011],{"class":321},[196,4606,658],{"class":325},[196,4608,2077],{"class":321},[196,4610,658],{"class":325},[196,4612,4020],{"class":321},[196,4614,508],{"class":325},[196,4616,4025],{"class":321},[196,4618,658],{"class":325},[196,4620,1516],{"class":321},[196,4622,658],{"class":325},[196,4624,4034],{"class":321},[196,4626,4627],{"class":198,"line":2859},[196,4628,404],{"class":325},[196,4630,4631,4633,4635,4637,4639,4641,4643],{"class":198,"line":2864},[196,4632,4043],{"class":317},[196,4634,336],{"class":325},[196,4636,616],{"class":325},[196,4638,3989],{"class":619},[196,4640,627],{"class":325},[196,4642,630],{"class":481},[196,4644,364],{"class":325},[196,4646,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679],{"class":198,"line":2869},[196,4648,4060],{"class":310},[196,4650,616],{"class":332},[196,4652,3989],{"class":321},[196,4654,658],{"class":325},[196,4656,4069],{"class":321},[196,4658,4072],{"class":325},[196,4660,4075],{"class":321},[196,4662,658],{"class":325},[196,4664,4069],{"class":321},[196,4666,4082],{"class":325},[196,4668,4085],{"class":3244},[196,4670,903],{"class":332},[196,4672,3989],{"class":321},[196,4674,658],{"class":325},[196,4676,4094],{"class":321},[196,4678,508],{"class":325},[196,4680,4099],{"class":716},[196,4682,4683],{"class":198,"line":3346},[196,4684,404],{"class":325},[196,4686,4687,4689],{"class":198,"line":3355},[196,4688,410],{"class":325},[196,4690,4110],{"class":321},[173,4692,4693],{},"Handle errors with Express's error handler middleware:",[185,4695,4697],{"className":300,"code":4696,"language":303,"meta":191,"style":191},"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",[193,4698,4699,4723,4727,4752,4802,4808,4812,4846,4864,4881,4948],{"__ignoreMap":191},[196,4700,4701,4703,4705,4708,4710,4713,4715,4717,4719,4721],{"class":198,"line":199},[196,4702,448],{"class":310},[196,4704,451],{"class":325},[196,4706,4707],{"class":321}," createError",[196,4709,490],{"class":325},[196,4711,4712],{"class":321}," parseError",[196,4714,457],{"class":325},[196,4716,460],{"class":310},[196,4718,385],{"class":325},[196,4720,2414],{"class":205},[196,4722,468],{"class":325},[196,4724,4725],{"class":198,"line":329},[196,4726,474],{"emptyLinePlaceholder":473},[196,4728,4729,4731,4733,4735,4737,4739,4742,4744,4746,4748,4750],{"class":198,"line":356},[196,4730,3621],{"class":321},[196,4732,658],{"class":325},[196,4734,891],{"class":317},[196,4736,322],{"class":321},[196,4738,342],{"class":325},[196,4740,4741],{"class":205},"/checkout",[196,4743,342],{"class":325},[196,4745,490],{"class":325},[196,4747,2723],{"class":325},[196,4749,630],{"class":481},[196,4751,364],{"class":325},[196,4753,4754,4757,4759,4761,4763,4766,4768,4770,4773,4775,4777,4779,4781,4784,4786,4789,4791,4793,4796,4798,4800],{"class":198,"line":367},[196,4755,4756],{"class":310},"  throw",[196,4758,4707],{"class":317},[196,4760,322],{"class":332},[196,4762,666],{"class":325},[196,4764,4765],{"class":332}," message",[196,4767,336],{"class":325},[196,4769,385],{"class":325},[196,4771,4772],{"class":205},"Payment failed",[196,4774,342],{"class":325},[196,4776,490],{"class":325},[196,4778,3239],{"class":332},[196,4780,336],{"class":325},[196,4782,4783],{"class":3244}," 402",[196,4785,490],{"class":325},[196,4787,4788],{"class":332}," why",[196,4790,336],{"class":325},[196,4792,385],{"class":325},[196,4794,4795],{"class":205},"Card declined",[196,4797,342],{"class":325},[196,4799,457],{"class":325},[196,4801,413],{"class":332},[196,4803,4804,4806],{"class":198,"line":377},[196,4805,410],{"class":325},[196,4807,413],{"class":321},[196,4809,4810],{"class":198,"line":395},[196,4811,474],{"emptyLinePlaceholder":473},[196,4813,4814,4816,4818,4820,4822,4824,4827,4829,4831,4833,4835,4837,4840,4842,4844],{"class":198,"line":401},[196,4815,3621],{"class":321},[196,4817,658],{"class":325},[196,4819,3626],{"class":317},[196,4821,322],{"class":321},[196,4823,322],{"class":325},[196,4825,4826],{"class":619},"err",[196,4828,490],{"class":325},[196,4830,2735],{"class":619},[196,4832,490],{"class":325},[196,4834,4321],{"class":619},[196,4836,490],{"class":325},[196,4838,4839],{"class":619}," next",[196,4841,627],{"class":325},[196,4843,630],{"class":481},[196,4845,364],{"class":325},[196,4847,4848,4850,4852,4854,4856,4858,4860,4862],{"class":198,"line":407},[196,4849,4332],{"class":321},[196,4851,658],{"class":325},[196,4853,1295],{"class":321},[196,4855,658],{"class":325},[196,4857,3297],{"class":317},[196,4859,322],{"class":332},[196,4861,4826],{"class":321},[196,4863,413],{"class":332},[196,4865,4866,4868,4871,4873,4875,4877,4879],{"class":198,"line":925},[196,4867,637],{"class":481},[196,4869,4870],{"class":321}," parsed",[196,4872,508],{"class":325},[196,4874,4712],{"class":317},[196,4876,322],{"class":332},[196,4878,4826],{"class":321},[196,4880,413],{"class":332},[196,4882,4883,4885,4887,4889,4891,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4919,4921,4923,4925,4927,4929,4931,4933,4936,4938,4940,4942,4944,4946],{"class":198,"line":1261},[196,4884,4367],{"class":321},[196,4886,658],{"class":325},[196,4888,3273],{"class":317},[196,4890,322],{"class":332},[196,4892,4893],{"class":321},"parsed",[196,4895,658],{"class":325},[196,4897,3273],{"class":321},[196,4899,627],{"class":332},[196,4901,658],{"class":325},[196,4903,704],{"class":317},[196,4905,322],{"class":332},[196,4907,666],{"class":325},[196,4909,4765],{"class":332},[196,4911,336],{"class":325},[196,4913,4870],{"class":321},[196,4915,658],{"class":325},[196,4917,4918],{"class":321},"message",[196,4920,490],{"class":325},[196,4922,4788],{"class":332},[196,4924,336],{"class":325},[196,4926,4870],{"class":321},[196,4928,658],{"class":325},[196,4930,2895],{"class":321},[196,4932,490],{"class":325},[196,4934,4935],{"class":332}," fix",[196,4937,336],{"class":325},[196,4939,4870],{"class":321},[196,4941,658],{"class":325},[196,4943,2898],{"class":321},[196,4945,457],{"class":325},[196,4947,413],{"class":332},[196,4949,4950,4952],{"class":198,"line":1271},[196,4951,410],{"class":325},[196,4953,413],{"class":321},[931,4955,4122,4956,4126],{"color":1871,"icon":1872},[284,4957,4958],{"href":158},"Express example",[254,4960,162],{"id":4961},"elysia",[173,4963,4964,4965,4136,4968,4970,4971,4973],{},"evlog provides an Elysia plugin at ",[193,4966,4967],{},"evlog/elysia",[193,4969,1295],{}," in route context or ",[193,4972,1755],{}," and emits a wide event when the response completes.",[185,4975,4977],{"className":187,"code":4976,"language":190,"meta":191,"style":191},"bun add evlog elysia\n",[193,4978,4979],{"__ignoreMap":191},[196,4980,4981,4983,4985,4987],{"class":198,"line":199},[196,4982,242],{"class":202},[196,4984,206],{"class":205},[196,4986,3452],{"class":205},[196,4988,4989],{"class":205}," elysia\n",[185,4991,4993],{"className":300,"code":4992,"filename":3050,"language":303,"meta":191,"style":191},"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",[193,4994,4995,5014,5032,5050,5054,5062,5083,5089,5093,5107,5120,5147,5178,5193,5200],{"__ignoreMap":191},[196,4996,4997,4999,5001,5004,5006,5008,5010,5012],{"class":198,"line":199},[196,4998,448],{"class":310},[196,5000,451],{"class":325},[196,5002,5003],{"class":321}," Elysia",[196,5005,457],{"class":325},[196,5007,460],{"class":310},[196,5009,385],{"class":325},[196,5011,4961],{"class":205},[196,5013,468],{"class":325},[196,5015,5016,5018,5020,5022,5024,5026,5028,5030],{"class":198,"line":329},[196,5017,448],{"class":310},[196,5019,451],{"class":325},[196,5021,3508],{"class":321},[196,5023,457],{"class":325},[196,5025,460],{"class":310},[196,5027,385],{"class":325},[196,5029,2414],{"class":205},[196,5031,468],{"class":325},[196,5033,5034,5036,5038,5040,5042,5044,5046,5048],{"class":198,"line":356},[196,5035,448],{"class":310},[196,5037,451],{"class":325},[196,5039,3452],{"class":321},[196,5041,457],{"class":325},[196,5043,460],{"class":310},[196,5045,385],{"class":325},[196,5047,4967],{"class":205},[196,5049,468],{"class":325},[196,5051,5052],{"class":198,"line":367},[196,5053,474],{"emptyLinePlaceholder":473},[196,5055,5056,5058,5060],{"class":198,"line":377},[196,5057,3552],{"class":317},[196,5059,322],{"class":321},[196,5061,326],{"class":325},[196,5063,5064,5066,5068,5070,5072,5074,5076,5079,5081],{"class":198,"line":395},[196,5065,3095],{"class":332},[196,5067,336],{"class":325},[196,5069,451],{"class":325},[196,5071,1215],{"class":332},[196,5073,336],{"class":325},[196,5075,385],{"class":325},[196,5077,5078],{"class":205},"elysia-api",[196,5080,342],{"class":325},[196,5082,1987],{"class":325},[196,5084,5085,5087],{"class":198,"line":401},[196,5086,410],{"class":325},[196,5088,413],{"class":321},[196,5090,5091],{"class":198,"line":407},[196,5092,474],{"emptyLinePlaceholder":473},[196,5094,5095,5097,5099,5101,5103,5105],{"class":198,"line":925},[196,5096,3592],{"class":481},[196,5098,3595],{"class":321},[196,5100,606],{"class":325},[196,5102,3221],{"class":325},[196,5104,5003],{"class":317},[196,5106,824],{"class":321},[196,5108,5109,5112,5114,5116,5118],{"class":198,"line":1261},[196,5110,5111],{"class":325},"  .",[196,5113,3626],{"class":317},[196,5115,322],{"class":321},[196,5117,2414],{"class":317},[196,5119,3633],{"class":321},[196,5121,5122,5124,5126,5128,5130,5132,5134,5136,5139,5141,5143,5145],{"class":198,"line":1271},[196,5123,5111],{"class":325},[196,5125,891],{"class":317},[196,5127,322],{"class":321},[196,5129,342],{"class":325},[196,5131,3652],{"class":205},[196,5133,342],{"class":325},[196,5135,490],{"class":325},[196,5137,5138],{"class":325}," ({",[196,5140,498],{"class":619},[196,5142,1162],{"class":325},[196,5144,630],{"class":481},[196,5146,364],{"class":325},[196,5148,5149,5152,5154,5156,5158,5160,5162,5164,5166,5168,5170,5172,5174,5176],{"class":198,"line":1281},[196,5150,5151],{"class":321},"    log",[196,5153,658],{"class":325},[196,5155,661],{"class":317},[196,5157,322],{"class":332},[196,5159,666],{"class":325},[196,5161,3707],{"class":332},[196,5163,336],{"class":325},[196,5165,451],{"class":325},[196,5167,3714],{"class":332},[196,5169,336],{"class":325},[196,5171,3719],{"class":3244},[196,5173,457],{"class":325},[196,5175,457],{"class":325},[196,5177,413],{"class":332},[196,5179,5180,5183,5185,5187,5189,5191],{"class":198,"line":1287},[196,5181,5182],{"class":310},"    return",[196,5184,451],{"class":325},[196,5186,3707],{"class":332},[196,5188,336],{"class":325},[196,5190,3746],{"class":332},[196,5192,1059],{"class":325},[196,5194,5195,5198],{"class":198,"line":2827},[196,5196,5197],{"class":325},"  }",[196,5199,413],{"class":321},[196,5201,5202,5204,5206,5208,5210],{"class":198,"line":2853},[196,5203,5111],{"class":325},[196,5205,4404],{"class":317},[196,5207,322],{"class":321},[196,5209,4409],{"class":3244},[196,5211,413],{"class":321},[173,5213,5214],{},"The plugin supports the full evlog pipeline — drain adapters, enrichers, and tail sampling:",[185,5216,5217],{"className":300,"code":3805,"language":303,"meta":191,"style":191},[193,5218,5219,5237,5255,5259,5271,5275,5291,5309,5327,5335,5359,5363,5375,5391,5401,5425,5429,5445,5481,5485],{"__ignoreMap":191},[196,5220,5221,5223,5225,5227,5229,5231,5233,5235],{"class":198,"line":199},[196,5222,448],{"class":310},[196,5224,451],{"class":325},[196,5226,3816],{"class":321},[196,5228,457],{"class":325},[196,5230,460],{"class":310},[196,5232,385],{"class":325},[196,5234,3825],{"class":205},[196,5236,468],{"class":325},[196,5238,5239,5241,5243,5245,5247,5249,5251,5253],{"class":198,"line":329},[196,5240,448],{"class":310},[196,5242,451],{"class":325},[196,5244,3836],{"class":321},[196,5246,457],{"class":325},[196,5248,460],{"class":310},[196,5250,385],{"class":325},[196,5252,3845],{"class":205},[196,5254,468],{"class":325},[196,5256,5257],{"class":198,"line":356},[196,5258,474],{"emptyLinePlaceholder":473},[196,5260,5261,5263,5265,5267,5269],{"class":198,"line":367},[196,5262,3592],{"class":481},[196,5264,3858],{"class":321},[196,5266,606],{"class":325},[196,5268,3836],{"class":317},[196,5270,824],{"class":321},[196,5272,5273],{"class":198,"line":377},[196,5274,474],{"emptyLinePlaceholder":473},[196,5276,5277,5279,5281,5283,5285,5287,5289],{"class":198,"line":395},[196,5278,3621],{"class":321},[196,5280,658],{"class":325},[196,5282,3626],{"class":317},[196,5284,322],{"class":321},[196,5286,2414],{"class":317},[196,5288,322],{"class":321},[196,5290,326],{"class":325},[196,5292,5293,5295,5297,5299,5301,5303,5305,5307],{"class":198,"line":401},[196,5294,3889],{"class":332},[196,5296,336],{"class":325},[196,5298,339],{"class":321},[196,5300,342],{"class":325},[196,5302,3898],{"class":205},[196,5304,342],{"class":325},[196,5306,350],{"class":321},[196,5308,353],{"class":325},[196,5310,5311,5313,5315,5317,5319,5321,5323,5325],{"class":198,"line":407},[196,5312,3909],{"class":332},[196,5314,336],{"class":325},[196,5316,339],{"class":321},[196,5318,342],{"class":325},[196,5320,3918],{"class":205},[196,5322,342],{"class":325},[196,5324,350],{"class":321},[196,5326,353],{"class":325},[196,5328,5329,5331,5333],{"class":198,"line":925},[196,5330,3929],{"class":332},[196,5332,336],{"class":325},[196,5334,364],{"class":325},[196,5336,5337,5339,5341,5343,5345,5347,5349,5351,5353,5355,5357],{"class":198,"line":1261},[196,5338,3938],{"class":325},[196,5340,3941],{"class":332},[196,5342,342],{"class":325},[196,5344,336],{"class":325},[196,5346,451],{"class":325},[196,5348,1215],{"class":332},[196,5350,336],{"class":325},[196,5352,385],{"class":325},[196,5354,3956],{"class":205},[196,5356,342],{"class":325},[196,5358,1987],{"class":325},[196,5360,5361],{"class":198,"line":1271},[196,5362,404],{"class":325},[196,5364,5365,5367,5369,5371,5373],{"class":198,"line":1281},[196,5366,3969],{"class":332},[196,5368,336],{"class":325},[196,5370,3816],{"class":317},[196,5372,1345],{"class":321},[196,5374,353],{"class":325},[196,5376,5377,5379,5381,5383,5385,5387,5389],{"class":198,"line":1287},[196,5378,3982],{"class":317},[196,5380,336],{"class":325},[196,5382,616],{"class":325},[196,5384,3989],{"class":619},[196,5386,627],{"class":325},[196,5388,630],{"class":481},[196,5390,364],{"class":325},[196,5392,5393,5395,5397,5399],{"class":198,"line":2827},[196,5394,4000],{"class":317},[196,5396,322],{"class":332},[196,5398,3989],{"class":321},[196,5400,413],{"class":332},[196,5402,5403,5405,5407,5409,5411,5413,5415,5417,5419,5421,5423],{"class":198,"line":2853},[196,5404,4011],{"class":321},[196,5406,658],{"class":325},[196,5408,2077],{"class":321},[196,5410,658],{"class":325},[196,5412,4020],{"class":321},[196,5414,508],{"class":325},[196,5416,4025],{"class":321},[196,5418,658],{"class":325},[196,5420,1516],{"class":321},[196,5422,658],{"class":325},[196,5424,4034],{"class":321},[196,5426,5427],{"class":198,"line":2859},[196,5428,404],{"class":325},[196,5430,5431,5433,5435,5437,5439,5441,5443],{"class":198,"line":2864},[196,5432,4043],{"class":317},[196,5434,336],{"class":325},[196,5436,616],{"class":325},[196,5438,3989],{"class":619},[196,5440,627],{"class":325},[196,5442,630],{"class":481},[196,5444,364],{"class":325},[196,5446,5447,5449,5451,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479],{"class":198,"line":2869},[196,5448,4060],{"class":310},[196,5450,616],{"class":332},[196,5452,3989],{"class":321},[196,5454,658],{"class":325},[196,5456,4069],{"class":321},[196,5458,4072],{"class":325},[196,5460,4075],{"class":321},[196,5462,658],{"class":325},[196,5464,4069],{"class":321},[196,5466,4082],{"class":325},[196,5468,4085],{"class":3244},[196,5470,903],{"class":332},[196,5472,3989],{"class":321},[196,5474,658],{"class":325},[196,5476,4094],{"class":321},[196,5478,508],{"class":325},[196,5480,4099],{"class":716},[196,5482,5483],{"class":198,"line":3346},[196,5484,404],{"class":325},[196,5486,5487,5489],{"class":198,"line":3355},[196,5488,410],{"class":325},[196,5490,4110],{"class":321},[173,5492,5493,5494,5497],{},"Handle errors with Elysia's ",[193,5495,5496],{},"onError"," hook (evlog captures them automatically):",[185,5499,5501],{"className":300,"code":5500,"language":303,"meta":191,"style":191},"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",[193,5502,5503,5525,5529,5534,5546,5568,5613,5619,5643,5659,5677,5719],{"__ignoreMap":191},[196,5504,5505,5507,5509,5511,5513,5515,5517,5519,5521,5523],{"class":198,"line":199},[196,5506,448],{"class":310},[196,5508,451],{"class":325},[196,5510,4707],{"class":321},[196,5512,490],{"class":325},[196,5514,4712],{"class":321},[196,5516,457],{"class":325},[196,5518,460],{"class":310},[196,5520,385],{"class":325},[196,5522,2414],{"class":205},[196,5524,468],{"class":325},[196,5526,5527],{"class":198,"line":329},[196,5528,474],{"emptyLinePlaceholder":473},[196,5530,5531],{"class":198,"line":356},[196,5532,5533],{"class":321},"app\n",[196,5535,5536,5538,5540,5542,5544],{"class":198,"line":367},[196,5537,5111],{"class":325},[196,5539,3626],{"class":317},[196,5541,322],{"class":321},[196,5543,2414],{"class":317},[196,5545,3633],{"class":321},[196,5547,5548,5550,5552,5554,5556,5558,5560,5562,5564,5566],{"class":198,"line":377},[196,5549,5111],{"class":325},[196,5551,891],{"class":317},[196,5553,322],{"class":321},[196,5555,342],{"class":325},[196,5557,4741],{"class":205},[196,5559,342],{"class":325},[196,5561,490],{"class":325},[196,5563,2723],{"class":325},[196,5565,630],{"class":481},[196,5567,364],{"class":325},[196,5569,5570,5573,5575,5577,5579,5581,5583,5585,5587,5589,5591,5593,5595,5597,5599,5601,5603,5605,5607,5609,5611],{"class":198,"line":395},[196,5571,5572],{"class":310},"    throw",[196,5574,4707],{"class":317},[196,5576,322],{"class":332},[196,5578,666],{"class":325},[196,5580,4765],{"class":332},[196,5582,336],{"class":325},[196,5584,385],{"class":325},[196,5586,4772],{"class":205},[196,5588,342],{"class":325},[196,5590,490],{"class":325},[196,5592,3239],{"class":332},[196,5594,336],{"class":325},[196,5596,4783],{"class":3244},[196,5598,490],{"class":325},[196,5600,4788],{"class":332},[196,5602,336],{"class":325},[196,5604,385],{"class":325},[196,5606,4795],{"class":205},[196,5608,342],{"class":325},[196,5610,457],{"class":325},[196,5612,413],{"class":332},[196,5614,5615,5617],{"class":198,"line":401},[196,5616,5197],{"class":325},[196,5618,413],{"class":321},[196,5620,5621,5623,5625,5627,5629,5632,5634,5637,5639,5641],{"class":198,"line":407},[196,5622,5111],{"class":325},[196,5624,5496],{"class":317},[196,5626,322],{"class":321},[196,5628,1139],{"class":325},[196,5630,5631],{"class":619}," error",[196,5633,490],{"class":325},[196,5635,5636],{"class":619}," set",[196,5638,1162],{"class":325},[196,5640,630],{"class":481},[196,5642,364],{"class":325},[196,5644,5645,5647,5649,5651,5653,5655,5657],{"class":198,"line":925},[196,5646,3156],{"class":481},[196,5648,4870],{"class":321},[196,5650,508],{"class":325},[196,5652,4712],{"class":317},[196,5654,322],{"class":332},[196,5656,3297],{"class":321},[196,5658,413],{"class":332},[196,5660,5661,5664,5666,5668,5670,5672,5674],{"class":198,"line":1261},[196,5662,5663],{"class":321},"    set",[196,5665,658],{"class":325},[196,5667,3273],{"class":321},[196,5669,508],{"class":325},[196,5671,4870],{"class":321},[196,5673,658],{"class":325},[196,5675,5676],{"class":321},"status\n",[196,5678,5679,5681,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707,5709,5711,5713,5715,5717],{"class":198,"line":1271},[196,5680,5182],{"class":310},[196,5682,451],{"class":325},[196,5684,4765],{"class":332},[196,5686,336],{"class":325},[196,5688,4870],{"class":321},[196,5690,658],{"class":325},[196,5692,4918],{"class":321},[196,5694,490],{"class":325},[196,5696,4788],{"class":332},[196,5698,336],{"class":325},[196,5700,4870],{"class":321},[196,5702,658],{"class":325},[196,5704,2895],{"class":321},[196,5706,490],{"class":325},[196,5708,4935],{"class":332},[196,5710,336],{"class":325},[196,5712,4870],{"class":321},[196,5714,658],{"class":325},[196,5716,2898],{"class":321},[196,5718,922],{"class":325},[196,5720,5721,5723],{"class":198,"line":1281},[196,5722,5197],{"class":325},[196,5724,413],{"class":321},[931,5726,4122,5727,4126],{"color":1871,"icon":1872},[284,5728,5729],{"href":163},"Elysia example",[254,5731,5733],{"id":5732},"fastify","Fastify",[173,5735,5736,5737,4136,5740,4140,5743,4143],{},"evlog provides a Fastify plugin at ",[193,5738,5739],{},"evlog/fastify",[193,5741,5742],{},"request.evlog",[193,5744,1755],{},[185,5746,5748],{"className":187,"code":5747,"language":190,"meta":191,"style":191},"npm install evlog fastify\n",[193,5749,5750],{"__ignoreMap":191},[196,5751,5752,5754,5756,5758],{"class":198,"line":199},[196,5753,213],{"class":202},[196,5755,222],{"class":205},[196,5757,3452],{"class":205},[196,5759,5760],{"class":205}," fastify\n",[185,5762,5764],{"className":300,"code":5763,"filename":3050,"language":303,"meta":191,"style":191},"import Fastify from 'fastify'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog/fastify'\n\ninitLogger({\n  env: { service: 'fastify-api' },\n})\n\nconst app = Fastify()\n\nawait app.register(evlog)\n\napp.get('/api/users', async (request) => {\n  request.evlog.set({ users: { count: 42 } })\n  return { users: [] }\n})\n\nawait app.listen({ port: 3000 })\n",[193,5765,5766,5781,5799,5817,5821,5829,5850,5856,5860,5873,5877,5892,5896,5926,5961,5975,5981,5985],{"__ignoreMap":191},[196,5767,5768,5770,5773,5775,5777,5779],{"class":198,"line":199},[196,5769,448],{"class":310},[196,5771,5772],{"class":321}," Fastify ",[196,5774,1923],{"class":310},[196,5776,385],{"class":325},[196,5778,5732],{"class":205},[196,5780,468],{"class":325},[196,5782,5783,5785,5787,5789,5791,5793,5795,5797],{"class":198,"line":329},[196,5784,448],{"class":310},[196,5786,451],{"class":325},[196,5788,3508],{"class":321},[196,5790,457],{"class":325},[196,5792,460],{"class":310},[196,5794,385],{"class":325},[196,5796,2414],{"class":205},[196,5798,468],{"class":325},[196,5800,5801,5803,5805,5807,5809,5811,5813,5815],{"class":198,"line":356},[196,5802,448],{"class":310},[196,5804,451],{"class":325},[196,5806,3452],{"class":321},[196,5808,457],{"class":325},[196,5810,460],{"class":310},[196,5812,385],{"class":325},[196,5814,5739],{"class":205},[196,5816,468],{"class":325},[196,5818,5819],{"class":198,"line":367},[196,5820,474],{"emptyLinePlaceholder":473},[196,5822,5823,5825,5827],{"class":198,"line":377},[196,5824,3552],{"class":317},[196,5826,322],{"class":321},[196,5828,326],{"class":325},[196,5830,5831,5833,5835,5837,5839,5841,5843,5846,5848],{"class":198,"line":395},[196,5832,3095],{"class":332},[196,5834,336],{"class":325},[196,5836,451],{"class":325},[196,5838,1215],{"class":332},[196,5840,336],{"class":325},[196,5842,385],{"class":325},[196,5844,5845],{"class":205},"fastify-api",[196,5847,342],{"class":325},[196,5849,1987],{"class":325},[196,5851,5852,5854],{"class":198,"line":401},[196,5853,410],{"class":325},[196,5855,413],{"class":321},[196,5857,5858],{"class":198,"line":407},[196,5859,474],{"emptyLinePlaceholder":473},[196,5861,5862,5864,5866,5868,5871],{"class":198,"line":925},[196,5863,3592],{"class":481},[196,5865,3595],{"class":321},[196,5867,606],{"class":325},[196,5869,5870],{"class":317}," Fastify",[196,5872,824],{"class":321},[196,5874,5875],{"class":198,"line":1261},[196,5876,474],{"emptyLinePlaceholder":473},[196,5878,5879,5882,5884,5886,5889],{"class":198,"line":1271},[196,5880,5881],{"class":310},"await",[196,5883,3776],{"class":321},[196,5885,658],{"class":325},[196,5887,5888],{"class":317},"register",[196,5890,5891],{"class":321},"(evlog)\n",[196,5893,5894],{"class":198,"line":1281},[196,5895,474],{"emptyLinePlaceholder":473},[196,5897,5898,5900,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924],{"class":198,"line":1287},[196,5899,3621],{"class":321},[196,5901,658],{"class":325},[196,5903,891],{"class":317},[196,5905,322],{"class":321},[196,5907,342],{"class":325},[196,5909,3652],{"class":205},[196,5911,342],{"class":325},[196,5913,490],{"class":325},[196,5915,2720],{"class":481},[196,5917,616],{"class":325},[196,5919,620],{"class":619},[196,5921,627],{"class":325},[196,5923,630],{"class":481},[196,5925,364],{"class":325},[196,5927,5928,5931,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959],{"class":198,"line":2827},[196,5929,5930],{"class":321},"  request",[196,5932,658],{"class":325},[196,5934,2414],{"class":321},[196,5936,658],{"class":325},[196,5938,661],{"class":317},[196,5940,322],{"class":332},[196,5942,666],{"class":325},[196,5944,3707],{"class":332},[196,5946,336],{"class":325},[196,5948,451],{"class":325},[196,5950,3714],{"class":332},[196,5952,336],{"class":325},[196,5954,3719],{"class":3244},[196,5956,457],{"class":325},[196,5958,457],{"class":325},[196,5960,413],{"class":332},[196,5962,5963,5965,5967,5969,5971,5973],{"class":198,"line":2853},[196,5964,696],{"class":310},[196,5966,451],{"class":325},[196,5968,3707],{"class":332},[196,5970,336],{"class":325},[196,5972,3746],{"class":332},[196,5974,1059],{"class":325},[196,5976,5977,5979],{"class":198,"line":2859},[196,5978,410],{"class":325},[196,5980,413],{"class":321},[196,5982,5983],{"class":198,"line":2864},[196,5984,474],{"emptyLinePlaceholder":473},[196,5986,5987,5989,5991,5993,5995,5997,5999,6001,6003,6005,6007],{"class":198,"line":2869},[196,5988,5881],{"class":310},[196,5990,3776],{"class":321},[196,5992,658],{"class":325},[196,5994,4404],{"class":317},[196,5996,322],{"class":321},[196,5998,666],{"class":325},[196,6000,3786],{"class":332},[196,6002,336],{"class":325},[196,6004,3791],{"class":3244},[196,6006,457],{"class":325},[196,6008,413],{"class":321},[173,6010,5214],{},[185,6012,6014],{"className":300,"code":6013,"language":303,"meta":191,"style":191},"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",[193,6015,6016,6034,6052,6056,6068,6072,6089,6107,6125,6133,6157,6161,6173,6189,6199,6223,6227,6243,6279,6283],{"__ignoreMap":191},[196,6017,6018,6020,6022,6024,6026,6028,6030,6032],{"class":198,"line":199},[196,6019,448],{"class":310},[196,6021,451],{"class":325},[196,6023,3816],{"class":321},[196,6025,457],{"class":325},[196,6027,460],{"class":310},[196,6029,385],{"class":325},[196,6031,3825],{"class":205},[196,6033,468],{"class":325},[196,6035,6036,6038,6040,6042,6044,6046,6048,6050],{"class":198,"line":329},[196,6037,448],{"class":310},[196,6039,451],{"class":325},[196,6041,3836],{"class":321},[196,6043,457],{"class":325},[196,6045,460],{"class":310},[196,6047,385],{"class":325},[196,6049,3845],{"class":205},[196,6051,468],{"class":325},[196,6053,6054],{"class":198,"line":356},[196,6055,474],{"emptyLinePlaceholder":473},[196,6057,6058,6060,6062,6064,6066],{"class":198,"line":367},[196,6059,3592],{"class":481},[196,6061,3858],{"class":321},[196,6063,606],{"class":325},[196,6065,3836],{"class":317},[196,6067,824],{"class":321},[196,6069,6070],{"class":198,"line":377},[196,6071,474],{"emptyLinePlaceholder":473},[196,6073,6074,6076,6078,6080,6082,6085,6087],{"class":198,"line":395},[196,6075,5881],{"class":310},[196,6077,3776],{"class":321},[196,6079,658],{"class":325},[196,6081,5888],{"class":317},[196,6083,6084],{"class":321},"(evlog",[196,6086,490],{"class":325},[196,6088,364],{"class":325},[196,6090,6091,6093,6095,6097,6099,6101,6103,6105],{"class":198,"line":401},[196,6092,3889],{"class":332},[196,6094,336],{"class":325},[196,6096,339],{"class":321},[196,6098,342],{"class":325},[196,6100,3898],{"class":205},[196,6102,342],{"class":325},[196,6104,350],{"class":321},[196,6106,353],{"class":325},[196,6108,6109,6111,6113,6115,6117,6119,6121,6123],{"class":198,"line":407},[196,6110,3909],{"class":332},[196,6112,336],{"class":325},[196,6114,339],{"class":321},[196,6116,342],{"class":325},[196,6118,3918],{"class":205},[196,6120,342],{"class":325},[196,6122,350],{"class":321},[196,6124,353],{"class":325},[196,6126,6127,6129,6131],{"class":198,"line":925},[196,6128,3929],{"class":332},[196,6130,336],{"class":325},[196,6132,364],{"class":325},[196,6134,6135,6137,6139,6141,6143,6145,6147,6149,6151,6153,6155],{"class":198,"line":1261},[196,6136,3938],{"class":325},[196,6138,3941],{"class":332},[196,6140,342],{"class":325},[196,6142,336],{"class":325},[196,6144,451],{"class":325},[196,6146,1215],{"class":332},[196,6148,336],{"class":325},[196,6150,385],{"class":325},[196,6152,3956],{"class":205},[196,6154,342],{"class":325},[196,6156,1987],{"class":325},[196,6158,6159],{"class":198,"line":1271},[196,6160,404],{"class":325},[196,6162,6163,6165,6167,6169,6171],{"class":198,"line":1281},[196,6164,3969],{"class":332},[196,6166,336],{"class":325},[196,6168,3816],{"class":317},[196,6170,1345],{"class":321},[196,6172,353],{"class":325},[196,6174,6175,6177,6179,6181,6183,6185,6187],{"class":198,"line":1287},[196,6176,3982],{"class":317},[196,6178,336],{"class":325},[196,6180,616],{"class":325},[196,6182,3989],{"class":619},[196,6184,627],{"class":325},[196,6186,630],{"class":481},[196,6188,364],{"class":325},[196,6190,6191,6193,6195,6197],{"class":198,"line":2827},[196,6192,4000],{"class":317},[196,6194,322],{"class":332},[196,6196,3989],{"class":321},[196,6198,413],{"class":332},[196,6200,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6221],{"class":198,"line":2853},[196,6202,4011],{"class":321},[196,6204,658],{"class":325},[196,6206,2077],{"class":321},[196,6208,658],{"class":325},[196,6210,4020],{"class":321},[196,6212,508],{"class":325},[196,6214,4025],{"class":321},[196,6216,658],{"class":325},[196,6218,1516],{"class":321},[196,6220,658],{"class":325},[196,6222,4034],{"class":321},[196,6224,6225],{"class":198,"line":2859},[196,6226,404],{"class":325},[196,6228,6229,6231,6233,6235,6237,6239,6241],{"class":198,"line":2864},[196,6230,4043],{"class":317},[196,6232,336],{"class":325},[196,6234,616],{"class":325},[196,6236,3989],{"class":619},[196,6238,627],{"class":325},[196,6240,630],{"class":481},[196,6242,364],{"class":325},[196,6244,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277],{"class":198,"line":2869},[196,6246,4060],{"class":310},[196,6248,616],{"class":332},[196,6250,3989],{"class":321},[196,6252,658],{"class":325},[196,6254,4069],{"class":321},[196,6256,4072],{"class":325},[196,6258,4075],{"class":321},[196,6260,658],{"class":325},[196,6262,4069],{"class":321},[196,6264,4082],{"class":325},[196,6266,4085],{"class":3244},[196,6268,903],{"class":332},[196,6270,3989],{"class":321},[196,6272,658],{"class":325},[196,6274,4094],{"class":321},[196,6276,508],{"class":325},[196,6278,4099],{"class":716},[196,6280,6281],{"class":198,"line":3346},[196,6282,404],{"class":325},[196,6284,6285,6287],{"class":198,"line":3355},[196,6286,410],{"class":325},[196,6288,413],{"class":321},[173,6290,3414,6291,6293],{},[193,6292,1755],{}," to access the logger from anywhere in the call stack:",[185,6295,6297],{"className":300,"code":6296,"language":303,"meta":191,"style":191},"import { useLogger } from 'evlog/fastify'\n\nfunction findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n}\n",[193,6298,6299,6317,6321,6343,6355,6381],{"__ignoreMap":191},[196,6300,6301,6303,6305,6307,6309,6311,6313,6315],{"class":198,"line":199},[196,6302,448],{"class":310},[196,6304,451],{"class":325},[196,6306,493],{"class":321},[196,6308,457],{"class":325},[196,6310,460],{"class":310},[196,6312,385],{"class":325},[196,6314,5739],{"class":205},[196,6316,468],{"class":325},[196,6318,6319],{"class":198,"line":329},[196,6320,474],{"emptyLinePlaceholder":473},[196,6322,6323,6326,6329,6331,6334,6336,6339,6341],{"class":198,"line":356},[196,6324,6325],{"class":481},"function",[196,6327,6328],{"class":317}," findUser",[196,6330,322],{"class":325},[196,6332,6333],{"class":619},"id",[196,6335,336],{"class":325},[196,6337,6338],{"class":202}," string",[196,6340,627],{"class":325},[196,6342,364],{"class":325},[196,6344,6345,6347,6349,6351,6353],{"class":198,"line":367},[196,6346,637],{"class":481},[196,6348,498],{"class":321},[196,6350,508],{"class":325},[196,6352,493],{"class":317},[196,6354,824],{"class":332},[196,6356,6357,6359,6361,6363,6365,6367,6369,6371,6373,6375,6377,6379],{"class":198,"line":377},[196,6358,655],{"class":321},[196,6360,658],{"class":325},[196,6362,661],{"class":317},[196,6364,322],{"class":332},[196,6366,666],{"class":325},[196,6368,669],{"class":332},[196,6370,336],{"class":325},[196,6372,451],{"class":325},[196,6374,676],{"class":321},[196,6376,457],{"class":325},[196,6378,457],{"class":325},[196,6380,413],{"class":332},[196,6382,6383],{"class":198,"line":395},[196,6384,1059],{"class":325},[931,6386,6387,2408,6389,6391,6392,6395],{"color":933,"icon":13},[2405,6388,2407],{},[193,6390,5742],{}," is the evlog wide-event logger. Fastify's built-in pino logger remains accessible via ",[193,6393,6394],{},"fastify.log"," for server-level structured logging — evlog complements it, not replaces it.",[931,6397,4122,6398,4126],{"color":1871,"icon":1872},[284,6399,6401],{"href":6400},"/examples/fastify","Fastify example",[254,6403,6405],{"id":6404},"standalone-typescript","Standalone TypeScript",[173,6407,6408],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[185,6410,6413],{"className":300,"code":6411,"filename":6412,"language":303,"meta":191,"style":191},"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",[193,6414,6415,6438,6442,6450,6458,6474,6490,6494,6500,6504,6562,6586],{"__ignoreMap":191},[196,6416,6417,6419,6421,6423,6425,6428,6430,6432,6434,6436],{"class":198,"line":199},[196,6418,448],{"class":310},[196,6420,451],{"class":325},[196,6422,3508],{"class":321},[196,6424,490],{"class":325},[196,6426,6427],{"class":321}," createLogger",[196,6429,457],{"class":325},[196,6431,460],{"class":310},[196,6433,385],{"class":325},[196,6435,2414],{"class":205},[196,6437,468],{"class":325},[196,6439,6440],{"class":198,"line":329},[196,6441,474],{"emptyLinePlaceholder":473},[196,6443,6444,6446,6448],{"class":198,"line":356},[196,6445,3552],{"class":317},[196,6447,322],{"class":321},[196,6449,326],{"class":325},[196,6451,6452,6454,6456],{"class":198,"line":367},[196,6453,3095],{"class":332},[196,6455,336],{"class":325},[196,6457,364],{"class":325},[196,6459,6460,6463,6465,6467,6470,6472],{"class":198,"line":377},[196,6461,6462],{"class":332},"    service",[196,6464,336],{"class":325},[196,6466,385],{"class":325},[196,6468,6469],{"class":205},"my-worker",[196,6471,342],{"class":325},[196,6473,353],{"class":325},[196,6475,6476,6479,6481,6483,6486,6488],{"class":198,"line":395},[196,6477,6478],{"class":332},"    environment",[196,6480,336],{"class":325},[196,6482,385],{"class":325},[196,6484,6485],{"class":205},"production",[196,6487,342],{"class":325},[196,6489,353],{"class":325},[196,6491,6492],{"class":198,"line":401},[196,6493,404],{"class":325},[196,6495,6496,6498],{"class":198,"line":407},[196,6497,410],{"class":325},[196,6499,413],{"class":321},[196,6501,6502],{"class":198,"line":925},[196,6503,474],{"emptyLinePlaceholder":473},[196,6505,6506,6508,6511,6513,6515,6517,6519,6522,6524,6527,6529,6531,6533,6535,6537,6539,6541,6544,6546,6549,6551,6553,6555,6558,6560],{"class":198,"line":1261},[196,6507,3592],{"class":481},[196,6509,6510],{"class":321}," log ",[196,6512,606],{"class":325},[196,6514,6427],{"class":317},[196,6516,322],{"class":321},[196,6518,666],{"class":325},[196,6520,6521],{"class":332}," jobId",[196,6523,336],{"class":325},[196,6525,6526],{"class":321}," job",[196,6528,658],{"class":325},[196,6530,6333],{"class":321},[196,6532,490],{"class":325},[196,6534,853],{"class":332},[196,6536,336],{"class":325},[196,6538,6526],{"class":321},[196,6540,658],{"class":325},[196,6542,6543],{"class":321},"source",[196,6545,490],{"class":325},[196,6547,6548],{"class":332}," target",[196,6550,336],{"class":325},[196,6552,6526],{"class":321},[196,6554,658],{"class":325},[196,6556,6557],{"class":321},"target ",[196,6559,410],{"class":325},[196,6561,413],{"class":321},[196,6563,6564,6566,6568,6570,6572,6574,6577,6579,6582,6584],{"class":198,"line":1271},[196,6565,1295],{"class":321},[196,6567,658],{"class":325},[196,6569,661],{"class":317},[196,6571,322],{"class":321},[196,6573,666],{"class":325},[196,6575,6576],{"class":332}," recordsSynced",[196,6578,336],{"class":325},[196,6580,6581],{"class":3244}," 150",[196,6583,457],{"class":325},[196,6585,413],{"class":321},[196,6587,6588,6590,6592,6594,6597],{"class":198,"line":1281},[196,6589,1295],{"class":321},[196,6591,658],{"class":325},[196,6593,3258],{"class":317},[196,6595,6596],{"class":321},"() ",[196,6598,6599],{"class":649},"// Manual emit required in standalone mode\n",[173,6601,6602,6605,6606,420,6609,6612],{},[193,6603,6604],{},"createLogger()"," accepts any initial context, making it ideal for workflows, jobs, queues, or scripts where HTTP request fields (",[193,6607,6608],{},"method",[193,6610,6611],{},"path",") don't apply.",[173,6614,6615,6616,6619,6620,420,6622,424,6624,336],{},"For HTTP request contexts, use ",[193,6617,6618],{},"createRequestLogger()"," which pre-populates ",[193,6621,6608],{},[193,6623,6611],{},[193,6625,1068],{},[185,6627,6630],{"className":300,"code":6628,"filename":6629,"language":303,"meta":191,"style":191},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '/api/checkout', requestId: 'req-123' })\n","server/middleware.ts",[193,6631,6632,6651,6655],{"__ignoreMap":191},[196,6633,6634,6636,6638,6641,6643,6645,6647,6649],{"class":198,"line":199},[196,6635,448],{"class":310},[196,6637,451],{"class":325},[196,6639,6640],{"class":321}," createRequestLogger",[196,6642,457],{"class":325},[196,6644,460],{"class":310},[196,6646,385],{"class":325},[196,6648,2414],{"class":205},[196,6650,468],{"class":325},[196,6652,6653],{"class":198,"line":329},[196,6654,474],{"emptyLinePlaceholder":473},[196,6656,6657,6659,6661,6663,6665,6667,6669,6672,6674,6676,6679,6681,6683,6686,6688,6690,6693,6695,6697,6700,6702,6704,6707,6709,6711],{"class":198,"line":356},[196,6658,3592],{"class":481},[196,6660,6510],{"class":321},[196,6662,606],{"class":325},[196,6664,6640],{"class":317},[196,6666,322],{"class":321},[196,6668,666],{"class":325},[196,6670,6671],{"class":332}," method",[196,6673,336],{"class":325},[196,6675,385],{"class":325},[196,6677,6678],{"class":205},"POST",[196,6680,342],{"class":325},[196,6682,490],{"class":325},[196,6684,6685],{"class":332}," path",[196,6687,336],{"class":325},[196,6689,385],{"class":325},[196,6691,6692],{"class":205},"/api/checkout",[196,6694,342],{"class":325},[196,6696,490],{"class":325},[196,6698,6699],{"class":332}," requestId",[196,6701,336],{"class":325},[196,6703,385],{"class":325},[196,6705,6706],{"class":205},"req-123",[196,6708,342],{"class":325},[196,6710,457],{"class":325},[196,6712,413],{"class":321},[931,6714,6715,6716,6719],{"color":933,"icon":13},"In standalone mode, you must call ",[193,6717,6718],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[729,6721,6723],{"id":6722},"draining-logs-to-external-services","Draining Logs to External Services",[173,6725,4113,6726,6728,6729,6731,6732,6735,6736,6739],{},[193,6727,1629],{}," option in ",[193,6730,3552],{}," to automatically send every emitted event to an external service. This works with all built-in ",[284,6733,6734],{"href":62},"adapters"," and the ",[284,6737,6738],{"href":97},"pipeline"," for batching and retry.",[185,6741,6743],{"className":300,"code":6742,"filename":6412,"language":303,"meta":191,"style":191},"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",[193,6744,6745,6766,6792,6810,6830,6834,6877,6896,6900,6908,6942,6948,6954,6958,6963,6990,6994,7050,7073,7086,7090,7095],{"__ignoreMap":191},[196,6746,6747,6749,6751,6753,6756,6758,6760,6762,6764],{"class":198,"line":199},[196,6748,448],{"class":310},[196,6750,2646],{"class":310},[196,6752,451],{"class":325},[196,6754,6755],{"class":321}," DrainContext",[196,6757,457],{"class":325},[196,6759,460],{"class":310},[196,6761,385],{"class":325},[196,6763,2414],{"class":205},[196,6765,468],{"class":325},[196,6767,6768,6770,6772,6774,6776,6778,6780,6782,6784,6786,6788,6790],{"class":198,"line":329},[196,6769,448],{"class":310},[196,6771,451],{"class":325},[196,6773,3508],{"class":321},[196,6775,490],{"class":325},[196,6777,498],{"class":321},[196,6779,490],{"class":325},[196,6781,6427],{"class":321},[196,6783,457],{"class":325},[196,6785,460],{"class":310},[196,6787,385],{"class":325},[196,6789,2414],{"class":205},[196,6791,468],{"class":325},[196,6793,6794,6796,6798,6800,6802,6804,6806,6808],{"class":198,"line":356},[196,6795,448],{"class":310},[196,6797,451],{"class":325},[196,6799,3816],{"class":321},[196,6801,457],{"class":325},[196,6803,460],{"class":310},[196,6805,385],{"class":325},[196,6807,3825],{"class":205},[196,6809,468],{"class":325},[196,6811,6812,6814,6816,6819,6821,6823,6825,6828],{"class":198,"line":367},[196,6813,448],{"class":310},[196,6815,451],{"class":325},[196,6817,6818],{"class":321}," createDrainPipeline",[196,6820,457],{"class":325},[196,6822,460],{"class":310},[196,6824,385],{"class":325},[196,6826,6827],{"class":205},"evlog/pipeline",[196,6829,468],{"class":325},[196,6831,6832],{"class":198,"line":377},[196,6833,474],{"emptyLinePlaceholder":473},[196,6835,6836,6838,6841,6843,6845,6847,6850,6852,6854,6856,6859,6861,6863,6866,6868,6871,6873,6875],{"class":198,"line":395},[196,6837,3592],{"class":481},[196,6839,6840],{"class":321}," pipeline ",[196,6842,606],{"class":325},[196,6844,6818],{"class":317},[196,6846,3604],{"class":325},[196,6848,6849],{"class":202},"DrainContext",[196,6851,3610],{"class":325},[196,6853,322],{"class":321},[196,6855,666],{"class":325},[196,6857,6858],{"class":332}," batch",[196,6860,336],{"class":325},[196,6862,451],{"class":325},[196,6864,6865],{"class":332}," size",[196,6867,336],{"class":325},[196,6869,6870],{"class":3244}," 10",[196,6872,457],{"class":325},[196,6874,457],{"class":325},[196,6876,413],{"class":321},[196,6878,6879,6881,6884,6886,6889,6891,6894],{"class":198,"line":401},[196,6880,3592],{"class":481},[196,6882,6883],{"class":321}," drain ",[196,6885,606],{"class":325},[196,6887,6888],{"class":317}," pipeline",[196,6890,322],{"class":321},[196,6892,6893],{"class":317},"createAxiomDrain",[196,6895,3633],{"class":321},[196,6897,6898],{"class":198,"line":407},[196,6899,474],{"emptyLinePlaceholder":473},[196,6901,6902,6904,6906],{"class":198,"line":925},[196,6903,3552],{"class":317},[196,6905,322],{"class":321},[196,6907,326],{"class":325},[196,6909,6910,6912,6914,6916,6918,6920,6922,6925,6927,6929,6932,6934,6936,6938,6940],{"class":198,"line":1261},[196,6911,3095],{"class":332},[196,6913,336],{"class":325},[196,6915,451],{"class":325},[196,6917,1215],{"class":332},[196,6919,336],{"class":325},[196,6921,385],{"class":325},[196,6923,6924],{"class":205},"my-script",[196,6926,342],{"class":325},[196,6928,490],{"class":325},[196,6930,6931],{"class":332}," environment",[196,6933,336],{"class":325},[196,6935,385],{"class":325},[196,6937,6485],{"class":205},[196,6939,342],{"class":325},[196,6941,1987],{"class":325},[196,6943,6944,6946],{"class":198,"line":1271},[196,6945,3969],{"class":321},[196,6947,353],{"class":325},[196,6949,6950,6952],{"class":198,"line":1281},[196,6951,410],{"class":325},[196,6953,413],{"class":321},[196,6955,6956],{"class":198,"line":1287},[196,6957,474],{"emptyLinePlaceholder":473},[196,6959,6960],{"class":198,"line":2827},[196,6961,6962],{"class":649},"// Every log is automatically drained\n",[196,6964,6965,6967,6969,6971,6973,6975,6977,6979,6981,6984,6986,6988],{"class":198,"line":2853},[196,6966,1295],{"class":321},[196,6968,658],{"class":325},[196,6970,933],{"class":317},[196,6972,322],{"class":321},[196,6974,666],{"class":325},[196,6976,839],{"class":332},[196,6978,336],{"class":325},[196,6980,385],{"class":325},[196,6982,6983],{"class":205},"sync_started",[196,6985,342],{"class":325},[196,6987,457],{"class":325},[196,6989,413],{"class":321},[196,6991,6992],{"class":198,"line":2859},[196,6993,474],{"emptyLinePlaceholder":473},[196,6995,6996,6998,7001,7003,7005,7007,7009,7011,7013,7015,7018,7020,7022,7024,7026,7028,7031,7033,7035,7037,7039,7041,7044,7046,7048],{"class":198,"line":2864},[196,6997,3592],{"class":481},[196,6999,7000],{"class":321}," syncLog ",[196,7002,606],{"class":325},[196,7004,6427],{"class":317},[196,7006,322],{"class":321},[196,7008,666],{"class":325},[196,7010,6521],{"class":332},[196,7012,336],{"class":325},[196,7014,385],{"class":325},[196,7016,7017],{"class":205},"sync-001",[196,7019,342],{"class":325},[196,7021,490],{"class":325},[196,7023,853],{"class":332},[196,7025,336],{"class":325},[196,7027,385],{"class":325},[196,7029,7030],{"class":205},"postgres",[196,7032,342],{"class":325},[196,7034,490],{"class":325},[196,7036,6548],{"class":332},[196,7038,336],{"class":325},[196,7040,385],{"class":325},[196,7042,7043],{"class":205},"s3",[196,7045,342],{"class":325},[196,7047,457],{"class":325},[196,7049,413],{"class":321},[196,7051,7052,7055,7057,7059,7061,7063,7065,7067,7069,7071],{"class":198,"line":2869},[196,7053,7054],{"class":321},"syncLog",[196,7056,658],{"class":325},[196,7058,661],{"class":317},[196,7060,322],{"class":321},[196,7062,666],{"class":325},[196,7064,6576],{"class":332},[196,7066,336],{"class":325},[196,7068,6581],{"class":3244},[196,7070,457],{"class":325},[196,7072,413],{"class":321},[196,7074,7075,7077,7079,7081,7083],{"class":198,"line":3346},[196,7076,7054],{"class":321},[196,7078,658],{"class":325},[196,7080,3258],{"class":317},[196,7082,6596],{"class":321},[196,7084,7085],{"class":649},"// drained automatically\n",[196,7087,7088],{"class":198,"line":3355},[196,7089,474],{"emptyLinePlaceholder":473},[196,7091,7092],{"class":198,"line":3361},[196,7093,7094],{"class":649},"// Flush remaining events before exit\n",[196,7096,7097,7099,7102,7104,7107],{"class":198,"line":3366},[196,7098,5881],{"class":310},[196,7100,7101],{"class":321}," drain",[196,7103,658],{"class":325},[196,7105,7106],{"class":317},"flush",[196,7108,824],{"class":321},[931,7110,3421,7111,7116],{"color":1871,"icon":1872},[284,7112,7115],{"href":7113,"rel":7114},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[3426],"bun-script example"," for a complete working script.",[177,7118,7120],{"id":7119},"configuration-options","Configuration Options",[173,7122,7123,7124,7127],{},"These options apply to ",[2405,7125,7126],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[1428,7129,7130,7142],{},[1431,7131,7132],{},[1434,7133,7134,7136,7138,7140],{},[1437,7135,1439],{},[1437,7137,1442],{},[1437,7139,1445],{},[1437,7141,1448],{},[1450,7143,7144,7165,7186,7203,7219,7239,7256,7273,7291,7313,7333],{},[1434,7145,7146,7150,7154,7158],{},[1455,7147,7148],{},[193,7149,1479],{},[1455,7151,7152],{},[193,7153,1484],{},[1455,7155,7156],{},[193,7157,1489],{},[1455,7159,7160,7161,7164],{},"Globally enable/disable all logging. When ",[193,7162,7163],{},"false",", all operations become no-ops",[1434,7166,7167,7172,7176,7180],{},[1455,7168,7169],{},[193,7170,7171],{},"console",[1455,7173,7174],{},[193,7175,1484],{},[1455,7177,7178],{},[193,7179,1489],{},[1455,7181,7182,7183,7185],{},"Enable/disable browser console output. When ",[193,7184,7163],{},", client logs are suppressed in DevTools but still sent via transport",[1434,7187,7188,7193,7197,7201],{},[1455,7189,7190],{},[193,7191,7192],{},"env.service",[1455,7194,7195],{},[193,7196,1464],{},[1455,7198,7199],{},[193,7200,1469],{},[1455,7202,1472],{},[1434,7204,7205,7210,7214,7216],{},[1455,7206,7207],{},[193,7208,7209],{},"env.environment",[1455,7211,7212],{},[193,7213,1464],{},[1455,7215,1524],{},[1455,7217,7218],{},"Environment name",[1434,7220,7221,7225,7229,7233],{},[1455,7222,7223],{},[193,7224,1573],{},[1455,7226,7227],{},[193,7228,1578],{},[1455,7230,7231],{},[193,7232,1544],{},[1455,7234,7235,7236,7238],{},"Route patterns to log. Supports glob (",[193,7237,3898],{},"). If not set, all routes are logged",[1434,7240,7241,7245,7249,7253],{},[1455,7242,7243],{},[193,7244,1592],{},[1455,7246,7247],{},[193,7248,1578],{},[1455,7250,7251],{},[193,7252,1544],{},[1455,7254,7255],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[1434,7257,7258,7262,7266,7270],{},[1455,7259,7260],{},[193,7261,1610],{},[1455,7263,7264],{},[193,7265,1615],{},[1455,7267,7268],{},[193,7269,1544],{},[1455,7271,7272],{},"Route-specific service configuration",[1434,7274,7275,7279,7283,7288],{},[1455,7276,7277],{},[193,7278,1499],{},[1455,7280,7281],{},[193,7282,1484],{},[1455,7284,7285,7287],{},[193,7286,1489],{}," in dev",[1455,7289,7290],{},"Pretty print with tree formatting",[1434,7292,7293,7297,7302,7306],{},[1455,7294,7295],{},[193,7296,1534],{},[1455,7298,7299],{},[193,7300,7301],{},"object",[1455,7303,7304],{},[193,7305,1544],{},[1455,7307,7308,7309],{},"Head sampling rates per log level (0-100%). See ",[284,7310,7312],{"href":7311},"#sampling","Sampling",[1434,7314,7315,7319,7324,7328],{},[1455,7316,7317],{},[193,7318,1554],{},[1455,7320,7321],{},[193,7322,7323],{},"array",[1455,7325,7326],{},[193,7327,1544],{},[1455,7329,7330,7331],{},"Tail sampling conditions to force-keep logs. See ",[284,7332,7312],{"href":7311},[1434,7334,7335,7339,7343,7347],{},[1455,7336,7337],{},[193,7338,1667],{},[1455,7340,7341],{},[193,7342,1672],{},[1455,7344,7345],{},[193,7346,1544],{},[1455,7348,7349,7350,7352],{},"Custom tail sampling callback (Next.js). Equivalent to ",[193,7351,1836],{}," hook in Nuxt",[931,7354,7355,7356,944,7359,7362,7363,658],{"color":933,"icon":13},"Nuxt also supports ",[193,7357,7358],{},"transport.enabled",[193,7360,7361],{},"transport.endpoint"," for ",[284,7364,7366],{"href":7365},"#client-transport-nuxt-only","Client Transport",[254,7368,7370],{"id":7369},"route-filtering","Route Filtering",[173,7372,3414,7373,944,7375,7377],{},[193,7374,1573],{},[193,7376,1592],{}," to control which routes are logged. Both support glob patterns.",[182,7379,7380,7511,7637],{},[185,7381,7383],{"className":300,"code":7382,"filename":302,"language":303,"meta":191,"style":191},"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",[193,7384,7385,7397,7415,7423,7451,7460,7472,7483,7494,7501,7505],{"__ignoreMap":191},[196,7386,7387,7389,7391,7393,7395],{"class":198,"line":199},[196,7388,311],{"class":310},[196,7390,314],{"class":310},[196,7392,318],{"class":317},[196,7394,322],{"class":321},[196,7396,326],{"class":325},[196,7398,7399,7401,7403,7405,7407,7409,7411,7413],{"class":198,"line":329},[196,7400,333],{"class":332},[196,7402,336],{"class":325},[196,7404,339],{"class":321},[196,7406,342],{"class":325},[196,7408,345],{"class":205},[196,7410,342],{"class":325},[196,7412,350],{"class":321},[196,7414,353],{"class":325},[196,7416,7417,7419,7421],{"class":198,"line":356},[196,7418,359],{"class":332},[196,7420,336],{"class":325},[196,7422,364],{"class":325},[196,7424,7425,7428,7430,7432,7434,7436,7438,7440,7442,7445,7447,7449],{"class":198,"line":367},[196,7426,7427],{"class":332},"    include",[196,7429,336],{"class":325},[196,7431,339],{"class":321},[196,7433,342],{"class":325},[196,7435,3898],{"class":205},[196,7437,342],{"class":325},[196,7439,490],{"class":325},[196,7441,385],{"class":325},[196,7443,7444],{"class":205},"/auth/**",[196,7446,342],{"class":325},[196,7448,350],{"class":321},[196,7450,353],{"class":325},[196,7452,7453,7456,7458],{"class":198,"line":377},[196,7454,7455],{"class":332},"    exclude",[196,7457,336],{"class":325},[196,7459,1955],{"class":321},[196,7461,7462,7465,7468,7470],{"class":198,"line":395},[196,7463,7464],{"class":325},"      '",[196,7466,7467],{"class":205},"/api/_nuxt_icon/**",[196,7469,342],{"class":325},[196,7471,353],{"class":325},[196,7473,7474,7476,7479,7481],{"class":198,"line":401},[196,7475,7464],{"class":325},[196,7477,7478],{"class":205},"/api/_content/**",[196,7480,342],{"class":325},[196,7482,353],{"class":325},[196,7484,7485,7487,7490,7492],{"class":198,"line":407},[196,7486,7464],{"class":325},[196,7488,7489],{"class":205},"/api/health",[196,7491,342],{"class":325},[196,7493,353],{"class":325},[196,7495,7496,7499],{"class":198,"line":925},[196,7497,7498],{"class":321},"    ]",[196,7500,353],{"class":325},[196,7502,7503],{"class":198,"line":1261},[196,7504,404],{"class":325},[196,7506,7507,7509],{"class":198,"line":1271},[196,7508,410],{"class":325},[196,7510,413],{"class":321},[185,7512,7515],{"className":300,"code":7513,"filename":7514,"language":303,"meta":191,"style":191},"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)",[193,7516,7517,7535,7549,7553,7565,7573,7581,7600,7619,7625,7631],{"__ignoreMap":191},[196,7518,7519,7521,7523,7525,7527,7529,7531,7533],{"class":198,"line":199},[196,7520,448],{"class":310},[196,7522,451],{"class":325},[196,7524,1903],{"class":321},[196,7526,457],{"class":325},[196,7528,460],{"class":310},[196,7530,385],{"class":325},[196,7532,1887],{"class":205},[196,7534,468],{"class":325},[196,7536,7537,7539,7541,7543,7545,7547],{"class":198,"line":329},[196,7538,448],{"class":310},[196,7540,1920],{"class":321},[196,7542,1923],{"class":310},[196,7544,385],{"class":325},[196,7546,1928],{"class":205},[196,7548,468],{"class":325},[196,7550,7551],{"class":198,"line":356},[196,7552,474],{"emptyLinePlaceholder":473},[196,7554,7555,7557,7559,7561,7563],{"class":198,"line":367},[196,7556,311],{"class":310},[196,7558,314],{"class":310},[196,7560,1903],{"class":317},[196,7562,322],{"class":321},[196,7564,326],{"class":325},[196,7566,7567,7569,7571],{"class":198,"line":377},[196,7568,333],{"class":332},[196,7570,336],{"class":325},[196,7572,1955],{"class":321},[196,7574,7575,7577,7579],{"class":198,"line":395},[196,7576,1960],{"class":317},[196,7578,322],{"class":321},[196,7580,326],{"class":325},[196,7582,7583,7586,7588,7590,7592,7594,7596,7598],{"class":198,"line":401},[196,7584,7585],{"class":332},"      include",[196,7587,336],{"class":325},[196,7589,339],{"class":321},[196,7591,342],{"class":325},[196,7593,3898],{"class":205},[196,7595,342],{"class":325},[196,7597,350],{"class":321},[196,7599,353],{"class":325},[196,7601,7602,7605,7607,7609,7611,7613,7615,7617],{"class":198,"line":407},[196,7603,7604],{"class":332},"      exclude",[196,7606,336],{"class":325},[196,7608,339],{"class":321},[196,7610,342],{"class":325},[196,7612,7489],{"class":205},[196,7614,342],{"class":325},[196,7616,350],{"class":321},[196,7618,353],{"class":325},[196,7620,7621,7623],{"class":198,"line":925},[196,7622,1992],{"class":325},[196,7624,413],{"class":321},[196,7626,7627,7629],{"class":198,"line":1261},[196,7628,1999],{"class":321},[196,7630,353],{"class":325},[196,7632,7633,7635],{"class":198,"line":1271},[196,7634,410],{"class":325},[196,7636,413],{"class":321},[185,7638,7641],{"className":300,"code":7639,"filename":7640,"language":303,"meta":191,"style":191},"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)",[193,7642,7643,7661,7675,7679,7691,7699,7707,7725,7743,7749,7755],{"__ignoreMap":191},[196,7644,7645,7647,7649,7651,7653,7655,7657,7659],{"class":198,"line":199},[196,7646,448],{"class":310},[196,7648,451],{"class":325},[196,7650,2171],{"class":321},[196,7652,457],{"class":325},[196,7654,460],{"class":310},[196,7656,385],{"class":325},[196,7658,2180],{"class":205},[196,7660,468],{"class":325},[196,7662,7663,7665,7667,7669,7671,7673],{"class":198,"line":329},[196,7664,448],{"class":310},[196,7666,1920],{"class":321},[196,7668,1923],{"class":310},[196,7670,385],{"class":325},[196,7672,2195],{"class":205},[196,7674,468],{"class":325},[196,7676,7677],{"class":198,"line":356},[196,7678,474],{"emptyLinePlaceholder":473},[196,7680,7681,7683,7685,7687,7689],{"class":198,"line":367},[196,7682,311],{"class":310},[196,7684,314],{"class":310},[196,7686,2171],{"class":317},[196,7688,322],{"class":321},[196,7690,326],{"class":325},[196,7692,7693,7695,7697],{"class":198,"line":377},[196,7694,333],{"class":332},[196,7696,336],{"class":325},[196,7698,1955],{"class":321},[196,7700,7701,7703,7705],{"class":198,"line":395},[196,7702,1960],{"class":317},[196,7704,322],{"class":321},[196,7706,326],{"class":325},[196,7708,7709,7711,7713,7715,7717,7719,7721,7723],{"class":198,"line":401},[196,7710,7585],{"class":332},[196,7712,336],{"class":325},[196,7714,339],{"class":321},[196,7716,342],{"class":325},[196,7718,3898],{"class":205},[196,7720,342],{"class":325},[196,7722,350],{"class":321},[196,7724,353],{"class":325},[196,7726,7727,7729,7731,7733,7735,7737,7739,7741],{"class":198,"line":407},[196,7728,7604],{"class":332},[196,7730,336],{"class":325},[196,7732,339],{"class":321},[196,7734,342],{"class":325},[196,7736,7489],{"class":205},[196,7738,342],{"class":325},[196,7740,350],{"class":321},[196,7742,353],{"class":325},[196,7744,7745,7747],{"class":198,"line":925},[196,7746,1992],{"class":325},[196,7748,413],{"class":321},[196,7750,7751,7753],{"class":198,"line":1261},[196,7752,1999],{"class":321},[196,7754,353],{"class":325},[196,7756,7757,7759],{"class":198,"line":1271},[196,7758,410],{"class":325},[196,7760,413],{"class":321},[931,7762,7763,7766,7767,944,7769,7771],{"color":933,"icon":13},[2405,7764,7765],{},"Exclusions take precedence."," If a path matches both ",[193,7768,1573],{},[193,7770,1592],{},", it will be excluded.",[254,7773,7775],{"id":7774},"route-based-service-configuration","Route-Based Service Configuration",[173,7777,7778],{},"In multi-service architectures, configure different service names for different routes:",[182,7780,7781,7950,8119],{},[185,7782,7784],{"className":300,"code":7783,"filename":302,"language":303,"meta":191,"style":191},"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",[193,7785,7786,7798,7816,7824,7832,7847,7851,7860,7884,7910,7936,7940,7944],{"__ignoreMap":191},[196,7787,7788,7790,7792,7794,7796],{"class":198,"line":199},[196,7789,311],{"class":310},[196,7791,314],{"class":310},[196,7793,318],{"class":317},[196,7795,322],{"class":321},[196,7797,326],{"class":325},[196,7799,7800,7802,7804,7806,7808,7810,7812,7814],{"class":198,"line":329},[196,7801,333],{"class":332},[196,7803,336],{"class":325},[196,7805,339],{"class":321},[196,7807,342],{"class":325},[196,7809,345],{"class":205},[196,7811,342],{"class":325},[196,7813,350],{"class":321},[196,7815,353],{"class":325},[196,7817,7818,7820,7822],{"class":198,"line":356},[196,7819,359],{"class":332},[196,7821,336],{"class":325},[196,7823,364],{"class":325},[196,7825,7826,7828,7830],{"class":198,"line":367},[196,7827,370],{"class":332},[196,7829,336],{"class":325},[196,7831,364],{"class":325},[196,7833,7834,7836,7838,7840,7843,7845],{"class":198,"line":377},[196,7835,380],{"class":332},[196,7837,336],{"class":325},[196,7839,385],{"class":325},[196,7841,7842],{"class":205},"default-service",[196,7844,342],{"class":325},[196,7846,353],{"class":325},[196,7848,7849],{"class":198,"line":395},[196,7850,398],{"class":325},[196,7852,7853,7856,7858],{"class":198,"line":401},[196,7854,7855],{"class":332},"    routes",[196,7857,336],{"class":325},[196,7859,364],{"class":325},[196,7861,7862,7864,7866,7868,7870,7872,7874,7876,7878,7880,7882],{"class":198,"line":407},[196,7863,7464],{"class":325},[196,7865,3941],{"class":332},[196,7867,342],{"class":325},[196,7869,336],{"class":325},[196,7871,451],{"class":325},[196,7873,1215],{"class":332},[196,7875,336],{"class":325},[196,7877,385],{"class":325},[196,7879,3956],{"class":205},[196,7881,342],{"class":325},[196,7883,1987],{"class":325},[196,7885,7886,7888,7891,7893,7895,7897,7899,7901,7903,7906,7908],{"class":198,"line":925},[196,7887,7464],{"class":325},[196,7889,7890],{"class":332},"/api/payment/**",[196,7892,342],{"class":325},[196,7894,336],{"class":325},[196,7896,451],{"class":325},[196,7898,1215],{"class":332},[196,7900,336],{"class":325},[196,7902,385],{"class":325},[196,7904,7905],{"class":205},"payment-service",[196,7907,342],{"class":325},[196,7909,1987],{"class":325},[196,7911,7912,7914,7917,7919,7921,7923,7925,7927,7929,7932,7934],{"class":198,"line":1261},[196,7913,7464],{"class":325},[196,7915,7916],{"class":332},"/api/booking/**",[196,7918,342],{"class":325},[196,7920,336],{"class":325},[196,7922,451],{"class":325},[196,7924,1215],{"class":332},[196,7926,336],{"class":325},[196,7928,385],{"class":325},[196,7930,7931],{"class":205},"booking-service",[196,7933,342],{"class":325},[196,7935,1987],{"class":325},[196,7937,7938],{"class":198,"line":1271},[196,7939,398],{"class":325},[196,7941,7942],{"class":198,"line":1281},[196,7943,404],{"class":325},[196,7945,7946,7948],{"class":198,"line":1287},[196,7947,410],{"class":325},[196,7949,413],{"class":321},[185,7951,7953],{"className":300,"code":7952,"filename":7514,"language":303,"meta":191,"style":191},"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",[193,7954,7955,7973,7987,7991,8003,8011,8019,8039,8048,8073,8097,8101,8107,8113],{"__ignoreMap":191},[196,7956,7957,7959,7961,7963,7965,7967,7969,7971],{"class":198,"line":199},[196,7958,448],{"class":310},[196,7960,451],{"class":325},[196,7962,1903],{"class":321},[196,7964,457],{"class":325},[196,7966,460],{"class":310},[196,7968,385],{"class":325},[196,7970,1887],{"class":205},[196,7972,468],{"class":325},[196,7974,7975,7977,7979,7981,7983,7985],{"class":198,"line":329},[196,7976,448],{"class":310},[196,7978,1920],{"class":321},[196,7980,1923],{"class":310},[196,7982,385],{"class":325},[196,7984,1928],{"class":205},[196,7986,468],{"class":325},[196,7988,7989],{"class":198,"line":356},[196,7990,474],{"emptyLinePlaceholder":473},[196,7992,7993,7995,7997,7999,8001],{"class":198,"line":367},[196,7994,311],{"class":310},[196,7996,314],{"class":310},[196,7998,1903],{"class":317},[196,8000,322],{"class":321},[196,8002,326],{"class":325},[196,8004,8005,8007,8009],{"class":198,"line":377},[196,8006,333],{"class":332},[196,8008,336],{"class":325},[196,8010,1955],{"class":321},[196,8012,8013,8015,8017],{"class":198,"line":395},[196,8014,1960],{"class":317},[196,8016,322],{"class":321},[196,8018,326],{"class":325},[196,8020,8021,8023,8025,8027,8029,8031,8033,8035,8037],{"class":198,"line":401},[196,8022,1969],{"class":332},[196,8024,336],{"class":325},[196,8026,451],{"class":325},[196,8028,1215],{"class":332},[196,8030,336],{"class":325},[196,8032,385],{"class":325},[196,8034,7842],{"class":205},[196,8036,342],{"class":325},[196,8038,1987],{"class":325},[196,8040,8041,8044,8046],{"class":198,"line":407},[196,8042,8043],{"class":332},"      routes",[196,8045,336],{"class":325},[196,8047,364],{"class":325},[196,8049,8050,8053,8055,8057,8059,8061,8063,8065,8067,8069,8071],{"class":198,"line":925},[196,8051,8052],{"class":325},"        '",[196,8054,3941],{"class":332},[196,8056,342],{"class":325},[196,8058,336],{"class":325},[196,8060,451],{"class":325},[196,8062,1215],{"class":332},[196,8064,336],{"class":325},[196,8066,385],{"class":325},[196,8068,3956],{"class":205},[196,8070,342],{"class":325},[196,8072,1987],{"class":325},[196,8074,8075,8077,8079,8081,8083,8085,8087,8089,8091,8093,8095],{"class":198,"line":1261},[196,8076,8052],{"class":325},[196,8078,7890],{"class":332},[196,8080,342],{"class":325},[196,8082,336],{"class":325},[196,8084,451],{"class":325},[196,8086,1215],{"class":332},[196,8088,336],{"class":325},[196,8090,385],{"class":325},[196,8092,7905],{"class":205},[196,8094,342],{"class":325},[196,8096,1987],{"class":325},[196,8098,8099],{"class":198,"line":1271},[196,8100,2856],{"class":325},[196,8102,8103,8105],{"class":198,"line":1281},[196,8104,1992],{"class":325},[196,8106,413],{"class":321},[196,8108,8109,8111],{"class":198,"line":1287},[196,8110,1999],{"class":321},[196,8112,353],{"class":325},[196,8114,8115,8117],{"class":198,"line":2827},[196,8116,410],{"class":325},[196,8118,413],{"class":321},[185,8120,8122],{"className":300,"code":8121,"filename":7640,"language":303,"meta":191,"style":191},"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",[193,8123,8124,8142,8156,8160,8172,8180,8188,8208,8216,8240,8264,8268,8274,8280],{"__ignoreMap":191},[196,8125,8126,8128,8130,8132,8134,8136,8138,8140],{"class":198,"line":199},[196,8127,448],{"class":310},[196,8129,451],{"class":325},[196,8131,2171],{"class":321},[196,8133,457],{"class":325},[196,8135,460],{"class":310},[196,8137,385],{"class":325},[196,8139,2180],{"class":205},[196,8141,468],{"class":325},[196,8143,8144,8146,8148,8150,8152,8154],{"class":198,"line":329},[196,8145,448],{"class":310},[196,8147,1920],{"class":321},[196,8149,1923],{"class":310},[196,8151,385],{"class":325},[196,8153,2195],{"class":205},[196,8155,468],{"class":325},[196,8157,8158],{"class":198,"line":356},[196,8159,474],{"emptyLinePlaceholder":473},[196,8161,8162,8164,8166,8168,8170],{"class":198,"line":367},[196,8163,311],{"class":310},[196,8165,314],{"class":310},[196,8167,2171],{"class":317},[196,8169,322],{"class":321},[196,8171,326],{"class":325},[196,8173,8174,8176,8178],{"class":198,"line":377},[196,8175,333],{"class":332},[196,8177,336],{"class":325},[196,8179,1955],{"class":321},[196,8181,8182,8184,8186],{"class":198,"line":395},[196,8183,1960],{"class":317},[196,8185,322],{"class":321},[196,8187,326],{"class":325},[196,8189,8190,8192,8194,8196,8198,8200,8202,8204,8206],{"class":198,"line":401},[196,8191,1969],{"class":332},[196,8193,336],{"class":325},[196,8195,451],{"class":325},[196,8197,1215],{"class":332},[196,8199,336],{"class":325},[196,8201,385],{"class":325},[196,8203,7842],{"class":205},[196,8205,342],{"class":325},[196,8207,1987],{"class":325},[196,8209,8210,8212,8214],{"class":198,"line":407},[196,8211,8043],{"class":332},[196,8213,336],{"class":325},[196,8215,364],{"class":325},[196,8217,8218,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238],{"class":198,"line":925},[196,8219,8052],{"class":325},[196,8221,3941],{"class":332},[196,8223,342],{"class":325},[196,8225,336],{"class":325},[196,8227,451],{"class":325},[196,8229,1215],{"class":332},[196,8231,336],{"class":325},[196,8233,385],{"class":325},[196,8235,3956],{"class":205},[196,8237,342],{"class":325},[196,8239,1987],{"class":325},[196,8241,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262],{"class":198,"line":1261},[196,8243,8052],{"class":325},[196,8245,7890],{"class":332},[196,8247,342],{"class":325},[196,8249,336],{"class":325},[196,8251,451],{"class":325},[196,8253,1215],{"class":332},[196,8255,336],{"class":325},[196,8257,385],{"class":325},[196,8259,7905],{"class":205},[196,8261,342],{"class":325},[196,8263,1987],{"class":325},[196,8265,8266],{"class":198,"line":1271},[196,8267,2856],{"class":325},[196,8269,8270,8272],{"class":198,"line":1281},[196,8271,1992],{"class":325},[196,8273,413],{"class":321},[196,8275,8276,8278],{"class":198,"line":1287},[196,8277,1999],{"class":321},[196,8279,353],{"class":325},[196,8281,8282,8284],{"class":198,"line":2827},[196,8283,410],{"class":325},[196,8285,413],{"class":321},[173,8287,8288,8289,8292,8293,286],{},"You can also override the service name per handler using ",[193,8290,8291],{},"useLogger(event, 'service-name')",". See ",[284,8294,8296],{"href":8295},"/getting-started/quick-start#service-identification","Quick Start - Service Identification",[254,8298,7312],{"id":8299},"sampling",[173,8301,8302],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[729,8304,8306],{"id":8305},"head-sampling-rates","Head Sampling (rates)",[173,8308,8309,8310,8313],{},"Random sampling based on log level, decided ",[2405,8311,8312],{},"before"," the request completes:",[182,8315,8316,8454,8590],{},[185,8317,8319],{"className":300,"code":8318,"filename":302,"language":303,"meta":191,"style":191},"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",[193,8320,8321,8333,8351,8359,8368,8377,8391,8406,8421,8436,8440,8444,8448],{"__ignoreMap":191},[196,8322,8323,8325,8327,8329,8331],{"class":198,"line":199},[196,8324,311],{"class":310},[196,8326,314],{"class":310},[196,8328,318],{"class":317},[196,8330,322],{"class":321},[196,8332,326],{"class":325},[196,8334,8335,8337,8339,8341,8343,8345,8347,8349],{"class":198,"line":329},[196,8336,333],{"class":332},[196,8338,336],{"class":325},[196,8340,339],{"class":321},[196,8342,342],{"class":325},[196,8344,345],{"class":205},[196,8346,342],{"class":325},[196,8348,350],{"class":321},[196,8350,353],{"class":325},[196,8352,8353,8355,8357],{"class":198,"line":356},[196,8354,359],{"class":332},[196,8356,336],{"class":325},[196,8358,364],{"class":325},[196,8360,8361,8364,8366],{"class":198,"line":367},[196,8362,8363],{"class":332},"    sampling",[196,8365,336],{"class":325},[196,8367,364],{"class":325},[196,8369,8370,8373,8375],{"class":198,"line":377},[196,8371,8372],{"class":332},"      rates",[196,8374,336],{"class":325},[196,8376,364],{"class":325},[196,8378,8379,8382,8384,8386,8388],{"class":198,"line":395},[196,8380,8381],{"class":332},"        info",[196,8383,336],{"class":325},[196,8385,6870],{"class":3244},[196,8387,490],{"class":325},[196,8389,8390],{"class":649},"    // Keep 10% of info logs\n",[196,8392,8393,8396,8398,8401,8403],{"class":198,"line":401},[196,8394,8395],{"class":332},"        warn",[196,8397,336],{"class":325},[196,8399,8400],{"class":3244}," 50",[196,8402,490],{"class":325},[196,8404,8405],{"class":649},"    // Keep 50% of warning logs\n",[196,8407,8408,8411,8413,8416,8418],{"class":198,"line":407},[196,8409,8410],{"class":332},"        debug",[196,8412,336],{"class":325},[196,8414,8415],{"class":3244}," 5",[196,8417,490],{"class":325},[196,8419,8420],{"class":649},"    // Keep 5% of debug logs\n",[196,8422,8423,8426,8428,8431,8433],{"class":198,"line":925},[196,8424,8425],{"class":332},"        error",[196,8427,336],{"class":325},[196,8429,8430],{"class":3244}," 100",[196,8432,490],{"class":325},[196,8434,8435],{"class":649},"  // Always keep errors (default)\n",[196,8437,8438],{"class":198,"line":1261},[196,8439,2856],{"class":325},[196,8441,8442],{"class":198,"line":1271},[196,8443,398],{"class":325},[196,8445,8446],{"class":198,"line":1281},[196,8447,404],{"class":325},[196,8449,8450,8452],{"class":198,"line":1287},[196,8451,410],{"class":325},[196,8453,413],{"class":321},[185,8455,8457],{"className":300,"code":8456,"filename":7514,"language":303,"meta":191,"style":191},"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",[193,8458,8459,8477,8491,8495,8507,8515,8523,8532,8568,8572,8578,8584],{"__ignoreMap":191},[196,8460,8461,8463,8465,8467,8469,8471,8473,8475],{"class":198,"line":199},[196,8462,448],{"class":310},[196,8464,451],{"class":325},[196,8466,1903],{"class":321},[196,8468,457],{"class":325},[196,8470,460],{"class":310},[196,8472,385],{"class":325},[196,8474,1887],{"class":205},[196,8476,468],{"class":325},[196,8478,8479,8481,8483,8485,8487,8489],{"class":198,"line":329},[196,8480,448],{"class":310},[196,8482,1920],{"class":321},[196,8484,1923],{"class":310},[196,8486,385],{"class":325},[196,8488,1928],{"class":205},[196,8490,468],{"class":325},[196,8492,8493],{"class":198,"line":356},[196,8494,474],{"emptyLinePlaceholder":473},[196,8496,8497,8499,8501,8503,8505],{"class":198,"line":367},[196,8498,311],{"class":310},[196,8500,314],{"class":310},[196,8502,1903],{"class":317},[196,8504,322],{"class":321},[196,8506,326],{"class":325},[196,8508,8509,8511,8513],{"class":198,"line":377},[196,8510,333],{"class":332},[196,8512,336],{"class":325},[196,8514,1955],{"class":321},[196,8516,8517,8519,8521],{"class":198,"line":395},[196,8518,1960],{"class":317},[196,8520,322],{"class":321},[196,8522,326],{"class":325},[196,8524,8525,8528,8530],{"class":198,"line":401},[196,8526,8527],{"class":332},"      sampling",[196,8529,336],{"class":325},[196,8531,364],{"class":325},[196,8533,8534,8537,8539,8541,8544,8546,8548,8550,8553,8555,8557,8559,8562,8564,8566],{"class":198,"line":407},[196,8535,8536],{"class":332},"        rates",[196,8538,336],{"class":325},[196,8540,451],{"class":325},[196,8542,8543],{"class":332}," info",[196,8545,336],{"class":325},[196,8547,6870],{"class":3244},[196,8549,490],{"class":325},[196,8551,8552],{"class":332}," warn",[196,8554,336],{"class":325},[196,8556,8400],{"class":3244},[196,8558,490],{"class":325},[196,8560,8561],{"class":332}," debug",[196,8563,336],{"class":325},[196,8565,8415],{"class":3244},[196,8567,1987],{"class":325},[196,8569,8570],{"class":198,"line":925},[196,8571,2856],{"class":325},[196,8573,8574,8576],{"class":198,"line":1261},[196,8575,1992],{"class":325},[196,8577,413],{"class":321},[196,8579,8580,8582],{"class":198,"line":1271},[196,8581,1999],{"class":321},[196,8583,353],{"class":325},[196,8585,8586,8588],{"class":198,"line":1281},[196,8587,410],{"class":325},[196,8589,413],{"class":321},[185,8591,8593],{"className":300,"code":8592,"filename":7640,"language":303,"meta":191,"style":191},"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",[193,8594,8595,8613,8627,8631,8643,8651,8659,8667,8699,8703,8709,8715],{"__ignoreMap":191},[196,8596,8597,8599,8601,8603,8605,8607,8609,8611],{"class":198,"line":199},[196,8598,448],{"class":310},[196,8600,451],{"class":325},[196,8602,2171],{"class":321},[196,8604,457],{"class":325},[196,8606,460],{"class":310},[196,8608,385],{"class":325},[196,8610,2180],{"class":205},[196,8612,468],{"class":325},[196,8614,8615,8617,8619,8621,8623,8625],{"class":198,"line":329},[196,8616,448],{"class":310},[196,8618,1920],{"class":321},[196,8620,1923],{"class":310},[196,8622,385],{"class":325},[196,8624,2195],{"class":205},[196,8626,468],{"class":325},[196,8628,8629],{"class":198,"line":356},[196,8630,474],{"emptyLinePlaceholder":473},[196,8632,8633,8635,8637,8639,8641],{"class":198,"line":367},[196,8634,311],{"class":310},[196,8636,314],{"class":310},[196,8638,2171],{"class":317},[196,8640,322],{"class":321},[196,8642,326],{"class":325},[196,8644,8645,8647,8649],{"class":198,"line":377},[196,8646,333],{"class":332},[196,8648,336],{"class":325},[196,8650,1955],{"class":321},[196,8652,8653,8655,8657],{"class":198,"line":395},[196,8654,1960],{"class":317},[196,8656,322],{"class":321},[196,8658,326],{"class":325},[196,8660,8661,8663,8665],{"class":198,"line":401},[196,8662,8527],{"class":332},[196,8664,336],{"class":325},[196,8666,364],{"class":325},[196,8668,8669,8671,8673,8675,8677,8679,8681,8683,8685,8687,8689,8691,8693,8695,8697],{"class":198,"line":407},[196,8670,8536],{"class":332},[196,8672,336],{"class":325},[196,8674,451],{"class":325},[196,8676,8543],{"class":332},[196,8678,336],{"class":325},[196,8680,6870],{"class":3244},[196,8682,490],{"class":325},[196,8684,8552],{"class":332},[196,8686,336],{"class":325},[196,8688,8400],{"class":3244},[196,8690,490],{"class":325},[196,8692,8561],{"class":332},[196,8694,336],{"class":325},[196,8696,8415],{"class":3244},[196,8698,1987],{"class":325},[196,8700,8701],{"class":198,"line":925},[196,8702,2856],{"class":325},[196,8704,8705,8707],{"class":198,"line":1261},[196,8706,1992],{"class":325},[196,8708,413],{"class":321},[196,8710,8711,8713],{"class":198,"line":1271},[196,8712,1999],{"class":321},[196,8714,353],{"class":325},[196,8716,8717,8719],{"class":198,"line":1281},[196,8718,410],{"class":325},[196,8720,413],{"class":321},[931,8722,8724,8727,8728,8731,8732,658],{"color":8723,"icon":49},"success",[2405,8725,8726],{},"Errors are always logged by default."," Even if you don't specify ",[193,8729,8730],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[193,8733,8734],{},"error: 0",[729,8736,8738],{"id":8737},"tail-sampling-keep","Tail Sampling (keep)",[173,8740,8741,8742,8745],{},"Force-keep logs based on request outcome, evaluated ",[2405,8743,8744],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[185,8747,8749],{"className":300,"code":8748,"language":303,"meta":191,"style":191},"// 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",[193,8750,8751,8756,8764,8781,8789,8808,8824,8844,8850],{"__ignoreMap":191},[196,8752,8753],{"class":198,"line":199},[196,8754,8755],{"class":649},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[196,8757,8758,8760,8762],{"class":198,"line":329},[196,8759,8299],{"class":202},[196,8761,336],{"class":325},[196,8763,364],{"class":325},[196,8765,8766,8769,8771,8773,8775,8777,8779],{"class":198,"line":356},[196,8767,8768],{"class":202},"  rates",[196,8770,336],{"class":325},[196,8772,451],{"class":325},[196,8774,8543],{"class":202},[196,8776,336],{"class":325},[196,8778,6870],{"class":3244},[196,8780,1987],{"class":325},[196,8782,8783,8785,8787],{"class":198,"line":367},[196,8784,4043],{"class":202},[196,8786,336],{"class":325},[196,8788,1955],{"class":332},[196,8790,8791,8794,8797,8799,8802,8805],{"class":198,"line":377},[196,8792,8793],{"class":325},"    {",[196,8795,8796],{"class":332}," duration",[196,8798,336],{"class":325},[196,8800,8801],{"class":3244}," 1000",[196,8803,8804],{"class":325}," },",[196,8806,8807],{"class":649},"           // Always keep if duration >= 1000ms\n",[196,8809,8810,8812,8814,8816,8819,8821],{"class":198,"line":395},[196,8811,8793],{"class":325},[196,8813,3239],{"class":332},[196,8815,336],{"class":325},[196,8817,8818],{"class":3244}," 400",[196,8820,8804],{"class":325},[196,8822,8823],{"class":649},"              // Always keep if status >= 400\n",[196,8825,8826,8828,8830,8832,8834,8837,8839,8841],{"class":198,"line":401},[196,8827,8793],{"class":325},[196,8829,6685],{"class":332},[196,8831,336],{"class":325},[196,8833,385],{"class":325},[196,8835,8836],{"class":205},"/api/critical/**",[196,8838,342],{"class":325},[196,8840,8804],{"class":325},[196,8842,8843],{"class":649}," // Always keep critical paths\n",[196,8845,8846,8848],{"class":198,"line":407},[196,8847,1999],{"class":332},[196,8849,353],{"class":325},[196,8851,8852],{"class":198,"line":925},[196,8853,1059],{"class":325},[173,8855,8856,8857,8860],{},"Conditions use ",[193,8858,8859],{},">="," comparison and follow OR logic (any match = keep).",[729,8862,8864],{"id":8863},"custom-tail-sampling","Custom Tail Sampling",[173,8866,8867,8868,8870,8871,8873],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[193,8869,1836],{}," hook (Nuxt/Nitro) or the ",[193,8872,1667],{}," callback (Next.js):",[182,8875,8876,9030],{},[185,8877,8880],{"className":300,"code":8878,"filename":8879,"language":303,"meta":191,"style":191},"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)",[193,8881,8882,8904,8939,8979,8983,9001,9014,9018,9024],{"__ignoreMap":191},[196,8883,8884,8886,8888,8891,8893,8895,8898,8900,8902],{"class":198,"line":199},[196,8885,311],{"class":310},[196,8887,314],{"class":310},[196,8889,8890],{"class":317}," defineNitroPlugin",[196,8892,322],{"class":321},[196,8894,322],{"class":325},[196,8896,8897],{"class":619},"nitroApp",[196,8899,627],{"class":325},[196,8901,630],{"class":481},[196,8903,364],{"class":325},[196,8905,8906,8909,8911,8914,8916,8919,8921,8923,8925,8927,8929,8931,8933,8935,8937],{"class":198,"line":329},[196,8907,8908],{"class":321},"  nitroApp",[196,8910,658],{"class":325},[196,8912,8913],{"class":321},"hooks",[196,8915,658],{"class":325},[196,8917,8918],{"class":317},"hook",[196,8920,322],{"class":332},[196,8922,342],{"class":325},[196,8924,1836],{"class":205},[196,8926,342],{"class":325},[196,8928,490],{"class":325},[196,8930,616],{"class":325},[196,8932,3989],{"class":619},[196,8934,627],{"class":325},[196,8936,630],{"class":481},[196,8938,364],{"class":325},[196,8940,8941,8943,8945,8947,8949,8951,8953,8955,8958,8960,8962,8965,8968,8971,8973,8976],{"class":198,"line":356},[196,8942,3156],{"class":481},[196,8944,669],{"class":321},[196,8946,508],{"class":325},[196,8948,4075],{"class":321},[196,8950,658],{"class":325},[196,8952,2756],{"class":321},[196,8954,658],{"class":325},[196,8956,8957],{"class":321},"user",[196,8959,2763],{"class":310},[196,8961,451],{"class":325},[196,8963,8964],{"class":332}," premium",[196,8966,8967],{"class":325},"?:",[196,8969,8970],{"class":202}," boolean",[196,8972,457],{"class":325},[196,8974,8975],{"class":325}," |",[196,8977,8978],{"class":202}," undefined\n",[196,8980,8981],{"class":198,"line":367},[196,8982,474],{"emptyLinePlaceholder":473},[196,8984,8985,8987,8989,8991,8994,8997,8999],{"class":198,"line":377},[196,8986,4060],{"class":310},[196,8988,616],{"class":332},[196,8990,8957],{"class":321},[196,8992,8993],{"class":325},"?.",[196,8995,8996],{"class":321},"premium",[196,8998,903],{"class":332},[196,9000,326],{"class":325},[196,9002,9003,9006,9008,9010,9012],{"class":198,"line":395},[196,9004,9005],{"class":321},"      ctx",[196,9007,658],{"class":325},[196,9009,4094],{"class":321},[196,9011,508],{"class":325},[196,9013,4099],{"class":716},[196,9015,9016],{"class":198,"line":401},[196,9017,3358],{"class":325},[196,9019,9020,9022],{"class":198,"line":407},[196,9021,5197],{"class":325},[196,9023,413],{"class":332},[196,9025,9026,9028],{"class":198,"line":925},[196,9027,410],{"class":325},[196,9029,413],{"class":321},[185,9031,9034],{"className":300,"code":9032,"filename":9033,"language":303,"meta":191,"style":191},"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)",[193,9035,9036,9054,9058,9083,9097,9106,9123,9156,9160,9176,9210,9234,9238],{"__ignoreMap":191},[196,9037,9038,9040,9042,9044,9046,9048,9050,9052],{"class":198,"line":199},[196,9039,448],{"class":310},[196,9041,451],{"class":325},[196,9043,454],{"class":321},[196,9045,457],{"class":325},[196,9047,460],{"class":310},[196,9049,385],{"class":325},[196,9051,465],{"class":205},[196,9053,468],{"class":325},[196,9055,9056],{"class":198,"line":329},[196,9057,474],{"emptyLinePlaceholder":473},[196,9059,9060,9062,9064,9066,9068,9070,9073,9075,9077,9079,9081],{"class":198,"line":356},[196,9061,311],{"class":310},[196,9063,482],{"class":481},[196,9065,451],{"class":325},[196,9067,487],{"class":321},[196,9069,490],{"class":325},[196,9071,9072],{"class":321}," useLogger ",[196,9074,410],{"class":325},[196,9076,508],{"class":325},[196,9078,454],{"class":317},[196,9080,322],{"class":321},[196,9082,326],{"class":325},[196,9084,9085,9087,9089,9091,9093,9095],{"class":198,"line":367},[196,9086,519],{"class":332},[196,9088,336],{"class":325},[196,9090,385],{"class":325},[196,9092,388],{"class":205},[196,9094,342],{"class":325},[196,9096,353],{"class":325},[196,9098,9099,9102,9104],{"class":198,"line":377},[196,9100,9101],{"class":332},"  sampling",[196,9103,336],{"class":325},[196,9105,364],{"class":325},[196,9107,9108,9111,9113,9115,9117,9119,9121],{"class":198,"line":395},[196,9109,9110],{"class":332},"    rates",[196,9112,336],{"class":325},[196,9114,451],{"class":325},[196,9116,8543],{"class":332},[196,9118,336],{"class":325},[196,9120,6870],{"class":3244},[196,9122,1987],{"class":325},[196,9124,9125,9128,9130,9132,9134,9136,9138,9140,9142,9144,9146,9148,9150,9152,9154],{"class":198,"line":401},[196,9126,9127],{"class":332},"    keep",[196,9129,336],{"class":325},[196,9131,339],{"class":321},[196,9133,666],{"class":325},[196,9135,3239],{"class":332},[196,9137,336],{"class":325},[196,9139,8818],{"class":3244},[196,9141,8804],{"class":325},[196,9143,451],{"class":325},[196,9145,8796],{"class":332},[196,9147,336],{"class":325},[196,9149,8801],{"class":3244},[196,9151,457],{"class":325},[196,9153,350],{"class":321},[196,9155,353],{"class":325},[196,9157,9158],{"class":198,"line":407},[196,9159,404],{"class":325},[196,9161,9162,9164,9166,9168,9170,9172,9174],{"class":198,"line":925},[196,9163,4043],{"class":317},[196,9165,336],{"class":325},[196,9167,616],{"class":325},[196,9169,3989],{"class":619},[196,9171,627],{"class":325},[196,9173,630],{"class":481},[196,9175,364],{"class":325},[196,9177,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208],{"class":198,"line":1261},[196,9179,3156],{"class":481},[196,9181,669],{"class":321},[196,9183,508],{"class":325},[196,9185,4075],{"class":321},[196,9187,658],{"class":325},[196,9189,2756],{"class":321},[196,9191,658],{"class":325},[196,9193,8957],{"class":321},[196,9195,2763],{"class":310},[196,9197,451],{"class":325},[196,9199,8964],{"class":332},[196,9201,8967],{"class":325},[196,9203,8970],{"class":202},[196,9205,457],{"class":325},[196,9207,8975],{"class":325},[196,9209,8978],{"class":202},[196,9211,9212,9214,9216,9218,9220,9222,9224,9226,9228,9230,9232],{"class":198,"line":1271},[196,9213,4060],{"class":310},[196,9215,616],{"class":332},[196,9217,8957],{"class":321},[196,9219,8993],{"class":325},[196,9221,8996],{"class":321},[196,9223,903],{"class":332},[196,9225,3989],{"class":321},[196,9227,658],{"class":325},[196,9229,4094],{"class":321},[196,9231,508],{"class":325},[196,9233,4099],{"class":716},[196,9235,9236],{"class":198,"line":1281},[196,9237,404],{"class":325},[196,9239,9240,9242],{"class":198,"line":1287},[196,9241,410],{"class":325},[196,9243,413],{"class":321},[173,9245,9246,9247,9250,9251,420,9253,420,9255,420,9257,9259,9260,658],{},"The callback receives a ",[193,9248,9249],{},"TailSamplingContext"," with ",[193,9252,3273],{},[193,9254,4069],{},[193,9256,6611],{},[193,9258,6608],{},", and the full accumulated ",[193,9261,2756],{},[254,9263,9265],{"id":9264},"log-draining","Log Draining",[173,9267,9268,9269,9272],{},"Send logs to external services like Axiom, Loki, or custom endpoints. The drain is called in ",[2405,9270,9271],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[182,9274,9275,9456],{},[185,9276,9279],{"className":300,"code":9277,"filename":9278,"language":303,"meta":191,"style":191},"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)",[193,9280,9281,9301,9335,9355,9370,9410,9438,9444,9450],{"__ignoreMap":191},[196,9282,9283,9285,9287,9289,9291,9293,9295,9297,9299],{"class":198,"line":199},[196,9284,311],{"class":310},[196,9286,314],{"class":310},[196,9288,8890],{"class":317},[196,9290,322],{"class":321},[196,9292,322],{"class":325},[196,9294,8897],{"class":619},[196,9296,627],{"class":325},[196,9298,630],{"class":481},[196,9300,364],{"class":325},[196,9302,9303,9305,9307,9309,9311,9313,9315,9317,9319,9321,9323,9325,9327,9329,9331,9333],{"class":198,"line":329},[196,9304,8908],{"class":321},[196,9306,658],{"class":325},[196,9308,8913],{"class":321},[196,9310,658],{"class":325},[196,9312,8918],{"class":317},[196,9314,322],{"class":332},[196,9316,342],{"class":325},[196,9318,1792],{"class":205},[196,9320,342],{"class":325},[196,9322,490],{"class":325},[196,9324,2720],{"class":481},[196,9326,616],{"class":325},[196,9328,3989],{"class":619},[196,9330,627],{"class":325},[196,9332,630],{"class":481},[196,9334,364],{"class":325},[196,9336,9337,9340,9342,9344,9346,9349,9351,9353],{"class":198,"line":356},[196,9338,9339],{"class":310},"    await",[196,9341,3138],{"class":317},[196,9343,322],{"class":332},[196,9345,342],{"class":325},[196,9347,9348],{"class":205},"https://api.axiom.co/v1/datasets/logs/ingest",[196,9350,342],{"class":325},[196,9352,490],{"class":325},[196,9354,364],{"class":325},[196,9356,9357,9360,9362,9364,9366,9368],{"class":198,"line":367},[196,9358,9359],{"class":332},"      method",[196,9361,336],{"class":325},[196,9363,385],{"class":325},[196,9365,6678],{"class":205},[196,9367,342],{"class":325},[196,9369,353],{"class":325},[196,9371,9372,9375,9377,9379,9382,9384,9387,9390,9393,9396,9398,9400,9402,9405,9408],{"class":198,"line":377},[196,9373,9374],{"class":332},"      headers",[196,9376,336],{"class":325},[196,9378,451],{"class":325},[196,9380,9381],{"class":332}," Authorization",[196,9383,336],{"class":325},[196,9385,9386],{"class":325}," `",[196,9388,9389],{"class":205},"Bearer ",[196,9391,9392],{"class":325},"${",[196,9394,9395],{"class":321},"process",[196,9397,658],{"class":325},[196,9399,1516],{"class":321},[196,9401,658],{"class":325},[196,9403,9404],{"class":321},"AXIOM_TOKEN",[196,9406,9407],{"class":325},"}`",[196,9409,1987],{"class":325},[196,9411,9412,9415,9417,9420,9422,9424,9427,9429,9431,9433,9436],{"class":198,"line":395},[196,9413,9414],{"class":332},"      body",[196,9416,336],{"class":325},[196,9418,9419],{"class":321}," JSON",[196,9421,658],{"class":325},[196,9423,1690],{"class":317},[196,9425,9426],{"class":332},"([",[196,9428,3989],{"class":321},[196,9430,658],{"class":325},[196,9432,2077],{"class":321},[196,9434,9435],{"class":332},"])",[196,9437,353],{"class":325},[196,9439,9440,9442],{"class":198,"line":401},[196,9441,1992],{"class":325},[196,9443,413],{"class":332},[196,9445,9446,9448],{"class":198,"line":407},[196,9447,5197],{"class":325},[196,9449,413],{"class":332},[196,9451,9452,9454],{"class":198,"line":925},[196,9453,410],{"class":325},[196,9455,413],{"class":321},[185,9457,9459],{"className":300,"code":9458,"filename":9033,"language":303,"meta":191,"style":191},"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",[193,9460,9461,9479,9497,9515,9519,9551,9555,9579,9593,9609,9625,9645,9654],{"__ignoreMap":191},[196,9462,9463,9465,9467,9469,9471,9473,9475,9477],{"class":198,"line":199},[196,9464,448],{"class":310},[196,9466,451],{"class":325},[196,9468,454],{"class":321},[196,9470,457],{"class":325},[196,9472,460],{"class":310},[196,9474,385],{"class":325},[196,9476,465],{"class":205},[196,9478,468],{"class":325},[196,9480,9481,9483,9485,9487,9489,9491,9493,9495],{"class":198,"line":329},[196,9482,448],{"class":310},[196,9484,451],{"class":325},[196,9486,3816],{"class":321},[196,9488,457],{"class":325},[196,9490,460],{"class":310},[196,9492,385],{"class":325},[196,9494,3825],{"class":205},[196,9496,468],{"class":325},[196,9498,9499,9501,9503,9505,9507,9509,9511,9513],{"class":198,"line":356},[196,9500,448],{"class":310},[196,9502,451],{"class":325},[196,9504,6818],{"class":321},[196,9506,457],{"class":325},[196,9508,460],{"class":310},[196,9510,385],{"class":325},[196,9512,6827],{"class":205},[196,9514,468],{"class":325},[196,9516,9517],{"class":198,"line":367},[196,9518,474],{"emptyLinePlaceholder":473},[196,9520,9521,9523,9525,9527,9529,9531,9533,9535,9537,9539,9541,9543,9545,9547,9549],{"class":198,"line":377},[196,9522,3592],{"class":481},[196,9524,6840],{"class":321},[196,9526,606],{"class":325},[196,9528,6818],{"class":317},[196,9530,322],{"class":321},[196,9532,666],{"class":325},[196,9534,6858],{"class":332},[196,9536,336],{"class":325},[196,9538,451],{"class":325},[196,9540,6865],{"class":332},[196,9542,336],{"class":325},[196,9544,8400],{"class":3244},[196,9546,457],{"class":325},[196,9548,457],{"class":325},[196,9550,413],{"class":321},[196,9552,9553],{"class":198,"line":395},[196,9554,474],{"emptyLinePlaceholder":473},[196,9556,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575,9577],{"class":198,"line":401},[196,9558,311],{"class":310},[196,9560,482],{"class":481},[196,9562,451],{"class":325},[196,9564,487],{"class":321},[196,9566,490],{"class":325},[196,9568,9072],{"class":321},[196,9570,410],{"class":325},[196,9572,508],{"class":325},[196,9574,454],{"class":317},[196,9576,322],{"class":321},[196,9578,326],{"class":325},[196,9580,9581,9583,9585,9587,9589,9591],{"class":198,"line":407},[196,9582,519],{"class":332},[196,9584,336],{"class":325},[196,9586,385],{"class":325},[196,9588,388],{"class":205},[196,9590,342],{"class":325},[196,9592,353],{"class":325},[196,9594,9595,9597,9599,9601,9603,9605,9607],{"class":198,"line":925},[196,9596,3969],{"class":332},[196,9598,336],{"class":325},[196,9600,6888],{"class":317},[196,9602,322],{"class":321},[196,9604,6893],{"class":317},[196,9606,322],{"class":321},[196,9608,326],{"class":325},[196,9610,9611,9614,9616,9618,9621,9623],{"class":198,"line":1261},[196,9612,9613],{"class":332},"    dataset",[196,9615,336],{"class":325},[196,9617,385],{"class":325},[196,9619,9620],{"class":205},"logs",[196,9622,342],{"class":325},[196,9624,353],{"class":325},[196,9626,9627,9630,9632,9634,9636,9638,9640,9642],{"class":198,"line":1271},[196,9628,9629],{"class":332},"    token",[196,9631,336],{"class":325},[196,9633,4025],{"class":321},[196,9635,658],{"class":325},[196,9637,1516],{"class":321},[196,9639,658],{"class":325},[196,9641,9404],{"class":321},[196,9643,9644],{"class":325},"!,\n",[196,9646,9647,9649,9652],{"class":198,"line":1281},[196,9648,5197],{"class":325},[196,9650,9651],{"class":321},"))",[196,9653,353],{"class":325},[196,9655,9656,9658],{"class":198,"line":1287},[196,9657,410],{"class":325},[196,9659,413],{"class":321},[173,9661,9662,9663,9665],{},"The hook receives a ",[193,9664,6849],{}," with:",[3394,9667,9668,9677,9688],{},[3397,9669,9670,9672,9673,9676],{},[193,9671,2077],{},": The complete ",[193,9674,9675],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[3397,9678,9679,9681,9682,420,9684,420,9686,627],{},[193,9680,620],{},": Optional request metadata (",[193,9683,6608],{},[193,9685,6611],{},[193,9687,1068],{},[3397,9689,9690,9693],{},[193,9691,9692],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[931,9695,9696,9699,9700,420,9703,420,9706,420,9709,420,9712,420,9715,9718],{"color":8723,"icon":49},[2405,9697,9698],{},"Security:"," Sensitive headers (",[193,9701,9702],{},"authorization",[193,9704,9705],{},"cookie",[193,9707,9708],{},"set-cookie",[193,9710,9711],{},"x-api-key",[193,9713,9714],{},"x-auth-token",[193,9716,9717],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[729,9720,9722],{"id":9721},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[173,9724,3798,9725,9727],{},[193,9726,9692],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[185,9729,9732],{"className":300,"code":9730,"filename":9731,"language":303,"meta":191,"style":191},"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",[193,9733,9734,9754,9768,9772,9804,9821,9825,9855,9883,9887,9902,9906,9920,9927,9943,9952,9965,9976,9980,9986,9992],{"__ignoreMap":191},[196,9735,9736,9738,9740,9742,9744,9746,9748,9750,9752],{"class":198,"line":199},[196,9737,311],{"class":310},[196,9739,314],{"class":310},[196,9741,8890],{"class":317},[196,9743,322],{"class":321},[196,9745,322],{"class":325},[196,9747,8897],{"class":619},[196,9749,627],{"class":325},[196,9751,630],{"class":481},[196,9753,364],{"class":325},[196,9755,9756,9758,9761,9763,9766],{"class":198,"line":329},[196,9757,637],{"class":481},[196,9759,9760],{"class":321}," posthog",[196,9762,508],{"class":325},[196,9764,9765],{"class":317}," usePostHog",[196,9767,824],{"class":332},[196,9769,9770],{"class":198,"line":356},[196,9771,474],{"emptyLinePlaceholder":473},[196,9773,9774,9776,9778,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798,9800,9802],{"class":198,"line":367},[196,9775,8908],{"class":321},[196,9777,658],{"class":325},[196,9779,8913],{"class":321},[196,9781,658],{"class":325},[196,9783,8918],{"class":317},[196,9785,322],{"class":332},[196,9787,342],{"class":325},[196,9789,1792],{"class":205},[196,9791,342],{"class":325},[196,9793,490],{"class":325},[196,9795,616],{"class":325},[196,9797,3989],{"class":619},[196,9799,627],{"class":325},[196,9801,630],{"class":481},[196,9803,364],{"class":325},[196,9805,9806,9808,9810,9813,9816,9818],{"class":198,"line":377},[196,9807,4060],{"class":310},[196,9809,616],{"class":332},[196,9811,9812],{"class":325},"!",[196,9814,9815],{"class":321},"posthog",[196,9817,903],{"class":332},[196,9819,9820],{"class":310},"return\n",[196,9822,9823],{"class":198,"line":395},[196,9824,474],{"emptyLinePlaceholder":473},[196,9826,9827,9829,9832,9834,9836,9838,9840,9842,9845,9847,9850,9852],{"class":198,"line":401},[196,9828,3156],{"class":481},[196,9830,9831],{"class":321}," sessionId",[196,9833,508],{"class":325},[196,9835,4075],{"class":321},[196,9837,658],{"class":325},[196,9839,9692],{"class":321},[196,9841,8993],{"class":325},[196,9843,9844],{"class":332},"[",[196,9846,342],{"class":325},[196,9848,9849],{"class":205},"x-posthog-session-id",[196,9851,342],{"class":325},[196,9853,9854],{"class":332},"]\n",[196,9856,9857,9859,9862,9864,9866,9868,9870,9872,9874,9876,9879,9881],{"class":198,"line":407},[196,9858,3156],{"class":481},[196,9860,9861],{"class":321}," distinctId",[196,9863,508],{"class":325},[196,9865,4075],{"class":321},[196,9867,658],{"class":325},[196,9869,9692],{"class":321},[196,9871,8993],{"class":325},[196,9873,9844],{"class":332},[196,9875,342],{"class":325},[196,9877,9878],{"class":205},"x-posthog-distinct-id",[196,9880,342],{"class":325},[196,9882,9854],{"class":332},[196,9884,9885],{"class":198,"line":925},[196,9886,474],{"emptyLinePlaceholder":473},[196,9888,9889,9891,9893,9895,9898,9900],{"class":198,"line":1261},[196,9890,4060],{"class":310},[196,9892,616],{"class":332},[196,9894,9812],{"class":325},[196,9896,9897],{"class":321},"distinctId",[196,9899,903],{"class":332},[196,9901,9820],{"class":310},[196,9903,9904],{"class":198,"line":1271},[196,9905,474],{"emptyLinePlaceholder":473},[196,9907,9908,9911,9913,9916,9918],{"class":198,"line":1281},[196,9909,9910],{"class":321},"    posthog",[196,9912,658],{"class":325},[196,9914,9915],{"class":317},"capture",[196,9917,322],{"class":332},[196,9919,326],{"class":325},[196,9921,9922,9925],{"class":198,"line":1287},[196,9923,9924],{"class":321},"      distinctId",[196,9926,353],{"class":325},[196,9928,9929,9932,9934,9936,9939,9941],{"class":198,"line":2827},[196,9930,9931],{"class":332},"      event",[196,9933,336],{"class":325},[196,9935,385],{"class":325},[196,9937,9938],{"class":205},"server_log",[196,9940,342],{"class":325},[196,9942,353],{"class":325},[196,9944,9945,9948,9950],{"class":198,"line":2853},[196,9946,9947],{"class":332},"      properties",[196,9949,336],{"class":325},[196,9951,364],{"class":325},[196,9953,9954,9957,9959,9961,9963],{"class":198,"line":2859},[196,9955,9956],{"class":325},"        ...",[196,9958,3989],{"class":321},[196,9960,658],{"class":325},[196,9962,2077],{"class":321},[196,9964,353],{"class":325},[196,9966,9967,9970,9972,9974],{"class":198,"line":2864},[196,9968,9969],{"class":332},"        $session_id",[196,9971,336],{"class":325},[196,9973,9831],{"class":321},[196,9975,353],{"class":325},[196,9977,9978],{"class":198,"line":2869},[196,9979,2856],{"class":325},[196,9981,9982,9984],{"class":198,"line":3346},[196,9983,1992],{"class":325},[196,9985,413],{"class":332},[196,9987,9988,9990],{"class":198,"line":3355},[196,9989,5197],{"class":325},[196,9991,413],{"class":332},[196,9993,9994,9996],{"class":198,"line":3361},[196,9995,410],{"class":325},[196,9997,413],{"class":321},[254,9999,10001],{"id":10000},"event-enrichment","Event Enrichment",[173,10003,10004],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[182,10006,10007,10211],{},[185,10008,10011],{"className":300,"code":10009,"filename":10010,"language":303,"meta":191,"style":191},"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)",[193,10012,10013,10019,10026,10033,10040,10047,10059,10063,10083,10094,10103,10112,10121,10130,10135,10139,10171,10199,10205],{"__ignoreMap":191},[196,10014,10015,10017],{"class":198,"line":199},[196,10016,448],{"class":310},[196,10018,364],{"class":325},[196,10020,10021,10024],{"class":198,"line":329},[196,10022,10023],{"class":321},"  createUserAgentEnricher",[196,10025,353],{"class":325},[196,10027,10028,10031],{"class":198,"line":356},[196,10029,10030],{"class":321},"  createGeoEnricher",[196,10032,353],{"class":325},[196,10034,10035,10038],{"class":198,"line":367},[196,10036,10037],{"class":321},"  createRequestSizeEnricher",[196,10039,353],{"class":325},[196,10041,10042,10045],{"class":198,"line":377},[196,10043,10044],{"class":321},"  createTraceContextEnricher",[196,10046,353],{"class":325},[196,10048,10049,10051,10053,10055,10057],{"class":198,"line":395},[196,10050,410],{"class":325},[196,10052,460],{"class":310},[196,10054,385],{"class":325},[196,10056,3845],{"class":205},[196,10058,468],{"class":325},[196,10060,10061],{"class":198,"line":401},[196,10062,474],{"emptyLinePlaceholder":473},[196,10064,10065,10067,10069,10071,10073,10075,10077,10079,10081],{"class":198,"line":407},[196,10066,311],{"class":310},[196,10068,314],{"class":310},[196,10070,8890],{"class":317},[196,10072,322],{"class":321},[196,10074,322],{"class":325},[196,10076,8897],{"class":619},[196,10078,627],{"class":325},[196,10080,630],{"class":481},[196,10082,364],{"class":325},[196,10084,10085,10087,10090,10092],{"class":198,"line":925},[196,10086,637],{"class":481},[196,10088,10089],{"class":321}," enrichers",[196,10091,508],{"class":325},[196,10093,1955],{"class":332},[196,10095,10096,10099,10101],{"class":198,"line":1261},[196,10097,10098],{"class":317},"    createUserAgentEnricher",[196,10100,1345],{"class":332},[196,10102,353],{"class":325},[196,10104,10105,10108,10110],{"class":198,"line":1271},[196,10106,10107],{"class":317},"    createGeoEnricher",[196,10109,1345],{"class":332},[196,10111,353],{"class":325},[196,10113,10114,10117,10119],{"class":198,"line":1281},[196,10115,10116],{"class":317},"    createRequestSizeEnricher",[196,10118,1345],{"class":332},[196,10120,353],{"class":325},[196,10122,10123,10126,10128],{"class":198,"line":1287},[196,10124,10125],{"class":317},"    createTraceContextEnricher",[196,10127,1345],{"class":332},[196,10129,353],{"class":325},[196,10131,10132],{"class":198,"line":2827},[196,10133,10134],{"class":332},"  ]\n",[196,10136,10137],{"class":198,"line":2853},[196,10138,474],{"emptyLinePlaceholder":473},[196,10140,10141,10143,10145,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169],{"class":198,"line":2859},[196,10142,8908],{"class":321},[196,10144,658],{"class":325},[196,10146,8913],{"class":321},[196,10148,658],{"class":325},[196,10150,8918],{"class":317},[196,10152,322],{"class":332},[196,10154,342],{"class":325},[196,10156,1808],{"class":205},[196,10158,342],{"class":325},[196,10160,490],{"class":325},[196,10162,616],{"class":325},[196,10164,3989],{"class":619},[196,10166,627],{"class":325},[196,10168,630],{"class":481},[196,10170,364],{"class":325},[196,10172,10173,10176,10178,10180,10183,10186,10188,10190,10193,10195,10197],{"class":198,"line":2864},[196,10174,10175],{"class":310},"    for",[196,10177,616],{"class":332},[196,10179,3592],{"class":481},[196,10181,10182],{"class":321}," enricher",[196,10184,10185],{"class":325}," of",[196,10187,10089],{"class":321},[196,10189,903],{"class":332},[196,10191,10192],{"class":317},"enricher",[196,10194,322],{"class":332},[196,10196,3989],{"class":321},[196,10198,413],{"class":332},[196,10200,10201,10203],{"class":198,"line":2869},[196,10202,5197],{"class":325},[196,10204,413],{"class":332},[196,10206,10207,10209],{"class":198,"line":3346},[196,10208,410],{"class":325},[196,10210,413],{"class":321},[185,10212,10214],{"className":300,"code":10213,"filename":9033,"language":303,"meta":191,"style":191},"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",[193,10215,10216,10234,10257,10261,10284,10288,10312,10326,10342,10366,10392,10396],{"__ignoreMap":191},[196,10217,10218,10220,10222,10224,10226,10228,10230,10232],{"class":198,"line":199},[196,10219,448],{"class":310},[196,10221,451],{"class":325},[196,10223,454],{"class":321},[196,10225,457],{"class":325},[196,10227,460],{"class":310},[196,10229,385],{"class":325},[196,10231,465],{"class":205},[196,10233,468],{"class":325},[196,10235,10236,10238,10240,10242,10244,10247,10249,10251,10253,10255],{"class":198,"line":329},[196,10237,448],{"class":310},[196,10239,451],{"class":325},[196,10241,3836],{"class":321},[196,10243,490],{"class":325},[196,10245,10246],{"class":321}," createGeoEnricher",[196,10248,457],{"class":325},[196,10250,460],{"class":310},[196,10252,385],{"class":325},[196,10254,3845],{"class":205},[196,10256,468],{"class":325},[196,10258,10259],{"class":198,"line":356},[196,10260,474],{"emptyLinePlaceholder":473},[196,10262,10263,10265,10268,10270,10272,10275,10277,10279,10281],{"class":198,"line":367},[196,10264,3592],{"class":481},[196,10266,10267],{"class":321}," enrichers ",[196,10269,606],{"class":325},[196,10271,339],{"class":321},[196,10273,10274],{"class":317},"createUserAgentEnricher",[196,10276,1345],{"class":321},[196,10278,490],{"class":325},[196,10280,10246],{"class":317},[196,10282,10283],{"class":321},"()]\n",[196,10285,10286],{"class":198,"line":377},[196,10287,474],{"emptyLinePlaceholder":473},[196,10289,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310],{"class":198,"line":395},[196,10291,311],{"class":310},[196,10293,482],{"class":481},[196,10295,451],{"class":325},[196,10297,487],{"class":321},[196,10299,490],{"class":325},[196,10301,9072],{"class":321},[196,10303,410],{"class":325},[196,10305,508],{"class":325},[196,10307,454],{"class":317},[196,10309,322],{"class":321},[196,10311,326],{"class":325},[196,10313,10314,10316,10318,10320,10322,10324],{"class":198,"line":401},[196,10315,519],{"class":332},[196,10317,336],{"class":325},[196,10319,385],{"class":325},[196,10321,388],{"class":205},[196,10323,342],{"class":325},[196,10325,353],{"class":325},[196,10327,10328,10330,10332,10334,10336,10338,10340],{"class":198,"line":407},[196,10329,3982],{"class":317},[196,10331,336],{"class":325},[196,10333,616],{"class":325},[196,10335,3989],{"class":619},[196,10337,627],{"class":325},[196,10339,630],{"class":481},[196,10341,364],{"class":325},[196,10343,10344,10346,10348,10350,10352,10354,10356,10358,10360,10362,10364],{"class":198,"line":925},[196,10345,10175],{"class":310},[196,10347,616],{"class":332},[196,10349,3592],{"class":481},[196,10351,10182],{"class":321},[196,10353,10185],{"class":325},[196,10355,10089],{"class":321},[196,10357,903],{"class":332},[196,10359,10192],{"class":317},[196,10361,322],{"class":332},[196,10363,3989],{"class":321},[196,10365,413],{"class":332},[196,10367,10368,10370,10372,10374,10376,10379,10381,10383,10385,10387,10389],{"class":198,"line":1261},[196,10369,4011],{"class":321},[196,10371,658],{"class":325},[196,10373,2077],{"class":321},[196,10375,658],{"class":325},[196,10377,10378],{"class":321},"deploymentId",[196,10380,508],{"class":325},[196,10382,4025],{"class":321},[196,10384,658],{"class":325},[196,10386,1516],{"class":321},[196,10388,658],{"class":325},[196,10390,10391],{"class":321},"VERCEL_DEPLOYMENT_ID\n",[196,10393,10394],{"class":198,"line":1271},[196,10395,404],{"class":325},[196,10397,10398,10400],{"class":198,"line":1281},[196,10399,410],{"class":325},[196,10401,413],{"class":321},[1428,10403,10404,10416],{},[1431,10405,10406],{},[1434,10407,10408,10411,10414],{},[1437,10409,10410],{},"Enricher",[1437,10412,10413],{},"Event Field",[1437,10415,1448],{},[1450,10417,10418,10433,10448,10463],{},[1434,10419,10420,10425,10430],{},[1455,10421,10422],{},[193,10423,10424],{},"createUserAgentEnricher()",[1455,10426,10427],{},[193,10428,10429],{},"userAgent",[1455,10431,10432],{},"Browser, OS, device type from User-Agent header",[1434,10434,10435,10440,10445],{},[1455,10436,10437],{},[193,10438,10439],{},"createGeoEnricher()",[1455,10441,10442],{},[193,10443,10444],{},"geo",[1455,10446,10447],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[1434,10449,10450,10455,10460],{},[1455,10451,10452],{},[193,10453,10454],{},"createRequestSizeEnricher()",[1455,10456,10457],{},[193,10458,10459],{},"requestSize",[1455,10461,10462],{},"Request/response payload sizes from Content-Length",[1434,10464,10465,10470,10475],{},[1455,10466,10467],{},[193,10468,10469],{},"createTraceContextEnricher()",[1455,10471,10472],{},[193,10473,10474],{},"traceContext",[1455,10476,10477],{},"W3C trace context (traceId, spanId) from traceparent header",[173,10479,10480],{},"You can also write custom enrichers to add any derived context:",[185,10482,10485],{"className":300,"code":10483,"filename":10484,"language":303,"meta":191,"style":191},"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",[193,10486,10487,10507,10539,10564,10570],{"__ignoreMap":191},[196,10488,10489,10491,10493,10495,10497,10499,10501,10503,10505],{"class":198,"line":199},[196,10490,311],{"class":310},[196,10492,314],{"class":310},[196,10494,8890],{"class":317},[196,10496,322],{"class":321},[196,10498,322],{"class":325},[196,10500,8897],{"class":619},[196,10502,627],{"class":325},[196,10504,630],{"class":481},[196,10506,364],{"class":325},[196,10508,10509,10511,10513,10515,10517,10519,10521,10523,10525,10527,10529,10531,10533,10535,10537],{"class":198,"line":329},[196,10510,8908],{"class":321},[196,10512,658],{"class":325},[196,10514,8913],{"class":321},[196,10516,658],{"class":325},[196,10518,8918],{"class":317},[196,10520,322],{"class":332},[196,10522,342],{"class":325},[196,10524,1808],{"class":205},[196,10526,342],{"class":325},[196,10528,490],{"class":325},[196,10530,616],{"class":325},[196,10532,3989],{"class":619},[196,10534,627],{"class":325},[196,10536,630],{"class":481},[196,10538,364],{"class":325},[196,10540,10541,10543,10545,10547,10549,10551,10553,10555,10557,10559,10561],{"class":198,"line":356},[196,10542,4011],{"class":321},[196,10544,658],{"class":325},[196,10546,2077],{"class":321},[196,10548,658],{"class":325},[196,10550,10378],{"class":321},[196,10552,508],{"class":325},[196,10554,4025],{"class":321},[196,10556,658],{"class":325},[196,10558,1516],{"class":321},[196,10560,658],{"class":325},[196,10562,10563],{"class":321},"DEPLOYMENT_ID\n",[196,10565,10566,10568],{"class":198,"line":367},[196,10567,5197],{"class":325},[196,10569,413],{"class":332},[196,10571,10572,10574],{"class":198,"line":377},[196,10573,410],{"class":325},[196,10575,413],{"class":321},[173,10577,4122,10578,10581],{},[284,10579,10580],{"href":111},"Enrichers guide"," for full documentation.",[177,10583,7366],{"id":10584},"client-transport",[173,10586,10587,10588,420,10591,10594],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[193,10589,10590],{},"log.info()",[193,10592,10593],{},"log.error()",", etc. calls are automatically sent to the server.",[182,10596,10597,10694],{},[185,10598,10601],{"className":300,"code":10599,"filename":10600,"language":303,"meta":191,"style":191},"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)",[193,10602,10603,10615,10633,10641,10650,10661,10680,10684,10688],{"__ignoreMap":191},[196,10604,10605,10607,10609,10611,10613],{"class":198,"line":199},[196,10606,311],{"class":310},[196,10608,314],{"class":310},[196,10610,318],{"class":317},[196,10612,322],{"class":321},[196,10614,326],{"class":325},[196,10616,10617,10619,10621,10623,10625,10627,10629,10631],{"class":198,"line":329},[196,10618,333],{"class":332},[196,10620,336],{"class":325},[196,10622,339],{"class":321},[196,10624,342],{"class":325},[196,10626,345],{"class":205},[196,10628,342],{"class":325},[196,10630,350],{"class":321},[196,10632,353],{"class":325},[196,10634,10635,10637,10639],{"class":198,"line":356},[196,10636,359],{"class":332},[196,10638,336],{"class":325},[196,10640,364],{"class":325},[196,10642,10643,10646,10648],{"class":198,"line":367},[196,10644,10645],{"class":332},"    transport",[196,10647,336],{"class":325},[196,10649,364],{"class":325},[196,10651,10652,10655,10657,10659],{"class":198,"line":377},[196,10653,10654],{"class":332},"      enabled",[196,10656,336],{"class":325},[196,10658,717],{"class":716},[196,10660,353],{"class":325},[196,10662,10663,10666,10668,10670,10673,10675,10677],{"class":198,"line":395},[196,10664,10665],{"class":332},"      endpoint",[196,10667,336],{"class":325},[196,10669,385],{"class":325},[196,10671,10672],{"class":205},"/api/_evlog/ingest",[196,10674,342],{"class":325},[196,10676,490],{"class":325},[196,10678,10679],{"class":649},"  // default\n",[196,10681,10682],{"class":198,"line":401},[196,10683,398],{"class":325},[196,10685,10686],{"class":198,"line":407},[196,10687,404],{"class":325},[196,10689,10690,10692],{"class":198,"line":925},[196,10691,410],{"class":325},[196,10693,413],{"class":321},[185,10695,10697],{"className":1095,"code":1096,"filename":10696,"language":1098,"meta":191,"style":191},"app/layout.tsx (Next.js)",[193,10698,10699,10717,10721,10753,10759,10777,10785,10813,10821,10829,10837,10845,10849],{"__ignoreMap":191},[196,10700,10701,10703,10705,10707,10709,10711,10713,10715],{"class":198,"line":199},[196,10702,448],{"class":310},[196,10704,451],{"class":325},[196,10706,1109],{"class":321},[196,10708,457],{"class":325},[196,10710,460],{"class":310},[196,10712,385],{"class":325},[196,10714,1118],{"class":205},[196,10716,468],{"class":325},[196,10718,10719],{"class":198,"line":329},[196,10720,474],{"emptyLinePlaceholder":473},[196,10722,10723,10725,10727,10729,10731,10733,10735,10737,10739,10741,10743,10745,10747,10749,10751],{"class":198,"line":356},[196,10724,311],{"class":310},[196,10726,314],{"class":310},[196,10728,1133],{"class":481},[196,10730,1136],{"class":317},[196,10732,1139],{"class":325},[196,10734,1142],{"class":619},[196,10736,1145],{"class":325},[196,10738,451],{"class":325},[196,10740,1142],{"class":332},[196,10742,336],{"class":325},[196,10744,1154],{"class":202},[196,10746,658],{"class":325},[196,10748,1159],{"class":202},[196,10750,1162],{"class":325},[196,10752,364],{"class":325},[196,10754,10755,10757],{"class":198,"line":367},[196,10756,696],{"class":310},[196,10758,1171],{"class":332},[196,10760,10761,10763,10765,10767,10769,10771,10773,10775],{"class":198,"line":377},[196,10762,1176],{"class":325},[196,10764,1179],{"class":332},[196,10766,1182],{"class":481},[196,10768,606],{"class":325},[196,10770,1187],{"class":325},[196,10772,1190],{"class":205},[196,10774,1187],{"class":325},[196,10776,1195],{"class":325},[196,10778,10779,10781,10783],{"class":198,"line":395},[196,10780,1200],{"class":325},[196,10782,1203],{"class":332},[196,10784,1195],{"class":325},[196,10786,10787,10789,10791,10793,10795,10797,10799,10801,10803,10805,10807,10809,10811],{"class":198,"line":401},[196,10788,1210],{"class":325},[196,10790,1092],{"class":202},[196,10792,1215],{"class":481},[196,10794,606],{"class":325},[196,10796,1187],{"class":325},[196,10798,388],{"class":205},[196,10800,1187],{"class":325},[196,10802,1226],{"class":481},[196,10804,1229],{"class":325},[196,10806,1232],{"class":332},[196,10808,336],{"class":325},[196,10810,717],{"class":716},[196,10812,1239],{"class":325},[196,10814,10815,10817,10819],{"class":198,"line":407},[196,10816,1244],{"class":325},[196,10818,1247],{"class":321},[196,10820,1059],{"class":325},[196,10822,10823,10825,10827],{"class":198,"line":925},[196,10824,1254],{"class":325},[196,10826,1092],{"class":202},[196,10828,1195],{"class":325},[196,10830,10831,10833,10835],{"class":198,"line":1261},[196,10832,1264],{"class":325},[196,10834,1203],{"class":332},[196,10836,1195],{"class":325},[196,10838,10839,10841,10843],{"class":198,"line":1271},[196,10840,1274],{"class":325},[196,10842,1179],{"class":332},[196,10844,1195],{"class":325},[196,10846,10847],{"class":198,"line":1281},[196,10848,1284],{"class":332},[196,10850,10851],{"class":198,"line":1287},[196,10852,1059],{"class":325},[729,10854,10856],{"id":10855},"how-it-works","How it works",[10858,10859,10860,10866,10872,10875,10883],"ol",{},[3397,10861,10862,10863],{},"Client calls ",[193,10864,10865],{},"log.info({ action: 'click', button: 'submit' })",[3397,10867,10868,10869,10871],{},"Log is sent to ",[193,10870,10672],{}," via POST",[3397,10873,10874],{},"Server enriches with environment context (service, version, region, etc.)",[3397,10876,10877,10879,10880],{},[193,10878,1792],{}," hook is called with ",[193,10881,10882],{},"source: 'client'",[3397,10884,10885],{},"External services receive the log (Axiom, Loki, etc.)",[931,10887,10888,10889,420,10891,10894,10895,10898],{"color":933,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[193,10890,1459],{},[193,10892,10893],{},"environment",", or ",[193,10896,10897],{},"version"," from the client.",[173,10900,10901,10902,10904],{},"In your drain hook, you can identify client logs by the ",[193,10903,10882],{}," field:",[185,10906,10909],{"className":300,"code":10907,"filename":10908,"language":303,"meta":191,"style":191},"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",[193,10910,10911,10931,10965,10995,11023,11027,11033],{"__ignoreMap":191},[196,10912,10913,10915,10917,10919,10921,10923,10925,10927,10929],{"class":198,"line":199},[196,10914,311],{"class":310},[196,10916,314],{"class":310},[196,10918,8890],{"class":317},[196,10920,322],{"class":321},[196,10922,322],{"class":325},[196,10924,8897],{"class":619},[196,10926,627],{"class":325},[196,10928,630],{"class":481},[196,10930,364],{"class":325},[196,10932,10933,10935,10937,10939,10941,10943,10945,10947,10949,10951,10953,10955,10957,10959,10961,10963],{"class":198,"line":329},[196,10934,8908],{"class":321},[196,10936,658],{"class":325},[196,10938,8913],{"class":321},[196,10940,658],{"class":325},[196,10942,8918],{"class":317},[196,10944,322],{"class":332},[196,10946,342],{"class":325},[196,10948,1792],{"class":205},[196,10950,342],{"class":325},[196,10952,490],{"class":325},[196,10954,2720],{"class":481},[196,10956,616],{"class":325},[196,10958,3989],{"class":619},[196,10960,627],{"class":325},[196,10962,630],{"class":481},[196,10964,364],{"class":325},[196,10966,10967,10969,10971,10973,10975,10977,10979,10981,10984,10986,10989,10991,10993],{"class":198,"line":356},[196,10968,4060],{"class":310},[196,10970,616],{"class":332},[196,10972,3989],{"class":321},[196,10974,658],{"class":325},[196,10976,2077],{"class":321},[196,10978,658],{"class":325},[196,10980,6543],{"class":321},[196,10982,10983],{"class":325}," ===",[196,10985,385],{"class":325},[196,10987,10988],{"class":205},"client",[196,10990,342],{"class":325},[196,10992,903],{"class":332},[196,10994,326],{"class":325},[196,10996,10997,11000,11002,11004,11006,11008,11011,11013,11015,11017,11019,11021],{"class":198,"line":367},[196,10998,10999],{"class":321},"      console",[196,11001,658],{"class":325},[196,11003,1295],{"class":317},[196,11005,322],{"class":332},[196,11007,342],{"class":325},[196,11009,11010],{"class":205},"[CLIENT]",[196,11012,342],{"class":325},[196,11014,490],{"class":325},[196,11016,4075],{"class":321},[196,11018,658],{"class":325},[196,11020,2077],{"class":321},[196,11022,413],{"class":332},[196,11024,11025],{"class":198,"line":377},[196,11026,3358],{"class":325},[196,11028,11029,11031],{"class":198,"line":395},[196,11030,5197],{"class":325},[196,11032,413],{"class":332},[196,11034,11035,11037],{"class":198,"line":401},[196,11036,410],{"class":325},[196,11038,413],{"class":321},[254,11040,11042],{"id":11041},"client-identity","Client Identity",[173,11044,11045,11046,11049],{},"Attach user identity to all client logs with ",[193,11047,11048],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[182,11051,11052,11153],{},[185,11053,11056],{"className":300,"code":11054,"filename":11055,"language":303,"meta":191,"style":191},"// 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)",[193,11057,11058,11063,11102,11106,11132,11137,11141,11146],{"__ignoreMap":191},[196,11059,11060],{"class":198,"line":199},[196,11061,11062],{"class":649},"// After login\n",[196,11064,11065,11068,11070,11072,11075,11077,11079,11082,11084,11086,11089,11091,11093,11096,11098,11100],{"class":198,"line":329},[196,11066,11067],{"class":317},"setIdentity",[196,11069,322],{"class":321},[196,11071,666],{"class":325},[196,11073,11074],{"class":332}," userId",[196,11076,336],{"class":325},[196,11078,385],{"class":325},[196,11080,11081],{"class":205},"usr_123",[196,11083,342],{"class":325},[196,11085,490],{"class":325},[196,11087,11088],{"class":332}," orgId",[196,11090,336],{"class":325},[196,11092,385],{"class":325},[196,11094,11095],{"class":205},"org_456",[196,11097,342],{"class":325},[196,11099,457],{"class":325},[196,11101,413],{"class":321},[196,11103,11104],{"class":198,"line":356},[196,11105,474],{"emptyLinePlaceholder":473},[196,11107,11108,11110,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130],{"class":198,"line":367},[196,11109,1295],{"class":321},[196,11111,658],{"class":325},[196,11113,933],{"class":317},[196,11115,322],{"class":321},[196,11117,666],{"class":325},[196,11119,839],{"class":332},[196,11121,336],{"class":325},[196,11123,385],{"class":325},[196,11125,846],{"class":205},[196,11127,342],{"class":325},[196,11129,457],{"class":325},[196,11131,413],{"class":321},[196,11133,11134],{"class":198,"line":377},[196,11135,11136],{"class":649},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[196,11138,11139],{"class":198,"line":395},[196,11140,474],{"emptyLinePlaceholder":473},[196,11142,11143],{"class":198,"line":401},[196,11144,11145],{"class":649},"// After logout\n",[196,11147,11148,11151],{"class":198,"line":407},[196,11149,11150],{"class":317},"clearIdentity",[196,11152,824],{"class":321},[185,11154,11156],{"className":300,"code":11155,"filename":142,"language":303,"meta":191,"style":191},"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",[193,11157,11158,11186,11190,11194,11228,11232,11258,11262,11266,11270],{"__ignoreMap":191},[196,11159,11160,11162,11164,11167,11169,11172,11174,11176,11178,11180,11182,11184],{"class":198,"line":199},[196,11161,448],{"class":310},[196,11163,451],{"class":325},[196,11165,11166],{"class":321}," setIdentity",[196,11168,490],{"class":325},[196,11170,11171],{"class":321}," clearIdentity",[196,11173,490],{"class":325},[196,11175,498],{"class":321},[196,11177,457],{"class":325},[196,11179,460],{"class":310},[196,11181,385],{"class":325},[196,11183,1118],{"class":205},[196,11185,468],{"class":325},[196,11187,11188],{"class":198,"line":329},[196,11189,474],{"emptyLinePlaceholder":473},[196,11191,11192],{"class":198,"line":356},[196,11193,11062],{"class":649},[196,11195,11196,11198,11200,11202,11204,11206,11208,11210,11212,11214,11216,11218,11220,11222,11224,11226],{"class":198,"line":367},[196,11197,11067],{"class":317},[196,11199,322],{"class":321},[196,11201,666],{"class":325},[196,11203,11074],{"class":332},[196,11205,336],{"class":325},[196,11207,385],{"class":325},[196,11209,11081],{"class":205},[196,11211,342],{"class":325},[196,11213,490],{"class":325},[196,11215,11088],{"class":332},[196,11217,336],{"class":325},[196,11219,385],{"class":325},[196,11221,11095],{"class":205},[196,11223,342],{"class":325},[196,11225,457],{"class":325},[196,11227,413],{"class":321},[196,11229,11230],{"class":198,"line":377},[196,11231,474],{"emptyLinePlaceholder":473},[196,11233,11234,11236,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256],{"class":198,"line":395},[196,11235,1295],{"class":321},[196,11237,658],{"class":325},[196,11239,933],{"class":317},[196,11241,322],{"class":321},[196,11243,666],{"class":325},[196,11245,839],{"class":332},[196,11247,336],{"class":325},[196,11249,385],{"class":325},[196,11251,846],{"class":205},[196,11253,342],{"class":325},[196,11255,457],{"class":325},[196,11257,413],{"class":321},[196,11259,11260],{"class":198,"line":401},[196,11261,11136],{"class":649},[196,11263,11264],{"class":198,"line":407},[196,11265,474],{"emptyLinePlaceholder":473},[196,11267,11268],{"class":198,"line":925},[196,11269,11145],{"class":649},[196,11271,11272,11274],{"class":198,"line":1261},[196,11273,11150],{"class":317},[196,11275,824],{"class":321},[173,11277,11278,11279,944,11281,11283,11284,658],{},"In Nuxt, ",[193,11280,11067],{},[193,11282,11150],{}," are auto-imported. In Next.js, import them from ",[193,11285,1118],{},[173,11287,11288],{},"Per-event fields override identity fields, so you can always pass explicit values:",[185,11290,11292],{"className":300,"code":11291,"language":303,"meta":191,"style":191},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[193,11293,11294,11316,11343],{"__ignoreMap":191},[196,11295,11296,11298,11300,11302,11304,11306,11308,11310,11312,11314],{"class":198,"line":199},[196,11297,11067],{"class":317},[196,11299,322],{"class":321},[196,11301,666],{"class":325},[196,11303,11074],{"class":332},[196,11305,336],{"class":325},[196,11307,385],{"class":325},[196,11309,11081],{"class":205},[196,11311,342],{"class":325},[196,11313,457],{"class":325},[196,11315,413],{"class":321},[196,11317,11318,11320,11322,11324,11326,11328,11330,11332,11334,11337,11339,11341],{"class":198,"line":329},[196,11319,1295],{"class":321},[196,11321,658],{"class":325},[196,11323,933],{"class":317},[196,11325,322],{"class":321},[196,11327,666],{"class":325},[196,11329,11074],{"class":332},[196,11331,336],{"class":325},[196,11333,385],{"class":325},[196,11335,11336],{"class":205},"usr_admin_override",[196,11338,342],{"class":325},[196,11340,457],{"class":325},[196,11342,413],{"class":321},[196,11344,11345],{"class":198,"line":356},[196,11346,11347],{"class":649},"// -> { userId: 'usr_admin_override', ... }\n",[729,11349,11351],{"id":11350},"syncing-identity-with-auth","Syncing identity with auth",[173,11353,11354],{},"Use a global route middleware to automatically sync identity with your auth state:",[185,11356,11359],{"className":300,"code":11357,"filename":11358,"language":303,"meta":191,"style":191},"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",[193,11360,11361,11378,11398,11402,11420,11465,11474,11481,11486],{"__ignoreMap":191},[196,11362,11363,11365,11367,11370,11372,11374,11376],{"class":198,"line":199},[196,11364,311],{"class":310},[196,11366,314],{"class":310},[196,11368,11369],{"class":317}," defineNuxtRouteMiddleware",[196,11371,322],{"class":321},[196,11373,1345],{"class":325},[196,11375,630],{"class":481},[196,11377,364],{"class":325},[196,11379,11380,11382,11384,11386,11388,11390,11393,11395],{"class":198,"line":329},[196,11381,637],{"class":481},[196,11383,451],{"class":325},[196,11385,669],{"class":321},[196,11387,457],{"class":325},[196,11389,508],{"class":325},[196,11391,11392],{"class":317}," useAuth",[196,11394,6596],{"class":332},[196,11396,11397],{"class":649},"// better-auth, supabase, clerk, etc.\n",[196,11399,11400],{"class":198,"line":356},[196,11401,474],{"emptyLinePlaceholder":473},[196,11403,11404,11407,11409,11411,11413,11416,11418],{"class":198,"line":367},[196,11405,11406],{"class":310},"  if",[196,11408,616],{"class":332},[196,11410,8957],{"class":321},[196,11412,658],{"class":325},[196,11414,11415],{"class":321},"value",[196,11417,903],{"class":332},[196,11419,326],{"class":325},[196,11421,11422,11425,11427,11429,11431,11433,11435,11437,11439,11441,11443,11445,11448,11450,11452,11454,11456,11458,11461,11463],{"class":198,"line":377},[196,11423,11424],{"class":317},"    setIdentity",[196,11426,322],{"class":332},[196,11428,666],{"class":325},[196,11430,11074],{"class":332},[196,11432,336],{"class":325},[196,11434,669],{"class":321},[196,11436,658],{"class":325},[196,11438,11415],{"class":321},[196,11440,658],{"class":325},[196,11442,6333],{"class":321},[196,11444,490],{"class":325},[196,11446,11447],{"class":332}," email",[196,11449,336],{"class":325},[196,11451,669],{"class":321},[196,11453,658],{"class":325},[196,11455,11415],{"class":321},[196,11457,658],{"class":325},[196,11459,11460],{"class":321},"email",[196,11462,457],{"class":325},[196,11464,413],{"class":332},[196,11466,11467,11469,11472],{"class":198,"line":395},[196,11468,5197],{"class":325},[196,11470,11471],{"class":310}," else",[196,11473,364],{"class":325},[196,11475,11476,11479],{"class":198,"line":401},[196,11477,11478],{"class":317},"    clearIdentity",[196,11480,824],{"class":332},[196,11482,11483],{"class":198,"line":407},[196,11484,11485],{"class":325},"  }\n",[196,11487,11488,11490],{"class":198,"line":925},[196,11489,410],{"class":325},[196,11491,413],{"class":321},[931,11493,11495,11505],{"color":933,"icon":11494},"i-lucide-lightbulb",[173,11496,11497,11500,11501,11504],{},[2405,11498,11499],{},"Tip:"," Use Nuxt's ",[193,11502,11503],{},"$production"," override to sample and suppress browser console output in production while keeping full visibility in development:",[185,11506,11508],{"className":300,"code":11507,"filename":302,"language":303,"meta":191,"style":191},"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",[193,11509,11510,11522,11540,11548,11568,11572,11581,11589,11603,11611,11644,11677,11681,11685,11689],{"__ignoreMap":191},[196,11511,11512,11514,11516,11518,11520],{"class":198,"line":199},[196,11513,311],{"class":310},[196,11515,314],{"class":310},[196,11517,318],{"class":317},[196,11519,322],{"class":321},[196,11521,326],{"class":325},[196,11523,11524,11526,11528,11530,11532,11534,11536,11538],{"class":198,"line":329},[196,11525,333],{"class":332},[196,11527,336],{"class":325},[196,11529,339],{"class":321},[196,11531,342],{"class":325},[196,11533,345],{"class":205},[196,11535,342],{"class":325},[196,11537,350],{"class":321},[196,11539,353],{"class":325},[196,11541,11542,11544,11546],{"class":198,"line":356},[196,11543,359],{"class":332},[196,11545,336],{"class":325},[196,11547,364],{"class":325},[196,11549,11550,11552,11554,11556,11558,11560,11562,11564,11566],{"class":198,"line":367},[196,11551,370],{"class":332},[196,11553,336],{"class":325},[196,11555,451],{"class":325},[196,11557,1215],{"class":332},[196,11559,336],{"class":325},[196,11561,385],{"class":325},[196,11563,388],{"class":205},[196,11565,342],{"class":325},[196,11567,1987],{"class":325},[196,11569,11570],{"class":198,"line":377},[196,11571,404],{"class":325},[196,11573,11574,11577,11579],{"class":198,"line":395},[196,11575,11576],{"class":332},"  $production",[196,11578,336],{"class":325},[196,11580,364],{"class":325},[196,11582,11583,11585,11587],{"class":198,"line":401},[196,11584,1960],{"class":332},[196,11586,336],{"class":325},[196,11588,364],{"class":325},[196,11590,11591,11593,11595,11598,11600],{"class":198,"line":407},[196,11592,10999],{"class":332},[196,11594,336],{"class":325},[196,11596,11597],{"class":716}," false",[196,11599,490],{"class":325},[196,11601,11602],{"class":649}," // Suppress browser DevTools console, keep transport\n",[196,11604,11605,11607,11609],{"class":198,"line":925},[196,11606,8527],{"class":332},[196,11608,336],{"class":325},[196,11610,364],{"class":325},[196,11612,11613,11615,11617,11619,11621,11623,11625,11627,11629,11631,11633,11635,11637,11639,11642],{"class":198,"line":1261},[196,11614,8536],{"class":332},[196,11616,336],{"class":325},[196,11618,451],{"class":325},[196,11620,8543],{"class":332},[196,11622,336],{"class":325},[196,11624,6870],{"class":3244},[196,11626,490],{"class":325},[196,11628,8552],{"class":332},[196,11630,336],{"class":325},[196,11632,8400],{"class":3244},[196,11634,490],{"class":325},[196,11636,8561],{"class":332},[196,11638,336],{"class":325},[196,11640,11641],{"class":3244}," 0",[196,11643,1987],{"class":325},[196,11645,11646,11649,11651,11653,11655,11657,11659,11661,11663,11665,11667,11669,11671,11673,11675],{"class":198,"line":1271},[196,11647,11648],{"class":332},"        keep",[196,11650,336],{"class":325},[196,11652,339],{"class":321},[196,11654,666],{"class":325},[196,11656,8796],{"class":332},[196,11658,336],{"class":325},[196,11660,8801],{"class":3244},[196,11662,8804],{"class":325},[196,11664,451],{"class":325},[196,11666,3239],{"class":332},[196,11668,336],{"class":325},[196,11670,8818],{"class":3244},[196,11672,457],{"class":325},[196,11674,350],{"class":321},[196,11676,353],{"class":325},[196,11678,11679],{"class":198,"line":1281},[196,11680,2856],{"class":325},[196,11682,11683],{"class":198,"line":1287},[196,11684,398],{"class":325},[196,11686,11687],{"class":198,"line":2827},[196,11688,404],{"class":325},[196,11690,11691,11693],{"class":198,"line":2853},[196,11692,410],{"class":325},[196,11694,413],{"class":321},[177,11696,11698],{"id":11697},"typescript-configuration","TypeScript Configuration",[173,11700,11701],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[931,11703,11705],{"color":8723,"icon":11704},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[177,11707,11709],{"id":11708},"next-steps","Next Steps",[3394,11711,11712,11717],{},[3397,11713,11714,11716],{},[284,11715,20],{"href":21}," - Learn the core concepts and start using evlog",[3397,11718,11719,11722],{},[284,11720,11721],{"href":143},"Next.js Example"," - Full Next.js App Router example with enrichers, pipeline, and drain",[11724,11725,11726],"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":191,"searchDepth":329,"depth":329,"links":11728},[11729,11732,11745,11752,11755,11756],{"id":179,"depth":329,"text":180,"children":11730},[11731],{"id":256,"depth":356,"text":257},{"id":289,"depth":329,"text":290,"children":11733},[11734,11735,11736,11737,11738,11739,11740,11741,11742,11743,11744],{"id":293,"depth":356,"text":294},{"id":431,"depth":356,"text":142},{"id":1880,"depth":356,"text":1881},{"id":2150,"depth":356,"text":2151},{"id":2427,"depth":356,"text":147},{"id":3042,"depth":356,"text":3043},{"id":3431,"depth":356,"text":152},{"id":4129,"depth":356,"text":157},{"id":4961,"depth":356,"text":162},{"id":5732,"depth":356,"text":5733},{"id":6404,"depth":356,"text":6405},{"id":7119,"depth":329,"text":7120,"children":11746},[11747,11748,11749,11750,11751],{"id":7369,"depth":356,"text":7370},{"id":7774,"depth":356,"text":7775},{"id":8299,"depth":356,"text":7312},{"id":9264,"depth":356,"text":9265},{"id":10000,"depth":356,"text":10001},{"id":10584,"depth":329,"text":7366,"children":11753},[11754],{"id":11041,"depth":356,"text":11042},{"id":11697,"depth":329,"text":11698},{"id":11708,"depth":329,"text":11709},"Install evlog in your Nuxt, Next.js, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[11760],{"label":20,"icon":23,"to":21,"color":1871,"variant":11761},"subtle",{},{"title":15,"icon":18},{"title":168,"description":11757},"JmHyOfpYzFsGjmjmna5DpT-AuOgh9GQdD7Q46WDlf0Q",[11767,11769],{"title":10,"path":11,"stem":12,"description":11768,"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":11770,"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.",1772878747655]