[{"data":1,"prerenderedAt":7057},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":122,"-getting-started-installation-surround":7052},[4,30,55,105],{"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",{"id":123,"title":124,"body":125,"description":7043,"extension":7044,"links":7045,"meta":7048,"navigation":7049,"path":16,"seo":7050,"stem":17,"__hash__":7051},"docs/1.getting-started/2.installation.md","Install evlog",{"type":126,"value":127,"toc":7019},"minimark",[128,132,137,209,213,218,221,337,352,356,363,986,989,1300,1314,1318,1325,1443,1449,1586,1590,1596,1706,1710,1840,1863,1867,1870,2173,2176,2194,2197,2224,2231,2235,2238,2710,2717,2721,2724,2931,2938,2943,2961,3322,3330,3334,3341,3552,3567,3571,3578,3961,3972,3976,3979,4489,4501,4504,4507,4511,4518,4925,4939,4943,4950,5057,5064,5068,5075,5233,5252,5256,5267,5448,5453,5481,5506,5510,5516,5784,5788,5791,5997,6073,6076,6173,6180,6184,6198,6293,6297,6326,6340,6346,6479,6483,6490,6591,6599,6602,6661,6665,6668,6804,6993,6997,7000,7004,7008,7015],[129,130,131],"p",{},"evlog supports multiple environments: Nuxt, Next.js, Nitro, Cloudflare Workers, and standalone TypeScript.",[133,134,136],"h2",{"id":135},"install","Install",[138,139,140,166,181,195],"code-group",{},[141,142,148],"pre",{"className":143,"code":144,"filename":145,"language":146,"meta":147,"style":147},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[149,150,151],"code",{"__ignoreMap":147},[152,153,156,159,163],"span",{"class":154,"line":155},"line",1,[152,157,145],{"class":158},"sBMFI",[152,160,162],{"class":161},"sfazB"," add",[152,164,165],{"class":161}," evlog\n",[141,167,170],{"className":143,"code":168,"filename":169,"language":146,"meta":147,"style":147},"npm install evlog\n","npm",[149,171,172],{"__ignoreMap":147},[152,173,174,176,179],{"class":154,"line":155},[152,175,169],{"class":158},[152,177,178],{"class":161}," install",[152,180,165],{"class":161},[141,182,185],{"className":143,"code":183,"filename":184,"language":146,"meta":147,"style":147},"yarn add evlog\n","yarn",[149,186,187],{"__ignoreMap":147},[152,188,189,191,193],{"class":154,"line":155},[152,190,184],{"class":158},[152,192,162],{"class":161},[152,194,165],{"class":161},[141,196,199],{"className":143,"code":197,"filename":198,"language":146,"meta":147,"style":147},"bun add evlog\n","bun",[149,200,201],{"__ignoreMap":147},[152,202,203,205,207],{"class":154,"line":155},[152,204,198],{"class":158},[152,206,162],{"class":161},[152,208,165],{"class":161},[133,210,212],{"id":211},"setup","Setup",[214,215,217],"h3",{"id":216},"nuxt","Nuxt",[129,219,220],{},"Add evlog to your Nuxt config:",[141,222,227],{"className":223,"code":224,"filename":225,"language":226,"meta":147,"style":147},"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",[149,228,229,250,277,288,298,316,322,328],{"__ignoreMap":147},[152,230,231,235,238,242,246],{"class":154,"line":155},[152,232,234],{"class":233},"s7zQu","export",[152,236,237],{"class":233}," default",[152,239,241],{"class":240},"s2Zo4"," defineNuxtConfig",[152,243,245],{"class":244},"sTEyZ","(",[152,247,249],{"class":248},"sMK4o","{\n",[152,251,253,257,260,263,266,269,271,274],{"class":154,"line":252},2,[152,254,256],{"class":255},"swJcz","  modules",[152,258,259],{"class":248},":",[152,261,262],{"class":244}," [",[152,264,265],{"class":248},"'",[152,267,268],{"class":161},"evlog/nuxt",[152,270,265],{"class":248},[152,272,273],{"class":244},"]",[152,275,276],{"class":248},",\n",[152,278,280,283,285],{"class":154,"line":279},3,[152,281,282],{"class":255},"  evlog",[152,284,259],{"class":248},[152,286,287],{"class":248}," {\n",[152,289,291,294,296],{"class":154,"line":290},4,[152,292,293],{"class":255},"    env",[152,295,259],{"class":248},[152,297,287],{"class":248},[152,299,301,304,306,309,312,314],{"class":154,"line":300},5,[152,302,303],{"class":255},"      service",[152,305,259],{"class":248},[152,307,308],{"class":248}," '",[152,310,311],{"class":161},"my-app",[152,313,265],{"class":248},[152,315,276],{"class":248},[152,317,319],{"class":154,"line":318},6,[152,320,321],{"class":248},"    },\n",[152,323,325],{"class":154,"line":324},7,[152,326,327],{"class":248},"  },\n",[152,329,331,334],{"class":154,"line":330},8,[152,332,333],{"class":248},"}",[152,335,336],{"class":244},")\n",[129,338,339,340,343,344,347,348,351],{},"That's it. ",[149,341,342],{},"useLogger",", ",[149,345,346],{},"createError",", and ",[149,349,350],{},"parseError"," are auto-imported.",[214,353,355],{"id":354},"nextjs-app-router","Next.js (App Router)",[129,357,358,359,362],{},"For Next.js route handlers, use ",[149,360,361],{},"createRequestLogger"," and emit once at the end of the request.",[141,364,367],{"className":223,"code":365,"filename":366,"language":226,"meta":147,"style":147},"import type { NextRequest } from 'next/server'\nimport { NextResponse } from 'next/server'\nimport { createRequestLogger, initLogger, parseError } from 'evlog'\n\nlet initialized = false\n\nfunction ensureInit() {\n  if (initialized) return\n  initLogger({ env: { service: 'next-app' } })\n  initialized = true\n}\n\nexport function withEvlog(handler: (ctx: {\n  request: NextRequest\n  log: ReturnType\u003Ctypeof createRequestLogger>\n}) => Promise\u003CResponse> | Response) {\n  return async (request: NextRequest) => {\n    ensureInit()\n    const log = createRequestLogger({\n      method: request.method,\n      path: request.nextUrl.pathname,\n    })\n\n    try {\n      const response = await handler({ request, log })\n      log.emit({ status: response.status })\n      return response\n    } catch (error) {\n      const parsed = parseError(error)\n      const status = parsed.status ?? 500\n      log.error(error as Error)\n      log.emit({ status, _forceKeep: true })\n      return NextResponse.json(parsed, { status })\n    }\n  }\n}\n","lib/evlog.ts",[149,368,369,397,416,447,453,469,473,486,503,539,551,557,562,590,601,620,652,676,685,702,721,743,751,756,764,795,826,835,852,870,892,913,942,969,975,981],{"__ignoreMap":147},[152,370,371,374,377,380,383,386,389,391,394],{"class":154,"line":155},[152,372,373],{"class":233},"import",[152,375,376],{"class":233}," type",[152,378,379],{"class":248}," {",[152,381,382],{"class":244}," NextRequest",[152,384,385],{"class":248}," }",[152,387,388],{"class":233}," from",[152,390,308],{"class":248},[152,392,393],{"class":161},"next/server",[152,395,396],{"class":248},"'\n",[152,398,399,401,403,406,408,410,412,414],{"class":154,"line":252},[152,400,373],{"class":233},[152,402,379],{"class":248},[152,404,405],{"class":244}," NextResponse",[152,407,385],{"class":248},[152,409,388],{"class":233},[152,411,308],{"class":248},[152,413,393],{"class":161},[152,415,396],{"class":248},[152,417,418,420,422,425,428,431,433,436,438,440,442,445],{"class":154,"line":279},[152,419,373],{"class":233},[152,421,379],{"class":248},[152,423,424],{"class":244}," createRequestLogger",[152,426,427],{"class":248},",",[152,429,430],{"class":244}," initLogger",[152,432,427],{"class":248},[152,434,435],{"class":244}," parseError",[152,437,385],{"class":248},[152,439,388],{"class":233},[152,441,308],{"class":248},[152,443,444],{"class":161},"evlog",[152,446,396],{"class":248},[152,448,449],{"class":154,"line":290},[152,450,452],{"emptyLinePlaceholder":451},true,"\n",[152,454,455,459,462,465],{"class":154,"line":300},[152,456,458],{"class":457},"spNyl","let",[152,460,461],{"class":244}," initialized ",[152,463,464],{"class":248},"=",[152,466,468],{"class":467},"sfNiH"," false\n",[152,470,471],{"class":154,"line":318},[152,472,452],{"emptyLinePlaceholder":451},[152,474,475,478,481,484],{"class":154,"line":324},[152,476,477],{"class":457},"function",[152,479,480],{"class":240}," ensureInit",[152,482,483],{"class":248},"()",[152,485,287],{"class":248},[152,487,488,491,494,497,500],{"class":154,"line":330},[152,489,490],{"class":233},"  if",[152,492,493],{"class":255}," (",[152,495,496],{"class":244},"initialized",[152,498,499],{"class":255},") ",[152,501,502],{"class":233},"return\n",[152,504,506,509,511,514,517,519,521,524,526,528,531,533,535,537],{"class":154,"line":505},9,[152,507,508],{"class":240},"  initLogger",[152,510,245],{"class":255},[152,512,513],{"class":248},"{",[152,515,516],{"class":255}," env",[152,518,259],{"class":248},[152,520,379],{"class":248},[152,522,523],{"class":255}," service",[152,525,259],{"class":248},[152,527,308],{"class":248},[152,529,530],{"class":161},"next-app",[152,532,265],{"class":248},[152,534,385],{"class":248},[152,536,385],{"class":248},[152,538,336],{"class":255},[152,540,542,545,548],{"class":154,"line":541},10,[152,543,544],{"class":244},"  initialized",[152,546,547],{"class":248}," =",[152,549,550],{"class":467}," true\n",[152,552,554],{"class":154,"line":553},11,[152,555,556],{"class":248},"}\n",[152,558,560],{"class":154,"line":559},12,[152,561,452],{"emptyLinePlaceholder":451},[152,563,565,567,570,573,575,578,580,582,586,588],{"class":154,"line":564},13,[152,566,234],{"class":233},[152,568,569],{"class":457}," function",[152,571,572],{"class":240}," withEvlog",[152,574,245],{"class":248},[152,576,577],{"class":240},"handler",[152,579,259],{"class":248},[152,581,493],{"class":248},[152,583,585],{"class":584},"sHdIc","ctx",[152,587,259],{"class":248},[152,589,287],{"class":248},[152,591,593,596,598],{"class":154,"line":592},14,[152,594,595],{"class":255},"  request",[152,597,259],{"class":248},[152,599,600],{"class":158}," NextRequest\n",[152,602,604,607,609,612,615,617],{"class":154,"line":603},15,[152,605,606],{"class":255},"  log",[152,608,259],{"class":248},[152,610,611],{"class":158}," ReturnType",[152,613,614],{"class":248},"\u003Ctypeof",[152,616,424],{"class":244},[152,618,619],{"class":248},">\n",[152,621,623,626,629,632,635,638,641,644,647,650],{"class":154,"line":622},16,[152,624,625],{"class":248},"})",[152,627,628],{"class":457}," =>",[152,630,631],{"class":158}," Promise",[152,633,634],{"class":248},"\u003C",[152,636,637],{"class":158},"Response",[152,639,640],{"class":248},">",[152,642,643],{"class":248}," |",[152,645,646],{"class":158}," Response",[152,648,649],{"class":248},")",[152,651,287],{"class":248},[152,653,655,658,661,663,666,668,670,672,674],{"class":154,"line":654},17,[152,656,657],{"class":233},"  return",[152,659,660],{"class":457}," async",[152,662,493],{"class":248},[152,664,665],{"class":584},"request",[152,667,259],{"class":248},[152,669,382],{"class":158},[152,671,649],{"class":248},[152,673,628],{"class":457},[152,675,287],{"class":248},[152,677,679,682],{"class":154,"line":678},18,[152,680,681],{"class":240},"    ensureInit",[152,683,684],{"class":255},"()\n",[152,686,688,691,694,696,698,700],{"class":154,"line":687},19,[152,689,690],{"class":457},"    const",[152,692,693],{"class":244}," log",[152,695,547],{"class":248},[152,697,424],{"class":240},[152,699,245],{"class":255},[152,701,249],{"class":248},[152,703,705,708,710,713,716,719],{"class":154,"line":704},20,[152,706,707],{"class":255},"      method",[152,709,259],{"class":248},[152,711,712],{"class":244}," request",[152,714,715],{"class":248},".",[152,717,718],{"class":244},"method",[152,720,276],{"class":248},[152,722,724,727,729,731,733,736,738,741],{"class":154,"line":723},21,[152,725,726],{"class":255},"      path",[152,728,259],{"class":248},[152,730,712],{"class":244},[152,732,715],{"class":248},[152,734,735],{"class":244},"nextUrl",[152,737,715],{"class":248},[152,739,740],{"class":244},"pathname",[152,742,276],{"class":248},[152,744,746,749],{"class":154,"line":745},22,[152,747,748],{"class":248},"    }",[152,750,336],{"class":255},[152,752,754],{"class":154,"line":753},23,[152,755,452],{"emptyLinePlaceholder":451},[152,757,759,762],{"class":154,"line":758},24,[152,760,761],{"class":233},"    try",[152,763,287],{"class":248},[152,765,767,770,773,775,778,781,783,785,787,789,791,793],{"class":154,"line":766},25,[152,768,769],{"class":457},"      const",[152,771,772],{"class":244}," response",[152,774,547],{"class":248},[152,776,777],{"class":233}," await",[152,779,780],{"class":240}," handler",[152,782,245],{"class":255},[152,784,513],{"class":248},[152,786,712],{"class":244},[152,788,427],{"class":248},[152,790,693],{"class":244},[152,792,385],{"class":248},[152,794,336],{"class":255},[152,796,798,801,803,806,808,810,813,815,817,819,822,824],{"class":154,"line":797},26,[152,799,800],{"class":244},"      log",[152,802,715],{"class":248},[152,804,805],{"class":240},"emit",[152,807,245],{"class":255},[152,809,513],{"class":248},[152,811,812],{"class":255}," status",[152,814,259],{"class":248},[152,816,772],{"class":244},[152,818,715],{"class":248},[152,820,821],{"class":244},"status",[152,823,385],{"class":248},[152,825,336],{"class":255},[152,827,829,832],{"class":154,"line":828},27,[152,830,831],{"class":233},"      return",[152,833,834],{"class":244}," response\n",[152,836,838,840,843,845,848,850],{"class":154,"line":837},28,[152,839,748],{"class":248},[152,841,842],{"class":233}," catch",[152,844,493],{"class":255},[152,846,847],{"class":244},"error",[152,849,499],{"class":255},[152,851,249],{"class":248},[152,853,855,857,860,862,864,866,868],{"class":154,"line":854},29,[152,856,769],{"class":457},[152,858,859],{"class":244}," parsed",[152,861,547],{"class":248},[152,863,435],{"class":240},[152,865,245],{"class":255},[152,867,847],{"class":244},[152,869,336],{"class":255},[152,871,873,875,877,879,881,883,885,888],{"class":154,"line":872},30,[152,874,769],{"class":457},[152,876,812],{"class":244},[152,878,547],{"class":248},[152,880,859],{"class":244},[152,882,715],{"class":248},[152,884,821],{"class":244},[152,886,887],{"class":248}," ??",[152,889,891],{"class":890},"sbssI"," 500\n",[152,893,895,897,899,901,903,905,908,911],{"class":154,"line":894},31,[152,896,800],{"class":244},[152,898,715],{"class":248},[152,900,847],{"class":240},[152,902,245],{"class":255},[152,904,847],{"class":244},[152,906,907],{"class":233}," as",[152,909,910],{"class":158}," Error",[152,912,336],{"class":255},[152,914,916,918,920,922,924,926,928,930,933,935,938,940],{"class":154,"line":915},32,[152,917,800],{"class":244},[152,919,715],{"class":248},[152,921,805],{"class":240},[152,923,245],{"class":255},[152,925,513],{"class":248},[152,927,812],{"class":244},[152,929,427],{"class":248},[152,931,932],{"class":255}," _forceKeep",[152,934,259],{"class":248},[152,936,937],{"class":467}," true",[152,939,385],{"class":248},[152,941,336],{"class":255},[152,943,945,947,949,951,954,956,959,961,963,965,967],{"class":154,"line":944},33,[152,946,831],{"class":233},[152,948,405],{"class":244},[152,950,715],{"class":248},[152,952,953],{"class":240},"json",[152,955,245],{"class":255},[152,957,958],{"class":244},"parsed",[152,960,427],{"class":248},[152,962,379],{"class":248},[152,964,812],{"class":244},[152,966,385],{"class":248},[152,968,336],{"class":255},[152,970,972],{"class":154,"line":971},34,[152,973,974],{"class":248},"    }\n",[152,976,978],{"class":154,"line":977},35,[152,979,980],{"class":248},"  }\n",[152,982,984],{"class":154,"line":983},36,[152,985,556],{"class":248},[129,987,988],{},"Use it in route handlers:",[141,990,993],{"className":223,"code":991,"filename":992,"language":226,"meta":147,"style":147},"import { NextResponse } from 'next/server'\nimport { createError } from 'evlog'\nimport { withEvlog } from '@/lib/evlog'\n\nexport const POST = withEvlog(async ({ request, log }) => {\n  const body = await request.json()\n  log.set({ checkout: { productId: body.productId } })\n\n  if (!body.productId) {\n    throw createError({\n      message: 'Missing product',\n      status: 400,\n      why: 'No productId in request body',\n      fix: 'Send { \"productId\": \"sku_123\" }',\n    })\n  }\n\n  return NextResponse.json({ ok: true }, { status: 201 })\n})\n","app/api/checkout/route.ts",[149,994,995,1013,1032,1051,1055,1090,1110,1148,1152,1172,1183,1199,1211,1227,1243,1249,1253,1257,1294],{"__ignoreMap":147},[152,996,997,999,1001,1003,1005,1007,1009,1011],{"class":154,"line":155},[152,998,373],{"class":233},[152,1000,379],{"class":248},[152,1002,405],{"class":244},[152,1004,385],{"class":248},[152,1006,388],{"class":233},[152,1008,308],{"class":248},[152,1010,393],{"class":161},[152,1012,396],{"class":248},[152,1014,1015,1017,1019,1022,1024,1026,1028,1030],{"class":154,"line":252},[152,1016,373],{"class":233},[152,1018,379],{"class":248},[152,1020,1021],{"class":244}," createError",[152,1023,385],{"class":248},[152,1025,388],{"class":233},[152,1027,308],{"class":248},[152,1029,444],{"class":161},[152,1031,396],{"class":248},[152,1033,1034,1036,1038,1040,1042,1044,1046,1049],{"class":154,"line":279},[152,1035,373],{"class":233},[152,1037,379],{"class":248},[152,1039,572],{"class":244},[152,1041,385],{"class":248},[152,1043,388],{"class":233},[152,1045,308],{"class":248},[152,1047,1048],{"class":161},"@/lib/evlog",[152,1050,396],{"class":248},[152,1052,1053],{"class":154,"line":290},[152,1054,452],{"emptyLinePlaceholder":451},[152,1056,1057,1059,1062,1065,1067,1069,1071,1074,1077,1079,1081,1083,1086,1088],{"class":154,"line":300},[152,1058,234],{"class":233},[152,1060,1061],{"class":457}," const",[152,1063,1064],{"class":244}," POST ",[152,1066,464],{"class":248},[152,1068,572],{"class":240},[152,1070,245],{"class":244},[152,1072,1073],{"class":457},"async",[152,1075,1076],{"class":248}," ({",[152,1078,712],{"class":584},[152,1080,427],{"class":248},[152,1082,693],{"class":584},[152,1084,1085],{"class":248}," })",[152,1087,628],{"class":457},[152,1089,287],{"class":248},[152,1091,1092,1095,1098,1100,1102,1104,1106,1108],{"class":154,"line":318},[152,1093,1094],{"class":457},"  const",[152,1096,1097],{"class":244}," body",[152,1099,547],{"class":248},[152,1101,777],{"class":233},[152,1103,712],{"class":244},[152,1105,715],{"class":248},[152,1107,953],{"class":240},[152,1109,684],{"class":255},[152,1111,1112,1114,1116,1119,1121,1123,1126,1128,1130,1133,1135,1137,1139,1142,1144,1146],{"class":154,"line":324},[152,1113,606],{"class":244},[152,1115,715],{"class":248},[152,1117,1118],{"class":240},"set",[152,1120,245],{"class":255},[152,1122,513],{"class":248},[152,1124,1125],{"class":255}," checkout",[152,1127,259],{"class":248},[152,1129,379],{"class":248},[152,1131,1132],{"class":255}," productId",[152,1134,259],{"class":248},[152,1136,1097],{"class":244},[152,1138,715],{"class":248},[152,1140,1141],{"class":244},"productId",[152,1143,385],{"class":248},[152,1145,385],{"class":248},[152,1147,336],{"class":255},[152,1149,1150],{"class":154,"line":330},[152,1151,452],{"emptyLinePlaceholder":451},[152,1153,1154,1156,1158,1161,1164,1166,1168,1170],{"class":154,"line":505},[152,1155,490],{"class":233},[152,1157,493],{"class":255},[152,1159,1160],{"class":248},"!",[152,1162,1163],{"class":244},"body",[152,1165,715],{"class":248},[152,1167,1141],{"class":244},[152,1169,499],{"class":255},[152,1171,249],{"class":248},[152,1173,1174,1177,1179,1181],{"class":154,"line":541},[152,1175,1176],{"class":233},"    throw",[152,1178,1021],{"class":240},[152,1180,245],{"class":255},[152,1182,249],{"class":248},[152,1184,1185,1188,1190,1192,1195,1197],{"class":154,"line":553},[152,1186,1187],{"class":255},"      message",[152,1189,259],{"class":248},[152,1191,308],{"class":248},[152,1193,1194],{"class":161},"Missing product",[152,1196,265],{"class":248},[152,1198,276],{"class":248},[152,1200,1201,1204,1206,1209],{"class":154,"line":559},[152,1202,1203],{"class":255},"      status",[152,1205,259],{"class":248},[152,1207,1208],{"class":890}," 400",[152,1210,276],{"class":248},[152,1212,1213,1216,1218,1220,1223,1225],{"class":154,"line":564},[152,1214,1215],{"class":255},"      why",[152,1217,259],{"class":248},[152,1219,308],{"class":248},[152,1221,1222],{"class":161},"No productId in request body",[152,1224,265],{"class":248},[152,1226,276],{"class":248},[152,1228,1229,1232,1234,1236,1239,1241],{"class":154,"line":592},[152,1230,1231],{"class":255},"      fix",[152,1233,259],{"class":248},[152,1235,308],{"class":248},[152,1237,1238],{"class":161},"Send { \"productId\": \"sku_123\" }",[152,1240,265],{"class":248},[152,1242,276],{"class":248},[152,1244,1245,1247],{"class":154,"line":603},[152,1246,748],{"class":248},[152,1248,336],{"class":255},[152,1250,1251],{"class":154,"line":622},[152,1252,980],{"class":248},[152,1254,1255],{"class":154,"line":654},[152,1256,452],{"emptyLinePlaceholder":451},[152,1258,1259,1261,1263,1265,1267,1269,1271,1274,1276,1278,1281,1283,1285,1287,1290,1292],{"class":154,"line":678},[152,1260,657],{"class":233},[152,1262,405],{"class":244},[152,1264,715],{"class":248},[152,1266,953],{"class":240},[152,1268,245],{"class":255},[152,1270,513],{"class":248},[152,1272,1273],{"class":255}," ok",[152,1275,259],{"class":248},[152,1277,937],{"class":467},[152,1279,1280],{"class":248}," },",[152,1282,379],{"class":248},[152,1284,812],{"class":255},[152,1286,259],{"class":248},[152,1288,1289],{"class":890}," 201",[152,1291,385],{"class":248},[152,1293,336],{"class":255},[152,1295,1296,1298],{"class":154,"line":687},[152,1297,333],{"class":248},[152,1299,336],{"class":244},[1301,1302,1305,1306,1313],"callout",{"color":1303,"icon":1304},"neutral","i-lucide-arrow-right","See the full ",[1307,1308,1312],"a",{"href":1309,"rel":1310},"https://github.com/HugoRCD/evlog/tree/main/examples/next",[1311],"nofollow","next example"," for a complete working project.",[214,1315,1317],{"id":1316},"nitro-v3","Nitro v3",[129,1319,1320,1321,1324],{},"Register evlog as a Nitro module using the ",[149,1322,1323],{},"nitro"," package:",[141,1326,1329],{"className":223,"code":1327,"filename":1328,"language":226,"meta":147,"style":147},"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",[149,1330,1331,1350,1367,1371,1383,1392,1401,1424,1430,1437],{"__ignoreMap":147},[152,1332,1333,1335,1337,1340,1342,1344,1346,1348],{"class":154,"line":155},[152,1334,373],{"class":233},[152,1336,379],{"class":248},[152,1338,1339],{"class":244}," defineConfig",[152,1341,385],{"class":248},[152,1343,388],{"class":233},[152,1345,308],{"class":248},[152,1347,1323],{"class":161},[152,1349,396],{"class":248},[152,1351,1352,1354,1357,1360,1362,1365],{"class":154,"line":252},[152,1353,373],{"class":233},[152,1355,1356],{"class":244}," evlog ",[152,1358,1359],{"class":233},"from",[152,1361,308],{"class":248},[152,1363,1364],{"class":161},"evlog/nitro/v3",[152,1366,396],{"class":248},[152,1368,1369],{"class":154,"line":279},[152,1370,452],{"emptyLinePlaceholder":451},[152,1372,1373,1375,1377,1379,1381],{"class":154,"line":290},[152,1374,234],{"class":233},[152,1376,237],{"class":233},[152,1378,1339],{"class":240},[152,1380,245],{"class":244},[152,1382,249],{"class":248},[152,1384,1385,1387,1389],{"class":154,"line":300},[152,1386,256],{"class":255},[152,1388,259],{"class":248},[152,1390,1391],{"class":244}," [\n",[152,1393,1394,1397,1399],{"class":154,"line":318},[152,1395,1396],{"class":240},"    evlog",[152,1398,245],{"class":244},[152,1400,249],{"class":248},[152,1402,1403,1406,1408,1410,1412,1414,1416,1419,1421],{"class":154,"line":324},[152,1404,1405],{"class":255},"      env",[152,1407,259],{"class":248},[152,1409,379],{"class":248},[152,1411,523],{"class":255},[152,1413,259],{"class":248},[152,1415,308],{"class":248},[152,1417,1418],{"class":161},"my-api",[152,1420,265],{"class":248},[152,1422,1423],{"class":248}," },\n",[152,1425,1426,1428],{"class":154,"line":330},[152,1427,748],{"class":248},[152,1429,336],{"class":244},[152,1431,1432,1435],{"class":154,"line":505},[152,1433,1434],{"class":244},"  ]",[152,1436,276],{"class":248},[152,1438,1439,1441],{"class":154,"line":541},[152,1440,333],{"class":248},[152,1442,336],{"class":244},[129,1444,1445,1446,1448],{},"Then use ",[149,1447,342],{}," in your routes:",[141,1450,1453],{"className":223,"code":1451,"filename":1452,"language":226,"meta":147,"style":147},"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",[149,1454,1455,1475,1494,1498,1521,1537,1565,1580],{"__ignoreMap":147},[152,1456,1457,1459,1461,1464,1466,1468,1470,1473],{"class":154,"line":155},[152,1458,373],{"class":233},[152,1460,379],{"class":248},[152,1462,1463],{"class":244}," defineHandler",[152,1465,385],{"class":248},[152,1467,388],{"class":233},[152,1469,308],{"class":248},[152,1471,1472],{"class":161},"nitro/h3",[152,1474,396],{"class":248},[152,1476,1477,1479,1481,1484,1486,1488,1490,1492],{"class":154,"line":252},[152,1478,373],{"class":233},[152,1480,379],{"class":248},[152,1482,1483],{"class":244}," useLogger",[152,1485,385],{"class":248},[152,1487,388],{"class":233},[152,1489,308],{"class":248},[152,1491,1364],{"class":161},[152,1493,396],{"class":248},[152,1495,1496],{"class":154,"line":279},[152,1497,452],{"emptyLinePlaceholder":451},[152,1499,1500,1502,1504,1506,1508,1510,1512,1515,1517,1519],{"class":154,"line":290},[152,1501,234],{"class":233},[152,1503,237],{"class":233},[152,1505,1463],{"class":240},[152,1507,245],{"class":244},[152,1509,1073],{"class":457},[152,1511,493],{"class":248},[152,1513,1514],{"class":584},"event",[152,1516,649],{"class":248},[152,1518,628],{"class":457},[152,1520,287],{"class":248},[152,1522,1523,1525,1527,1529,1531,1533,1535],{"class":154,"line":300},[152,1524,1094],{"class":457},[152,1526,693],{"class":244},[152,1528,547],{"class":248},[152,1530,1483],{"class":240},[152,1532,245],{"class":255},[152,1534,1514],{"class":244},[152,1536,336],{"class":255},[152,1538,1539,1541,1543,1545,1547,1549,1552,1554,1556,1559,1561,1563],{"class":154,"line":318},[152,1540,606],{"class":244},[152,1542,715],{"class":248},[152,1544,1118],{"class":240},[152,1546,245],{"class":255},[152,1548,513],{"class":248},[152,1550,1551],{"class":255}," action",[152,1553,259],{"class":248},[152,1555,308],{"class":248},[152,1557,1558],{"class":161},"hello",[152,1560,265],{"class":248},[152,1562,385],{"class":248},[152,1564,336],{"class":255},[152,1566,1567,1569,1571,1573,1575,1577],{"class":154,"line":324},[152,1568,657],{"class":233},[152,1570,379],{"class":248},[152,1572,1273],{"class":255},[152,1574,259],{"class":248},[152,1576,937],{"class":467},[152,1578,1579],{"class":248}," }\n",[152,1581,1582,1584],{"class":154,"line":330},[152,1583,333],{"class":248},[152,1585,336],{"class":244},[214,1587,1589],{"id":1588},"nitro-v2","Nitro v2",[129,1591,1592,1593,259],{},"Same approach with ",[149,1594,1595],{},"nitropack",[141,1597,1599],{"className":223,"code":1598,"filename":1328,"language":226,"meta":147,"style":147},"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",[149,1600,1601,1621,1636,1640,1652,1660,1668,1688,1694,1700],{"__ignoreMap":147},[152,1602,1603,1605,1607,1610,1612,1614,1616,1619],{"class":154,"line":155},[152,1604,373],{"class":233},[152,1606,379],{"class":248},[152,1608,1609],{"class":244}," defineNitroConfig",[152,1611,385],{"class":248},[152,1613,388],{"class":233},[152,1615,308],{"class":248},[152,1617,1618],{"class":161},"nitropack/config",[152,1620,396],{"class":248},[152,1622,1623,1625,1627,1629,1631,1634],{"class":154,"line":252},[152,1624,373],{"class":233},[152,1626,1356],{"class":244},[152,1628,1359],{"class":233},[152,1630,308],{"class":248},[152,1632,1633],{"class":161},"evlog/nitro",[152,1635,396],{"class":248},[152,1637,1638],{"class":154,"line":279},[152,1639,452],{"emptyLinePlaceholder":451},[152,1641,1642,1644,1646,1648,1650],{"class":154,"line":290},[152,1643,234],{"class":233},[152,1645,237],{"class":233},[152,1647,1609],{"class":240},[152,1649,245],{"class":244},[152,1651,249],{"class":248},[152,1653,1654,1656,1658],{"class":154,"line":300},[152,1655,256],{"class":255},[152,1657,259],{"class":248},[152,1659,1391],{"class":244},[152,1661,1662,1664,1666],{"class":154,"line":318},[152,1663,1396],{"class":240},[152,1665,245],{"class":244},[152,1667,249],{"class":248},[152,1669,1670,1672,1674,1676,1678,1680,1682,1684,1686],{"class":154,"line":324},[152,1671,1405],{"class":255},[152,1673,259],{"class":248},[152,1675,379],{"class":248},[152,1677,523],{"class":255},[152,1679,259],{"class":248},[152,1681,308],{"class":248},[152,1683,1418],{"class":161},[152,1685,265],{"class":248},[152,1687,1423],{"class":248},[152,1689,1690,1692],{"class":154,"line":330},[152,1691,748],{"class":248},[152,1693,336],{"class":244},[152,1695,1696,1698],{"class":154,"line":505},[152,1697,1434],{"class":244},[152,1699,276],{"class":248},[152,1701,1702,1704],{"class":154,"line":541},[152,1703,333],{"class":248},[152,1705,336],{"class":244},[129,1707,1445,1708,1448],{},[149,1709,342],{},[141,1711,1713],{"className":223,"code":1712,"filename":1452,"language":226,"meta":147,"style":147},"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",[149,1714,1715,1734,1752,1756,1778,1794,1820,1834],{"__ignoreMap":147},[152,1716,1717,1719,1721,1724,1726,1728,1730,1732],{"class":154,"line":155},[152,1718,373],{"class":233},[152,1720,379],{"class":248},[152,1722,1723],{"class":244}," defineEventHandler",[152,1725,385],{"class":248},[152,1727,388],{"class":233},[152,1729,308],{"class":248},[152,1731,214],{"class":161},[152,1733,396],{"class":248},[152,1735,1736,1738,1740,1742,1744,1746,1748,1750],{"class":154,"line":252},[152,1737,373],{"class":233},[152,1739,379],{"class":248},[152,1741,1483],{"class":244},[152,1743,385],{"class":248},[152,1745,388],{"class":233},[152,1747,308],{"class":248},[152,1749,1633],{"class":161},[152,1751,396],{"class":248},[152,1753,1754],{"class":154,"line":279},[152,1755,452],{"emptyLinePlaceholder":451},[152,1757,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776],{"class":154,"line":290},[152,1759,234],{"class":233},[152,1761,237],{"class":233},[152,1763,1723],{"class":240},[152,1765,245],{"class":244},[152,1767,1073],{"class":457},[152,1769,493],{"class":248},[152,1771,1514],{"class":584},[152,1773,649],{"class":248},[152,1775,628],{"class":457},[152,1777,287],{"class":248},[152,1779,1780,1782,1784,1786,1788,1790,1792],{"class":154,"line":300},[152,1781,1094],{"class":457},[152,1783,693],{"class":244},[152,1785,547],{"class":248},[152,1787,1483],{"class":240},[152,1789,245],{"class":255},[152,1791,1514],{"class":244},[152,1793,336],{"class":255},[152,1795,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818],{"class":154,"line":318},[152,1797,606],{"class":244},[152,1799,715],{"class":248},[152,1801,1118],{"class":240},[152,1803,245],{"class":255},[152,1805,513],{"class":248},[152,1807,1551],{"class":255},[152,1809,259],{"class":248},[152,1811,308],{"class":248},[152,1813,1558],{"class":161},[152,1815,265],{"class":248},[152,1817,385],{"class":248},[152,1819,336],{"class":255},[152,1821,1822,1824,1826,1828,1830,1832],{"class":154,"line":324},[152,1823,657],{"class":233},[152,1825,379],{"class":248},[152,1827,1273],{"class":255},[152,1829,259],{"class":248},[152,1831,937],{"class":467},[152,1833,1579],{"class":248},[152,1835,1836,1838],{"class":154,"line":330},[152,1837,333],{"class":248},[152,1839,336],{"class":244},[1301,1841,1843,1847,1848,1850,1851,1853,1854,1856,1857,1859,1860,1862],{"color":1842,"icon":13},"info",[1844,1845,1846],"strong",{},"Note:"," ",[149,1849,346],{}," is always imported from ",[149,1852,444],{}," regardless of Nitro version. Only the module and ",[149,1855,342],{}," imports differ: ",[149,1858,1364],{}," for v3, ",[149,1861,1633],{}," for v2.",[214,1864,1866],{"id":1865},"cloudflare-workers","Cloudflare Workers",[129,1868,1869],{},"Use the Workers adapter for structured logs and correct platform severity.",[141,1871,1874],{"className":223,"code":1872,"filename":1873,"language":226,"meta":147,"style":147},"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",[149,1875,1876,1901,1905,1914,1936,1942,1946,1954,1975,1991,1995,2001,2029,2066,2092,2098,2112,2130,2153,2161,2165,2169],{"__ignoreMap":147},[152,1877,1878,1880,1882,1885,1887,1890,1892,1894,1896,1899],{"class":154,"line":155},[152,1879,373],{"class":233},[152,1881,379],{"class":248},[152,1883,1884],{"class":244}," initWorkersLogger",[152,1886,427],{"class":248},[152,1888,1889],{"class":244}," createWorkersLogger",[152,1891,385],{"class":248},[152,1893,388],{"class":233},[152,1895,308],{"class":248},[152,1897,1898],{"class":161},"evlog/workers",[152,1900,396],{"class":248},[152,1902,1903],{"class":154,"line":252},[152,1904,452],{"emptyLinePlaceholder":451},[152,1906,1907,1910,1912],{"class":154,"line":279},[152,1908,1909],{"class":240},"initWorkersLogger",[152,1911,245],{"class":244},[152,1913,249],{"class":248},[152,1915,1916,1919,1921,1923,1925,1927,1929,1932,1934],{"class":154,"line":290},[152,1917,1918],{"class":255},"  env",[152,1920,259],{"class":248},[152,1922,379],{"class":248},[152,1924,523],{"class":255},[152,1926,259],{"class":248},[152,1928,308],{"class":248},[152,1930,1931],{"class":161},"edge-api",[152,1933,265],{"class":248},[152,1935,1423],{"class":248},[152,1937,1938,1940],{"class":154,"line":300},[152,1939,333],{"class":248},[152,1941,336],{"class":244},[152,1943,1944],{"class":154,"line":318},[152,1945,452],{"emptyLinePlaceholder":451},[152,1947,1948,1950,1952],{"class":154,"line":324},[152,1949,234],{"class":233},[152,1951,237],{"class":233},[152,1953,287],{"class":248},[152,1955,1956,1959,1962,1964,1966,1968,1971,1973],{"class":154,"line":330},[152,1957,1958],{"class":457},"  async",[152,1960,1961],{"class":255}," fetch",[152,1963,245],{"class":248},[152,1965,665],{"class":584},[152,1967,259],{"class":248},[152,1969,1970],{"class":158}," Request",[152,1972,649],{"class":248},[152,1974,287],{"class":248},[152,1976,1977,1979,1981,1983,1985,1987,1989],{"class":154,"line":505},[152,1978,690],{"class":457},[152,1980,693],{"class":244},[152,1982,547],{"class":248},[152,1984,1889],{"class":240},[152,1986,245],{"class":255},[152,1988,665],{"class":244},[152,1990,336],{"class":255},[152,1992,1993],{"class":154,"line":541},[152,1994,452],{"emptyLinePlaceholder":451},[152,1996,1997,1999],{"class":154,"line":553},[152,1998,761],{"class":233},[152,2000,287],{"class":248},[152,2002,2003,2005,2007,2009,2011,2013,2016,2018,2020,2023,2025,2027],{"class":154,"line":559},[152,2004,800],{"class":244},[152,2006,715],{"class":248},[152,2008,1118],{"class":240},[152,2010,245],{"class":255},[152,2012,513],{"class":248},[152,2014,2015],{"class":255}," route",[152,2017,259],{"class":248},[152,2019,308],{"class":248},[152,2021,2022],{"class":161},"health",[152,2024,265],{"class":248},[152,2026,385],{"class":248},[152,2028,336],{"class":255},[152,2030,2031,2033,2035,2037,2040,2042,2044,2046,2049,2051,2053,2055,2057,2059,2062,2064],{"class":154,"line":564},[152,2032,769],{"class":457},[152,2034,772],{"class":244},[152,2036,547],{"class":248},[152,2038,2039],{"class":248}," new",[152,2041,646],{"class":240},[152,2043,245],{"class":255},[152,2045,265],{"class":248},[152,2047,2048],{"class":161},"ok",[152,2050,265],{"class":248},[152,2052,427],{"class":248},[152,2054,379],{"class":248},[152,2056,812],{"class":255},[152,2058,259],{"class":248},[152,2060,2061],{"class":890}," 200",[152,2063,385],{"class":248},[152,2065,336],{"class":255},[152,2067,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090],{"class":154,"line":592},[152,2069,800],{"class":244},[152,2071,715],{"class":248},[152,2073,805],{"class":240},[152,2075,245],{"class":255},[152,2077,513],{"class":248},[152,2079,812],{"class":255},[152,2081,259],{"class":248},[152,2083,772],{"class":244},[152,2085,715],{"class":248},[152,2087,821],{"class":244},[152,2089,385],{"class":248},[152,2091,336],{"class":255},[152,2093,2094,2096],{"class":154,"line":603},[152,2095,831],{"class":233},[152,2097,834],{"class":244},[152,2099,2100,2102,2104,2106,2108,2110],{"class":154,"line":622},[152,2101,748],{"class":248},[152,2103,842],{"class":233},[152,2105,493],{"class":255},[152,2107,847],{"class":244},[152,2109,499],{"class":255},[152,2111,249],{"class":248},[152,2113,2114,2116,2118,2120,2122,2124,2126,2128],{"class":154,"line":654},[152,2115,800],{"class":244},[152,2117,715],{"class":248},[152,2119,847],{"class":240},[152,2121,245],{"class":255},[152,2123,847],{"class":244},[152,2125,907],{"class":233},[152,2127,910],{"class":158},[152,2129,336],{"class":255},[152,2131,2132,2134,2136,2138,2140,2142,2144,2146,2149,2151],{"class":154,"line":678},[152,2133,800],{"class":244},[152,2135,715],{"class":248},[152,2137,805],{"class":240},[152,2139,245],{"class":255},[152,2141,513],{"class":248},[152,2143,812],{"class":255},[152,2145,259],{"class":248},[152,2147,2148],{"class":890}," 500",[152,2150,385],{"class":248},[152,2152,336],{"class":255},[152,2154,2155,2158],{"class":154,"line":687},[152,2156,2157],{"class":233},"      throw",[152,2159,2160],{"class":244}," error\n",[152,2162,2163],{"class":154,"line":704},[152,2164,974],{"class":248},[152,2166,2167],{"class":154,"line":723},[152,2168,327],{"class":248},[152,2170,2171],{"class":154,"line":745},[152,2172,556],{"class":248},[129,2174,2175],{},"Disable invocation logs to avoid duplicate request logs:",[141,2177,2182],{"className":2178,"code":2179,"filename":2180,"language":2181,"meta":147,"style":147},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[149,2183,2184,2189],{"__ignoreMap":147},[152,2185,2186],{"class":154,"line":155},[152,2187,2188],{},"[observability.logs]\n",[152,2190,2191],{"class":154,"line":252},[152,2192,2193],{},"invocation_logs = false\n",[129,2195,2196],{},"Notes:",[2198,2199,2200,2211,2217],"ul",{},[2201,2202,2203,2206,2207,2210],"li",{},[149,2204,2205],{},"requestId"," defaults to ",[149,2208,2209],{},"cf-ray"," when available",[2201,2212,2213,2216],{},[149,2214,2215],{},"request.cf"," is included (colo, country, asn) unless disabled",[2201,2218,2219,2220,2223],{},"Use ",[149,2221,2222],{},"headerAllowlist"," to avoid logging sensitive headers",[1301,2225,1305,2226,1313],{"color":1303,"icon":1304},[1307,2227,2230],{"href":2228,"rel":2229},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[1311],"workers example",[214,2232,2234],{"id":2233},"hono","Hono",[129,2236,2237],{},"Use the standalone API to create one wide event per request from a Hono middleware.",[141,2239,2241],{"className":223,"code":2240,"filename":1873,"language":226,"meta":147,"style":147},"import { serve } from '@hono/node-server'\nimport { Hono } from 'hono'\nimport { createRequestLogger, initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'hono-api' },\n})\n\nconst app = new Hono()\n\napp.use('*', async (c, next) => {\n  const startedAt = Date.now()\n  const log = createRequestLogger({ method: c.req.method, path: c.req.path })\n\n  try {\n    await next()\n  } catch (error) {\n    log.error(error as Error)\n    throw error\n  } finally {\n    log.emit({\n      status: c.res.status,\n      duration: Date.now() - startedAt,\n    })\n  }\n})\n\napp.get('/health', (c) => c.json({ ok: true }))\n\nserve({ fetch: app.fetch, port: 3000 })\n",[149,2242,2243,2263,2282,2304,2308,2317,2338,2344,2348,2364,2368,2407,2426,2479,2483,2490,2499,2514,2533,2539,2548,2560,2579,2602,2608,2612,2618,2622,2671,2675],{"__ignoreMap":147},[152,2244,2245,2247,2249,2252,2254,2256,2258,2261],{"class":154,"line":155},[152,2246,373],{"class":233},[152,2248,379],{"class":248},[152,2250,2251],{"class":244}," serve",[152,2253,385],{"class":248},[152,2255,388],{"class":233},[152,2257,308],{"class":248},[152,2259,2260],{"class":161},"@hono/node-server",[152,2262,396],{"class":248},[152,2264,2265,2267,2269,2272,2274,2276,2278,2280],{"class":154,"line":252},[152,2266,373],{"class":233},[152,2268,379],{"class":248},[152,2270,2271],{"class":244}," Hono",[152,2273,385],{"class":248},[152,2275,388],{"class":233},[152,2277,308],{"class":248},[152,2279,2233],{"class":161},[152,2281,396],{"class":248},[152,2283,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302],{"class":154,"line":279},[152,2285,373],{"class":233},[152,2287,379],{"class":248},[152,2289,424],{"class":244},[152,2291,427],{"class":248},[152,2293,430],{"class":244},[152,2295,385],{"class":248},[152,2297,388],{"class":233},[152,2299,308],{"class":248},[152,2301,444],{"class":161},[152,2303,396],{"class":248},[152,2305,2306],{"class":154,"line":290},[152,2307,452],{"emptyLinePlaceholder":451},[152,2309,2310,2313,2315],{"class":154,"line":300},[152,2311,2312],{"class":240},"initLogger",[152,2314,245],{"class":244},[152,2316,249],{"class":248},[152,2318,2319,2321,2323,2325,2327,2329,2331,2334,2336],{"class":154,"line":318},[152,2320,1918],{"class":255},[152,2322,259],{"class":248},[152,2324,379],{"class":248},[152,2326,523],{"class":255},[152,2328,259],{"class":248},[152,2330,308],{"class":248},[152,2332,2333],{"class":161},"hono-api",[152,2335,265],{"class":248},[152,2337,1423],{"class":248},[152,2339,2340,2342],{"class":154,"line":324},[152,2341,333],{"class":248},[152,2343,336],{"class":244},[152,2345,2346],{"class":154,"line":330},[152,2347,452],{"emptyLinePlaceholder":451},[152,2349,2350,2353,2356,2358,2360,2362],{"class":154,"line":505},[152,2351,2352],{"class":457},"const",[152,2354,2355],{"class":244}," app ",[152,2357,464],{"class":248},[152,2359,2039],{"class":248},[152,2361,2271],{"class":240},[152,2363,684],{"class":244},[152,2365,2366],{"class":154,"line":541},[152,2367,452],{"emptyLinePlaceholder":451},[152,2369,2370,2373,2375,2378,2380,2382,2385,2387,2389,2391,2393,2396,2398,2401,2403,2405],{"class":154,"line":553},[152,2371,2372],{"class":244},"app",[152,2374,715],{"class":248},[152,2376,2377],{"class":240},"use",[152,2379,245],{"class":244},[152,2381,265],{"class":248},[152,2383,2384],{"class":161},"*",[152,2386,265],{"class":248},[152,2388,427],{"class":248},[152,2390,660],{"class":457},[152,2392,493],{"class":248},[152,2394,2395],{"class":584},"c",[152,2397,427],{"class":248},[152,2399,2400],{"class":584}," next",[152,2402,649],{"class":248},[152,2404,628],{"class":457},[152,2406,287],{"class":248},[152,2408,2409,2411,2414,2416,2419,2421,2424],{"class":154,"line":559},[152,2410,1094],{"class":457},[152,2412,2413],{"class":244}," startedAt",[152,2415,547],{"class":248},[152,2417,2418],{"class":244}," Date",[152,2420,715],{"class":248},[152,2422,2423],{"class":240},"now",[152,2425,684],{"class":255},[152,2427,2428,2430,2432,2434,2436,2438,2440,2443,2445,2448,2450,2453,2455,2457,2459,2462,2464,2466,2468,2470,2472,2475,2477],{"class":154,"line":564},[152,2429,1094],{"class":457},[152,2431,693],{"class":244},[152,2433,547],{"class":248},[152,2435,424],{"class":240},[152,2437,245],{"class":255},[152,2439,513],{"class":248},[152,2441,2442],{"class":255}," method",[152,2444,259],{"class":248},[152,2446,2447],{"class":244}," c",[152,2449,715],{"class":248},[152,2451,2452],{"class":244},"req",[152,2454,715],{"class":248},[152,2456,718],{"class":244},[152,2458,427],{"class":248},[152,2460,2461],{"class":255}," path",[152,2463,259],{"class":248},[152,2465,2447],{"class":244},[152,2467,715],{"class":248},[152,2469,2452],{"class":244},[152,2471,715],{"class":248},[152,2473,2474],{"class":244},"path",[152,2476,385],{"class":248},[152,2478,336],{"class":255},[152,2480,2481],{"class":154,"line":592},[152,2482,452],{"emptyLinePlaceholder":451},[152,2484,2485,2488],{"class":154,"line":603},[152,2486,2487],{"class":233},"  try",[152,2489,287],{"class":248},[152,2491,2492,2495,2497],{"class":154,"line":622},[152,2493,2494],{"class":233},"    await",[152,2496,2400],{"class":240},[152,2498,684],{"class":255},[152,2500,2501,2504,2506,2508,2510,2512],{"class":154,"line":654},[152,2502,2503],{"class":248},"  }",[152,2505,842],{"class":233},[152,2507,493],{"class":255},[152,2509,847],{"class":244},[152,2511,499],{"class":255},[152,2513,249],{"class":248},[152,2515,2516,2519,2521,2523,2525,2527,2529,2531],{"class":154,"line":678},[152,2517,2518],{"class":244},"    log",[152,2520,715],{"class":248},[152,2522,847],{"class":240},[152,2524,245],{"class":255},[152,2526,847],{"class":244},[152,2528,907],{"class":233},[152,2530,910],{"class":158},[152,2532,336],{"class":255},[152,2534,2535,2537],{"class":154,"line":687},[152,2536,1176],{"class":233},[152,2538,2160],{"class":244},[152,2540,2541,2543,2546],{"class":154,"line":704},[152,2542,2503],{"class":248},[152,2544,2545],{"class":233}," finally",[152,2547,287],{"class":248},[152,2549,2550,2552,2554,2556,2558],{"class":154,"line":723},[152,2551,2518],{"class":244},[152,2553,715],{"class":248},[152,2555,805],{"class":240},[152,2557,245],{"class":255},[152,2559,249],{"class":248},[152,2561,2562,2564,2566,2568,2570,2573,2575,2577],{"class":154,"line":745},[152,2563,1203],{"class":255},[152,2565,259],{"class":248},[152,2567,2447],{"class":244},[152,2569,715],{"class":248},[152,2571,2572],{"class":244},"res",[152,2574,715],{"class":248},[152,2576,821],{"class":244},[152,2578,276],{"class":248},[152,2580,2581,2584,2586,2588,2590,2592,2595,2598,2600],{"class":154,"line":753},[152,2582,2583],{"class":255},"      duration",[152,2585,259],{"class":248},[152,2587,2418],{"class":244},[152,2589,715],{"class":248},[152,2591,2423],{"class":240},[152,2593,2594],{"class":255},"() ",[152,2596,2597],{"class":248},"-",[152,2599,2413],{"class":244},[152,2601,276],{"class":248},[152,2603,2604,2606],{"class":154,"line":758},[152,2605,748],{"class":248},[152,2607,336],{"class":255},[152,2609,2610],{"class":154,"line":766},[152,2611,980],{"class":248},[152,2613,2614,2616],{"class":154,"line":797},[152,2615,333],{"class":248},[152,2617,336],{"class":244},[152,2619,2620],{"class":154,"line":828},[152,2621,452],{"emptyLinePlaceholder":451},[152,2623,2624,2626,2628,2631,2633,2635,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668],{"class":154,"line":837},[152,2625,2372],{"class":244},[152,2627,715],{"class":248},[152,2629,2630],{"class":240},"get",[152,2632,245],{"class":244},[152,2634,265],{"class":248},[152,2636,2637],{"class":161},"/health",[152,2639,265],{"class":248},[152,2641,427],{"class":248},[152,2643,493],{"class":248},[152,2645,2395],{"class":584},[152,2647,649],{"class":248},[152,2649,628],{"class":457},[152,2651,2447],{"class":244},[152,2653,715],{"class":248},[152,2655,953],{"class":240},[152,2657,245],{"class":244},[152,2659,513],{"class":248},[152,2661,1273],{"class":255},[152,2663,259],{"class":248},[152,2665,937],{"class":467},[152,2667,385],{"class":248},[152,2669,2670],{"class":244},"))\n",[152,2672,2673],{"class":154,"line":854},[152,2674,452],{"emptyLinePlaceholder":451},[152,2676,2677,2680,2682,2684,2686,2688,2691,2693,2696,2698,2701,2703,2706,2708],{"class":154,"line":872},[152,2678,2679],{"class":240},"serve",[152,2681,245],{"class":244},[152,2683,513],{"class":248},[152,2685,1961],{"class":255},[152,2687,259],{"class":248},[152,2689,2690],{"class":244}," app",[152,2692,715],{"class":248},[152,2694,2695],{"class":244},"fetch",[152,2697,427],{"class":248},[152,2699,2700],{"class":255}," port",[152,2702,259],{"class":248},[152,2704,2705],{"class":890}," 3000",[152,2707,385],{"class":248},[152,2709,336],{"class":244},[1301,2711,1305,2712,1313],{"color":1303,"icon":1304},[1307,2713,2716],{"href":2714,"rel":2715},"https://github.com/HugoRCD/evlog/tree/main/examples/hono",[1311],"hono example",[214,2718,2720],{"id":2719},"standalone-typescript","Standalone TypeScript",[129,2722,2723],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[141,2725,2728],{"className":223,"code":2726,"filename":2727,"language":226,"meta":147,"style":147},"import { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({\n  env: {\n    service: 'my-worker',\n    environment: 'production',\n  },\n})\n\nconst log = createRequestLogger({ jobId: job.id })\nlog.set({ source: job.source, target: job.target })\nlog.set({ recordsSynced: 150 })\nlog.emit() // Manual emit required in standalone mode\n","scripts/sync-job.ts",[149,2729,2730,2752,2756,2764,2772,2788,2804,2808,2814,2818,2850,2893,2917],{"__ignoreMap":147},[152,2731,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750],{"class":154,"line":155},[152,2733,373],{"class":233},[152,2735,379],{"class":248},[152,2737,430],{"class":244},[152,2739,427],{"class":248},[152,2741,424],{"class":244},[152,2743,385],{"class":248},[152,2745,388],{"class":233},[152,2747,308],{"class":248},[152,2749,444],{"class":161},[152,2751,396],{"class":248},[152,2753,2754],{"class":154,"line":252},[152,2755,452],{"emptyLinePlaceholder":451},[152,2757,2758,2760,2762],{"class":154,"line":279},[152,2759,2312],{"class":240},[152,2761,245],{"class":244},[152,2763,249],{"class":248},[152,2765,2766,2768,2770],{"class":154,"line":290},[152,2767,1918],{"class":255},[152,2769,259],{"class":248},[152,2771,287],{"class":248},[152,2773,2774,2777,2779,2781,2784,2786],{"class":154,"line":300},[152,2775,2776],{"class":255},"    service",[152,2778,259],{"class":248},[152,2780,308],{"class":248},[152,2782,2783],{"class":161},"my-worker",[152,2785,265],{"class":248},[152,2787,276],{"class":248},[152,2789,2790,2793,2795,2797,2800,2802],{"class":154,"line":318},[152,2791,2792],{"class":255},"    environment",[152,2794,259],{"class":248},[152,2796,308],{"class":248},[152,2798,2799],{"class":161},"production",[152,2801,265],{"class":248},[152,2803,276],{"class":248},[152,2805,2806],{"class":154,"line":324},[152,2807,327],{"class":248},[152,2809,2810,2812],{"class":154,"line":330},[152,2811,333],{"class":248},[152,2813,336],{"class":244},[152,2815,2816],{"class":154,"line":505},[152,2817,452],{"emptyLinePlaceholder":451},[152,2819,2820,2822,2825,2827,2829,2831,2833,2836,2838,2841,2843,2846,2848],{"class":154,"line":541},[152,2821,2352],{"class":457},[152,2823,2824],{"class":244}," log ",[152,2826,464],{"class":248},[152,2828,424],{"class":240},[152,2830,245],{"class":244},[152,2832,513],{"class":248},[152,2834,2835],{"class":255}," jobId",[152,2837,259],{"class":248},[152,2839,2840],{"class":244}," job",[152,2842,715],{"class":248},[152,2844,2845],{"class":244},"id ",[152,2847,333],{"class":248},[152,2849,336],{"class":244},[152,2851,2852,2855,2857,2859,2861,2863,2866,2868,2870,2872,2875,2877,2880,2882,2884,2886,2889,2891],{"class":154,"line":553},[152,2853,2854],{"class":244},"log",[152,2856,715],{"class":248},[152,2858,1118],{"class":240},[152,2860,245],{"class":244},[152,2862,513],{"class":248},[152,2864,2865],{"class":255}," source",[152,2867,259],{"class":248},[152,2869,2840],{"class":244},[152,2871,715],{"class":248},[152,2873,2874],{"class":244},"source",[152,2876,427],{"class":248},[152,2878,2879],{"class":255}," target",[152,2881,259],{"class":248},[152,2883,2840],{"class":244},[152,2885,715],{"class":248},[152,2887,2888],{"class":244},"target ",[152,2890,333],{"class":248},[152,2892,336],{"class":244},[152,2894,2895,2897,2899,2901,2903,2905,2908,2910,2913,2915],{"class":154,"line":559},[152,2896,2854],{"class":244},[152,2898,715],{"class":248},[152,2900,1118],{"class":240},[152,2902,245],{"class":244},[152,2904,513],{"class":248},[152,2906,2907],{"class":255}," recordsSynced",[152,2909,259],{"class":248},[152,2911,2912],{"class":890}," 150",[152,2914,385],{"class":248},[152,2916,336],{"class":244},[152,2918,2919,2921,2923,2925,2927],{"class":154,"line":564},[152,2920,2854],{"class":244},[152,2922,715],{"class":248},[152,2924,805],{"class":240},[152,2926,2594],{"class":244},[152,2928,2930],{"class":2929},"sHwdD","// Manual emit required in standalone mode\n",[1301,2932,2933,2934,2937],{"color":1842,"icon":13},"In standalone mode, you must call ",[149,2935,2936],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[2939,2940,2942],"h4",{"id":2941},"draining-logs-to-external-services","Draining Logs to External Services",[129,2944,2945,2946,2949,2950,2952,2953,2956,2957,2960],{},"Use the ",[149,2947,2948],{},"drain"," option in ",[149,2951,2312],{}," to automatically send every emitted event to an external service. This works with all built-in ",[1307,2954,2955],{"href":62},"adapters"," and the ",[1307,2958,2959],{"href":97},"pipeline"," for batching and retry.",[141,2962,2964],{"className":223,"code":2963,"filename":2727,"language":226,"meta":147,"style":147},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createRequestLogger } 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 reqLog = createRequestLogger({ method: 'POST', path: '/sync' })\nreqLog.set({ recordsSynced: 150 })\nreqLog.emit() // drained automatically\n\n// Flush remaining events before exit\nawait drain.flush()\n",[149,2965,2966,2987,3013,3033,3053,3057,3100,3120,3124,3132,3166,3173,3179,3183,3188,3215,3219,3262,3285,3298,3302,3307],{"__ignoreMap":147},[152,2967,2968,2970,2972,2974,2977,2979,2981,2983,2985],{"class":154,"line":155},[152,2969,373],{"class":233},[152,2971,376],{"class":233},[152,2973,379],{"class":248},[152,2975,2976],{"class":244}," DrainContext",[152,2978,385],{"class":248},[152,2980,388],{"class":233},[152,2982,308],{"class":248},[152,2984,444],{"class":161},[152,2986,396],{"class":248},[152,2988,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011],{"class":154,"line":252},[152,2990,373],{"class":233},[152,2992,379],{"class":248},[152,2994,430],{"class":244},[152,2996,427],{"class":248},[152,2998,693],{"class":244},[152,3000,427],{"class":248},[152,3002,424],{"class":244},[152,3004,385],{"class":248},[152,3006,388],{"class":233},[152,3008,308],{"class":248},[152,3010,444],{"class":161},[152,3012,396],{"class":248},[152,3014,3015,3017,3019,3022,3024,3026,3028,3031],{"class":154,"line":279},[152,3016,373],{"class":233},[152,3018,379],{"class":248},[152,3020,3021],{"class":244}," createAxiomDrain",[152,3023,385],{"class":248},[152,3025,388],{"class":233},[152,3027,308],{"class":248},[152,3029,3030],{"class":161},"evlog/axiom",[152,3032,396],{"class":248},[152,3034,3035,3037,3039,3042,3044,3046,3048,3051],{"class":154,"line":290},[152,3036,373],{"class":233},[152,3038,379],{"class":248},[152,3040,3041],{"class":244}," createDrainPipeline",[152,3043,385],{"class":248},[152,3045,388],{"class":233},[152,3047,308],{"class":248},[152,3049,3050],{"class":161},"evlog/pipeline",[152,3052,396],{"class":248},[152,3054,3055],{"class":154,"line":300},[152,3056,452],{"emptyLinePlaceholder":451},[152,3058,3059,3061,3064,3066,3068,3070,3073,3075,3077,3079,3082,3084,3086,3089,3091,3094,3096,3098],{"class":154,"line":318},[152,3060,2352],{"class":457},[152,3062,3063],{"class":244}," pipeline ",[152,3065,464],{"class":248},[152,3067,3041],{"class":240},[152,3069,634],{"class":248},[152,3071,3072],{"class":158},"DrainContext",[152,3074,640],{"class":248},[152,3076,245],{"class":244},[152,3078,513],{"class":248},[152,3080,3081],{"class":255}," batch",[152,3083,259],{"class":248},[152,3085,379],{"class":248},[152,3087,3088],{"class":255}," size",[152,3090,259],{"class":248},[152,3092,3093],{"class":890}," 10",[152,3095,385],{"class":248},[152,3097,385],{"class":248},[152,3099,336],{"class":244},[152,3101,3102,3104,3107,3109,3112,3114,3117],{"class":154,"line":324},[152,3103,2352],{"class":457},[152,3105,3106],{"class":244}," drain ",[152,3108,464],{"class":248},[152,3110,3111],{"class":240}," pipeline",[152,3113,245],{"class":244},[152,3115,3116],{"class":240},"createAxiomDrain",[152,3118,3119],{"class":244},"())\n",[152,3121,3122],{"class":154,"line":330},[152,3123,452],{"emptyLinePlaceholder":451},[152,3125,3126,3128,3130],{"class":154,"line":505},[152,3127,2312],{"class":240},[152,3129,245],{"class":244},[152,3131,249],{"class":248},[152,3133,3134,3136,3138,3140,3142,3144,3146,3149,3151,3153,3156,3158,3160,3162,3164],{"class":154,"line":541},[152,3135,1918],{"class":255},[152,3137,259],{"class":248},[152,3139,379],{"class":248},[152,3141,523],{"class":255},[152,3143,259],{"class":248},[152,3145,308],{"class":248},[152,3147,3148],{"class":161},"my-script",[152,3150,265],{"class":248},[152,3152,427],{"class":248},[152,3154,3155],{"class":255}," environment",[152,3157,259],{"class":248},[152,3159,308],{"class":248},[152,3161,2799],{"class":161},[152,3163,265],{"class":248},[152,3165,1423],{"class":248},[152,3167,3168,3171],{"class":154,"line":553},[152,3169,3170],{"class":244},"  drain",[152,3172,276],{"class":248},[152,3174,3175,3177],{"class":154,"line":559},[152,3176,333],{"class":248},[152,3178,336],{"class":244},[152,3180,3181],{"class":154,"line":564},[152,3182,452],{"emptyLinePlaceholder":451},[152,3184,3185],{"class":154,"line":592},[152,3186,3187],{"class":2929},"// Every log is automatically drained\n",[152,3189,3190,3192,3194,3196,3198,3200,3202,3204,3206,3209,3211,3213],{"class":154,"line":603},[152,3191,2854],{"class":244},[152,3193,715],{"class":248},[152,3195,1842],{"class":240},[152,3197,245],{"class":244},[152,3199,513],{"class":248},[152,3201,1551],{"class":255},[152,3203,259],{"class":248},[152,3205,308],{"class":248},[152,3207,3208],{"class":161},"sync_started",[152,3210,265],{"class":248},[152,3212,385],{"class":248},[152,3214,336],{"class":244},[152,3216,3217],{"class":154,"line":622},[152,3218,452],{"emptyLinePlaceholder":451},[152,3220,3221,3223,3226,3228,3230,3232,3234,3236,3238,3240,3243,3245,3247,3249,3251,3253,3256,3258,3260],{"class":154,"line":654},[152,3222,2352],{"class":457},[152,3224,3225],{"class":244}," reqLog ",[152,3227,464],{"class":248},[152,3229,424],{"class":240},[152,3231,245],{"class":244},[152,3233,513],{"class":248},[152,3235,2442],{"class":255},[152,3237,259],{"class":248},[152,3239,308],{"class":248},[152,3241,3242],{"class":161},"POST",[152,3244,265],{"class":248},[152,3246,427],{"class":248},[152,3248,2461],{"class":255},[152,3250,259],{"class":248},[152,3252,308],{"class":248},[152,3254,3255],{"class":161},"/sync",[152,3257,265],{"class":248},[152,3259,385],{"class":248},[152,3261,336],{"class":244},[152,3263,3264,3267,3269,3271,3273,3275,3277,3279,3281,3283],{"class":154,"line":678},[152,3265,3266],{"class":244},"reqLog",[152,3268,715],{"class":248},[152,3270,1118],{"class":240},[152,3272,245],{"class":244},[152,3274,513],{"class":248},[152,3276,2907],{"class":255},[152,3278,259],{"class":248},[152,3280,2912],{"class":890},[152,3282,385],{"class":248},[152,3284,336],{"class":244},[152,3286,3287,3289,3291,3293,3295],{"class":154,"line":687},[152,3288,3266],{"class":244},[152,3290,715],{"class":248},[152,3292,805],{"class":240},[152,3294,2594],{"class":244},[152,3296,3297],{"class":2929},"// drained automatically\n",[152,3299,3300],{"class":154,"line":704},[152,3301,452],{"emptyLinePlaceholder":451},[152,3303,3304],{"class":154,"line":723},[152,3305,3306],{"class":2929},"// Flush remaining events before exit\n",[152,3308,3309,3312,3315,3317,3320],{"class":154,"line":745},[152,3310,3311],{"class":233},"await",[152,3313,3314],{"class":244}," drain",[152,3316,715],{"class":248},[152,3318,3319],{"class":240},"flush",[152,3321,684],{"class":244},[1301,3323,1305,3324,3329],{"color":1303,"icon":1304},[1307,3325,3328],{"href":3326,"rel":3327},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[1311],"bun-script example"," for a complete working script.",[133,3331,3333],{"id":3332},"configuration-options","Configuration Options",[129,3335,3336,3337,3340],{},"These options apply to ",[1844,3338,3339],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[3342,3343,3344,3363],"table",{},[3345,3346,3347],"thead",{},[3348,3349,3350,3354,3357,3360],"tr",{},[3351,3352,3353],"th",{},"Option",[3351,3355,3356],{},"Type",[3351,3358,3359],{},"Default",[3351,3361,3362],{},"Description",[3364,3365,3366,3391,3411,3428,3452,3470,3489,3508,3531],"tbody",{},[3348,3367,3368,3374,3379,3384],{},[3369,3370,3371],"td",{},[149,3372,3373],{},"enabled",[3369,3375,3376],{},[149,3377,3378],{},"boolean",[3369,3380,3381],{},[149,3382,3383],{},"true",[3369,3385,3386,3387,3390],{},"Globally enable/disable all logging. When ",[149,3388,3389],{},"false",", all operations become no-ops",[3348,3392,3393,3398,3403,3408],{},[3369,3394,3395],{},[149,3396,3397],{},"env.service",[3369,3399,3400],{},[149,3401,3402],{},"string",[3369,3404,3405],{},[149,3406,3407],{},"'app'",[3369,3409,3410],{},"Service name shown in logs",[3348,3412,3413,3418,3422,3425],{},[3369,3414,3415],{},[149,3416,3417],{},"env.environment",[3369,3419,3420],{},[149,3421,3402],{},[3369,3423,3424],{},"Auto-detected",[3369,3426,3427],{},"Environment name",[3348,3429,3430,3435,3440,3445],{},[3369,3431,3432],{},[149,3433,3434],{},"include",[3369,3436,3437],{},[149,3438,3439],{},"string[]",[3369,3441,3442],{},[149,3443,3444],{},"undefined",[3369,3446,3447,3448,3451],{},"Route patterns to log. Supports glob (",[149,3449,3450],{},"/api/**","). If not set, all routes are logged",[3348,3453,3454,3459,3463,3467],{},[3369,3455,3456],{},[149,3457,3458],{},"exclude",[3369,3460,3461],{},[149,3462,3439],{},[3369,3464,3465],{},[149,3466,3444],{},[3369,3468,3469],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[3348,3471,3472,3477,3482,3486],{},[3369,3473,3474],{},[149,3475,3476],{},"routes",[3369,3478,3479],{},[149,3480,3481],{},"Record\u003Cstring, RouteConfig>",[3369,3483,3484],{},[149,3485,3444],{},[3369,3487,3488],{},"Route-specific service configuration",[3348,3490,3491,3496,3500,3505],{},[3369,3492,3493],{},[149,3494,3495],{},"pretty",[3369,3497,3498],{},[149,3499,3378],{},[3369,3501,3502,3504],{},[149,3503,3383],{}," in dev",[3369,3506,3507],{},"Pretty print with tree formatting",[3348,3509,3510,3515,3520,3524],{},[3369,3511,3512],{},[149,3513,3514],{},"sampling.rates",[3369,3516,3517],{},[149,3518,3519],{},"object",[3369,3521,3522],{},[149,3523,3444],{},[3369,3525,3526,3527],{},"Head sampling rates per log level (0-100%). See ",[1307,3528,3530],{"href":3529},"#sampling","Sampling",[3348,3532,3533,3538,3543,3547],{},[3369,3534,3535],{},[149,3536,3537],{},"sampling.keep",[3369,3539,3540],{},[149,3541,3542],{},"array",[3369,3544,3545],{},[149,3546,3444],{},[3369,3548,3549,3550],{},"Tail sampling conditions to force-keep logs. See ",[1307,3551,3530],{"href":3529},[1301,3553,3554,3555,3558,3559,3562,3563,715],{"color":1842,"icon":13},"Nuxt also supports ",[149,3556,3557],{},"transport.enabled"," and ",[149,3560,3561],{},"transport.endpoint"," for ",[1307,3564,3566],{"href":3565},"#client-transport-nuxt-only","Client Transport",[214,3568,3570],{"id":3569},"route-filtering","Route Filtering",[129,3572,2219,3573,3558,3575,3577],{},[149,3574,3434],{},[149,3576,3458],{}," to control which routes are logged. Both support glob patterns.",[138,3579,3580,3711,3837],{},[141,3581,3583],{"className":223,"code":3582,"filename":225,"language":226,"meta":147,"style":147},"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",[149,3584,3585,3597,3615,3623,3651,3660,3672,3683,3694,3701,3705],{"__ignoreMap":147},[152,3586,3587,3589,3591,3593,3595],{"class":154,"line":155},[152,3588,234],{"class":233},[152,3590,237],{"class":233},[152,3592,241],{"class":240},[152,3594,245],{"class":244},[152,3596,249],{"class":248},[152,3598,3599,3601,3603,3605,3607,3609,3611,3613],{"class":154,"line":252},[152,3600,256],{"class":255},[152,3602,259],{"class":248},[152,3604,262],{"class":244},[152,3606,265],{"class":248},[152,3608,268],{"class":161},[152,3610,265],{"class":248},[152,3612,273],{"class":244},[152,3614,276],{"class":248},[152,3616,3617,3619,3621],{"class":154,"line":279},[152,3618,282],{"class":255},[152,3620,259],{"class":248},[152,3622,287],{"class":248},[152,3624,3625,3628,3630,3632,3634,3636,3638,3640,3642,3645,3647,3649],{"class":154,"line":290},[152,3626,3627],{"class":255},"    include",[152,3629,259],{"class":248},[152,3631,262],{"class":244},[152,3633,265],{"class":248},[152,3635,3450],{"class":161},[152,3637,265],{"class":248},[152,3639,427],{"class":248},[152,3641,308],{"class":248},[152,3643,3644],{"class":161},"/auth/**",[152,3646,265],{"class":248},[152,3648,273],{"class":244},[152,3650,276],{"class":248},[152,3652,3653,3656,3658],{"class":154,"line":300},[152,3654,3655],{"class":255},"    exclude",[152,3657,259],{"class":248},[152,3659,1391],{"class":244},[152,3661,3662,3665,3668,3670],{"class":154,"line":318},[152,3663,3664],{"class":248},"      '",[152,3666,3667],{"class":161},"/api/_nuxt_icon/**",[152,3669,265],{"class":248},[152,3671,276],{"class":248},[152,3673,3674,3676,3679,3681],{"class":154,"line":324},[152,3675,3664],{"class":248},[152,3677,3678],{"class":161},"/api/_content/**",[152,3680,265],{"class":248},[152,3682,276],{"class":248},[152,3684,3685,3687,3690,3692],{"class":154,"line":330},[152,3686,3664],{"class":248},[152,3688,3689],{"class":161},"/api/health",[152,3691,265],{"class":248},[152,3693,276],{"class":248},[152,3695,3696,3699],{"class":154,"line":505},[152,3697,3698],{"class":244},"    ]",[152,3700,276],{"class":248},[152,3702,3703],{"class":154,"line":541},[152,3704,327],{"class":248},[152,3706,3707,3709],{"class":154,"line":553},[152,3708,333],{"class":248},[152,3710,336],{"class":244},[141,3712,3715],{"className":223,"code":3713,"filename":3714,"language":226,"meta":147,"style":147},"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)",[149,3716,3717,3735,3749,3753,3765,3773,3781,3800,3819,3825,3831],{"__ignoreMap":147},[152,3718,3719,3721,3723,3725,3727,3729,3731,3733],{"class":154,"line":155},[152,3720,373],{"class":233},[152,3722,379],{"class":248},[152,3724,1339],{"class":244},[152,3726,385],{"class":248},[152,3728,388],{"class":233},[152,3730,308],{"class":248},[152,3732,1323],{"class":161},[152,3734,396],{"class":248},[152,3736,3737,3739,3741,3743,3745,3747],{"class":154,"line":252},[152,3738,373],{"class":233},[152,3740,1356],{"class":244},[152,3742,1359],{"class":233},[152,3744,308],{"class":248},[152,3746,1364],{"class":161},[152,3748,396],{"class":248},[152,3750,3751],{"class":154,"line":279},[152,3752,452],{"emptyLinePlaceholder":451},[152,3754,3755,3757,3759,3761,3763],{"class":154,"line":290},[152,3756,234],{"class":233},[152,3758,237],{"class":233},[152,3760,1339],{"class":240},[152,3762,245],{"class":244},[152,3764,249],{"class":248},[152,3766,3767,3769,3771],{"class":154,"line":300},[152,3768,256],{"class":255},[152,3770,259],{"class":248},[152,3772,1391],{"class":244},[152,3774,3775,3777,3779],{"class":154,"line":318},[152,3776,1396],{"class":240},[152,3778,245],{"class":244},[152,3780,249],{"class":248},[152,3782,3783,3786,3788,3790,3792,3794,3796,3798],{"class":154,"line":324},[152,3784,3785],{"class":255},"      include",[152,3787,259],{"class":248},[152,3789,262],{"class":244},[152,3791,265],{"class":248},[152,3793,3450],{"class":161},[152,3795,265],{"class":248},[152,3797,273],{"class":244},[152,3799,276],{"class":248},[152,3801,3802,3805,3807,3809,3811,3813,3815,3817],{"class":154,"line":330},[152,3803,3804],{"class":255},"      exclude",[152,3806,259],{"class":248},[152,3808,262],{"class":244},[152,3810,265],{"class":248},[152,3812,3689],{"class":161},[152,3814,265],{"class":248},[152,3816,273],{"class":244},[152,3818,276],{"class":248},[152,3820,3821,3823],{"class":154,"line":505},[152,3822,748],{"class":248},[152,3824,336],{"class":244},[152,3826,3827,3829],{"class":154,"line":541},[152,3828,1434],{"class":244},[152,3830,276],{"class":248},[152,3832,3833,3835],{"class":154,"line":553},[152,3834,333],{"class":248},[152,3836,336],{"class":244},[141,3838,3841],{"className":223,"code":3839,"filename":3840,"language":226,"meta":147,"style":147},"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)",[149,3842,3843,3861,3875,3879,3891,3899,3907,3925,3943,3949,3955],{"__ignoreMap":147},[152,3844,3845,3847,3849,3851,3853,3855,3857,3859],{"class":154,"line":155},[152,3846,373],{"class":233},[152,3848,379],{"class":248},[152,3850,1609],{"class":244},[152,3852,385],{"class":248},[152,3854,388],{"class":233},[152,3856,308],{"class":248},[152,3858,1618],{"class":161},[152,3860,396],{"class":248},[152,3862,3863,3865,3867,3869,3871,3873],{"class":154,"line":252},[152,3864,373],{"class":233},[152,3866,1356],{"class":244},[152,3868,1359],{"class":233},[152,3870,308],{"class":248},[152,3872,1633],{"class":161},[152,3874,396],{"class":248},[152,3876,3877],{"class":154,"line":279},[152,3878,452],{"emptyLinePlaceholder":451},[152,3880,3881,3883,3885,3887,3889],{"class":154,"line":290},[152,3882,234],{"class":233},[152,3884,237],{"class":233},[152,3886,1609],{"class":240},[152,3888,245],{"class":244},[152,3890,249],{"class":248},[152,3892,3893,3895,3897],{"class":154,"line":300},[152,3894,256],{"class":255},[152,3896,259],{"class":248},[152,3898,1391],{"class":244},[152,3900,3901,3903,3905],{"class":154,"line":318},[152,3902,1396],{"class":240},[152,3904,245],{"class":244},[152,3906,249],{"class":248},[152,3908,3909,3911,3913,3915,3917,3919,3921,3923],{"class":154,"line":324},[152,3910,3785],{"class":255},[152,3912,259],{"class":248},[152,3914,262],{"class":244},[152,3916,265],{"class":248},[152,3918,3450],{"class":161},[152,3920,265],{"class":248},[152,3922,273],{"class":244},[152,3924,276],{"class":248},[152,3926,3927,3929,3931,3933,3935,3937,3939,3941],{"class":154,"line":330},[152,3928,3804],{"class":255},[152,3930,259],{"class":248},[152,3932,262],{"class":244},[152,3934,265],{"class":248},[152,3936,3689],{"class":161},[152,3938,265],{"class":248},[152,3940,273],{"class":244},[152,3942,276],{"class":248},[152,3944,3945,3947],{"class":154,"line":505},[152,3946,748],{"class":248},[152,3948,336],{"class":244},[152,3950,3951,3953],{"class":154,"line":541},[152,3952,1434],{"class":244},[152,3954,276],{"class":248},[152,3956,3957,3959],{"class":154,"line":553},[152,3958,333],{"class":248},[152,3960,336],{"class":244},[1301,3962,3963,3966,3967,3558,3969,3971],{"color":1842,"icon":13},[1844,3964,3965],{},"Exclusions take precedence."," If a path matches both ",[149,3968,3434],{},[149,3970,3458],{},", it will be excluded.",[214,3973,3975],{"id":3974},"route-based-service-configuration","Route-Based Service Configuration",[129,3977,3978],{},"In multi-service architectures, configure different service names for different routes:",[138,3980,3981,4152,4322],{},[141,3982,3984],{"className":223,"code":3983,"filename":225,"language":226,"meta":147,"style":147},"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",[149,3985,3986,3998,4016,4024,4032,4047,4051,4060,4086,4112,4138,4142,4146],{"__ignoreMap":147},[152,3987,3988,3990,3992,3994,3996],{"class":154,"line":155},[152,3989,234],{"class":233},[152,3991,237],{"class":233},[152,3993,241],{"class":240},[152,3995,245],{"class":244},[152,3997,249],{"class":248},[152,3999,4000,4002,4004,4006,4008,4010,4012,4014],{"class":154,"line":252},[152,4001,256],{"class":255},[152,4003,259],{"class":248},[152,4005,262],{"class":244},[152,4007,265],{"class":248},[152,4009,268],{"class":161},[152,4011,265],{"class":248},[152,4013,273],{"class":244},[152,4015,276],{"class":248},[152,4017,4018,4020,4022],{"class":154,"line":279},[152,4019,282],{"class":255},[152,4021,259],{"class":248},[152,4023,287],{"class":248},[152,4025,4026,4028,4030],{"class":154,"line":290},[152,4027,293],{"class":255},[152,4029,259],{"class":248},[152,4031,287],{"class":248},[152,4033,4034,4036,4038,4040,4043,4045],{"class":154,"line":300},[152,4035,303],{"class":255},[152,4037,259],{"class":248},[152,4039,308],{"class":248},[152,4041,4042],{"class":161},"default-service",[152,4044,265],{"class":248},[152,4046,276],{"class":248},[152,4048,4049],{"class":154,"line":318},[152,4050,321],{"class":248},[152,4052,4053,4056,4058],{"class":154,"line":324},[152,4054,4055],{"class":255},"    routes",[152,4057,259],{"class":248},[152,4059,287],{"class":248},[152,4061,4062,4064,4067,4069,4071,4073,4075,4077,4079,4082,4084],{"class":154,"line":330},[152,4063,3664],{"class":248},[152,4065,4066],{"class":255},"/api/auth/**",[152,4068,265],{"class":248},[152,4070,259],{"class":248},[152,4072,379],{"class":248},[152,4074,523],{"class":255},[152,4076,259],{"class":248},[152,4078,308],{"class":248},[152,4080,4081],{"class":161},"auth-service",[152,4083,265],{"class":248},[152,4085,1423],{"class":248},[152,4087,4088,4090,4093,4095,4097,4099,4101,4103,4105,4108,4110],{"class":154,"line":505},[152,4089,3664],{"class":248},[152,4091,4092],{"class":255},"/api/payment/**",[152,4094,265],{"class":248},[152,4096,259],{"class":248},[152,4098,379],{"class":248},[152,4100,523],{"class":255},[152,4102,259],{"class":248},[152,4104,308],{"class":248},[152,4106,4107],{"class":161},"payment-service",[152,4109,265],{"class":248},[152,4111,1423],{"class":248},[152,4113,4114,4116,4119,4121,4123,4125,4127,4129,4131,4134,4136],{"class":154,"line":541},[152,4115,3664],{"class":248},[152,4117,4118],{"class":255},"/api/booking/**",[152,4120,265],{"class":248},[152,4122,259],{"class":248},[152,4124,379],{"class":248},[152,4126,523],{"class":255},[152,4128,259],{"class":248},[152,4130,308],{"class":248},[152,4132,4133],{"class":161},"booking-service",[152,4135,265],{"class":248},[152,4137,1423],{"class":248},[152,4139,4140],{"class":154,"line":553},[152,4141,321],{"class":248},[152,4143,4144],{"class":154,"line":559},[152,4145,327],{"class":248},[152,4147,4148,4150],{"class":154,"line":564},[152,4149,333],{"class":248},[152,4151,336],{"class":244},[141,4153,4155],{"className":223,"code":4154,"filename":3714,"language":226,"meta":147,"style":147},"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",[149,4156,4157,4175,4189,4193,4205,4213,4221,4241,4250,4275,4299,4304,4310,4316],{"__ignoreMap":147},[152,4158,4159,4161,4163,4165,4167,4169,4171,4173],{"class":154,"line":155},[152,4160,373],{"class":233},[152,4162,379],{"class":248},[152,4164,1339],{"class":244},[152,4166,385],{"class":248},[152,4168,388],{"class":233},[152,4170,308],{"class":248},[152,4172,1323],{"class":161},[152,4174,396],{"class":248},[152,4176,4177,4179,4181,4183,4185,4187],{"class":154,"line":252},[152,4178,373],{"class":233},[152,4180,1356],{"class":244},[152,4182,1359],{"class":233},[152,4184,308],{"class":248},[152,4186,1364],{"class":161},[152,4188,396],{"class":248},[152,4190,4191],{"class":154,"line":279},[152,4192,452],{"emptyLinePlaceholder":451},[152,4194,4195,4197,4199,4201,4203],{"class":154,"line":290},[152,4196,234],{"class":233},[152,4198,237],{"class":233},[152,4200,1339],{"class":240},[152,4202,245],{"class":244},[152,4204,249],{"class":248},[152,4206,4207,4209,4211],{"class":154,"line":300},[152,4208,256],{"class":255},[152,4210,259],{"class":248},[152,4212,1391],{"class":244},[152,4214,4215,4217,4219],{"class":154,"line":318},[152,4216,1396],{"class":240},[152,4218,245],{"class":244},[152,4220,249],{"class":248},[152,4222,4223,4225,4227,4229,4231,4233,4235,4237,4239],{"class":154,"line":324},[152,4224,1405],{"class":255},[152,4226,259],{"class":248},[152,4228,379],{"class":248},[152,4230,523],{"class":255},[152,4232,259],{"class":248},[152,4234,308],{"class":248},[152,4236,4042],{"class":161},[152,4238,265],{"class":248},[152,4240,1423],{"class":248},[152,4242,4243,4246,4248],{"class":154,"line":330},[152,4244,4245],{"class":255},"      routes",[152,4247,259],{"class":248},[152,4249,287],{"class":248},[152,4251,4252,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273],{"class":154,"line":505},[152,4253,4254],{"class":248},"        '",[152,4256,4066],{"class":255},[152,4258,265],{"class":248},[152,4260,259],{"class":248},[152,4262,379],{"class":248},[152,4264,523],{"class":255},[152,4266,259],{"class":248},[152,4268,308],{"class":248},[152,4270,4081],{"class":161},[152,4272,265],{"class":248},[152,4274,1423],{"class":248},[152,4276,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295,4297],{"class":154,"line":541},[152,4278,4254],{"class":248},[152,4280,4092],{"class":255},[152,4282,265],{"class":248},[152,4284,259],{"class":248},[152,4286,379],{"class":248},[152,4288,523],{"class":255},[152,4290,259],{"class":248},[152,4292,308],{"class":248},[152,4294,4107],{"class":161},[152,4296,265],{"class":248},[152,4298,1423],{"class":248},[152,4300,4301],{"class":154,"line":553},[152,4302,4303],{"class":248},"      },\n",[152,4305,4306,4308],{"class":154,"line":559},[152,4307,748],{"class":248},[152,4309,336],{"class":244},[152,4311,4312,4314],{"class":154,"line":564},[152,4313,1434],{"class":244},[152,4315,276],{"class":248},[152,4317,4318,4320],{"class":154,"line":592},[152,4319,333],{"class":248},[152,4321,336],{"class":244},[141,4323,4325],{"className":223,"code":4324,"filename":3840,"language":226,"meta":147,"style":147},"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",[149,4326,4327,4345,4359,4363,4375,4383,4391,4411,4419,4443,4467,4471,4477,4483],{"__ignoreMap":147},[152,4328,4329,4331,4333,4335,4337,4339,4341,4343],{"class":154,"line":155},[152,4330,373],{"class":233},[152,4332,379],{"class":248},[152,4334,1609],{"class":244},[152,4336,385],{"class":248},[152,4338,388],{"class":233},[152,4340,308],{"class":248},[152,4342,1618],{"class":161},[152,4344,396],{"class":248},[152,4346,4347,4349,4351,4353,4355,4357],{"class":154,"line":252},[152,4348,373],{"class":233},[152,4350,1356],{"class":244},[152,4352,1359],{"class":233},[152,4354,308],{"class":248},[152,4356,1633],{"class":161},[152,4358,396],{"class":248},[152,4360,4361],{"class":154,"line":279},[152,4362,452],{"emptyLinePlaceholder":451},[152,4364,4365,4367,4369,4371,4373],{"class":154,"line":290},[152,4366,234],{"class":233},[152,4368,237],{"class":233},[152,4370,1609],{"class":240},[152,4372,245],{"class":244},[152,4374,249],{"class":248},[152,4376,4377,4379,4381],{"class":154,"line":300},[152,4378,256],{"class":255},[152,4380,259],{"class":248},[152,4382,1391],{"class":244},[152,4384,4385,4387,4389],{"class":154,"line":318},[152,4386,1396],{"class":240},[152,4388,245],{"class":244},[152,4390,249],{"class":248},[152,4392,4393,4395,4397,4399,4401,4403,4405,4407,4409],{"class":154,"line":324},[152,4394,1405],{"class":255},[152,4396,259],{"class":248},[152,4398,379],{"class":248},[152,4400,523],{"class":255},[152,4402,259],{"class":248},[152,4404,308],{"class":248},[152,4406,4042],{"class":161},[152,4408,265],{"class":248},[152,4410,1423],{"class":248},[152,4412,4413,4415,4417],{"class":154,"line":330},[152,4414,4245],{"class":255},[152,4416,259],{"class":248},[152,4418,287],{"class":248},[152,4420,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441],{"class":154,"line":505},[152,4422,4254],{"class":248},[152,4424,4066],{"class":255},[152,4426,265],{"class":248},[152,4428,259],{"class":248},[152,4430,379],{"class":248},[152,4432,523],{"class":255},[152,4434,259],{"class":248},[152,4436,308],{"class":248},[152,4438,4081],{"class":161},[152,4440,265],{"class":248},[152,4442,1423],{"class":248},[152,4444,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465],{"class":154,"line":541},[152,4446,4254],{"class":248},[152,4448,4092],{"class":255},[152,4450,265],{"class":248},[152,4452,259],{"class":248},[152,4454,379],{"class":248},[152,4456,523],{"class":255},[152,4458,259],{"class":248},[152,4460,308],{"class":248},[152,4462,4107],{"class":161},[152,4464,265],{"class":248},[152,4466,1423],{"class":248},[152,4468,4469],{"class":154,"line":553},[152,4470,4303],{"class":248},[152,4472,4473,4475],{"class":154,"line":559},[152,4474,748],{"class":248},[152,4476,336],{"class":244},[152,4478,4479,4481],{"class":154,"line":564},[152,4480,1434],{"class":244},[152,4482,276],{"class":248},[152,4484,4485,4487],{"class":154,"line":592},[152,4486,333],{"class":248},[152,4488,336],{"class":244},[129,4490,4491,4492,4495,4496,4500],{},"You can also override the service name per handler using ",[149,4493,4494],{},"useLogger(event, 'service-name')",". See ",[1307,4497,4499],{"href":4498},"/getting-started/quick-start#service-identification","Quick Start - Service Identification"," for details.",[214,4502,3530],{"id":4503},"sampling",[129,4505,4506],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[2939,4508,4510],{"id":4509},"head-sampling-rates","Head Sampling (rates)",[129,4512,4513,4514,4517],{},"Random sampling based on log level, decided ",[1844,4515,4516],{},"before"," the request completes:",[138,4519,4520,4658,4794],{},[141,4521,4523],{"className":223,"code":4522,"filename":225,"language":226,"meta":147,"style":147},"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",[149,4524,4525,4537,4555,4563,4572,4581,4595,4610,4625,4640,4644,4648,4652],{"__ignoreMap":147},[152,4526,4527,4529,4531,4533,4535],{"class":154,"line":155},[152,4528,234],{"class":233},[152,4530,237],{"class":233},[152,4532,241],{"class":240},[152,4534,245],{"class":244},[152,4536,249],{"class":248},[152,4538,4539,4541,4543,4545,4547,4549,4551,4553],{"class":154,"line":252},[152,4540,256],{"class":255},[152,4542,259],{"class":248},[152,4544,262],{"class":244},[152,4546,265],{"class":248},[152,4548,268],{"class":161},[152,4550,265],{"class":248},[152,4552,273],{"class":244},[152,4554,276],{"class":248},[152,4556,4557,4559,4561],{"class":154,"line":279},[152,4558,282],{"class":255},[152,4560,259],{"class":248},[152,4562,287],{"class":248},[152,4564,4565,4568,4570],{"class":154,"line":290},[152,4566,4567],{"class":255},"    sampling",[152,4569,259],{"class":248},[152,4571,287],{"class":248},[152,4573,4574,4577,4579],{"class":154,"line":300},[152,4575,4576],{"class":255},"      rates",[152,4578,259],{"class":248},[152,4580,287],{"class":248},[152,4582,4583,4586,4588,4590,4592],{"class":154,"line":318},[152,4584,4585],{"class":255},"        info",[152,4587,259],{"class":248},[152,4589,3093],{"class":890},[152,4591,427],{"class":248},[152,4593,4594],{"class":2929},"    // Keep 10% of info logs\n",[152,4596,4597,4600,4602,4605,4607],{"class":154,"line":324},[152,4598,4599],{"class":255},"        warn",[152,4601,259],{"class":248},[152,4603,4604],{"class":890}," 50",[152,4606,427],{"class":248},[152,4608,4609],{"class":2929},"    // Keep 50% of warning logs\n",[152,4611,4612,4615,4617,4620,4622],{"class":154,"line":330},[152,4613,4614],{"class":255},"        debug",[152,4616,259],{"class":248},[152,4618,4619],{"class":890}," 5",[152,4621,427],{"class":248},[152,4623,4624],{"class":2929},"    // Keep 5% of debug logs\n",[152,4626,4627,4630,4632,4635,4637],{"class":154,"line":505},[152,4628,4629],{"class":255},"        error",[152,4631,259],{"class":248},[152,4633,4634],{"class":890}," 100",[152,4636,427],{"class":248},[152,4638,4639],{"class":2929},"  // Always keep errors (default)\n",[152,4641,4642],{"class":154,"line":541},[152,4643,4303],{"class":248},[152,4645,4646],{"class":154,"line":553},[152,4647,321],{"class":248},[152,4649,4650],{"class":154,"line":559},[152,4651,327],{"class":248},[152,4653,4654,4656],{"class":154,"line":564},[152,4655,333],{"class":248},[152,4657,336],{"class":244},[141,4659,4661],{"className":223,"code":4660,"filename":3714,"language":226,"meta":147,"style":147},"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",[149,4662,4663,4681,4695,4699,4711,4719,4727,4736,4772,4776,4782,4788],{"__ignoreMap":147},[152,4664,4665,4667,4669,4671,4673,4675,4677,4679],{"class":154,"line":155},[152,4666,373],{"class":233},[152,4668,379],{"class":248},[152,4670,1339],{"class":244},[152,4672,385],{"class":248},[152,4674,388],{"class":233},[152,4676,308],{"class":248},[152,4678,1323],{"class":161},[152,4680,396],{"class":248},[152,4682,4683,4685,4687,4689,4691,4693],{"class":154,"line":252},[152,4684,373],{"class":233},[152,4686,1356],{"class":244},[152,4688,1359],{"class":233},[152,4690,308],{"class":248},[152,4692,1364],{"class":161},[152,4694,396],{"class":248},[152,4696,4697],{"class":154,"line":279},[152,4698,452],{"emptyLinePlaceholder":451},[152,4700,4701,4703,4705,4707,4709],{"class":154,"line":290},[152,4702,234],{"class":233},[152,4704,237],{"class":233},[152,4706,1339],{"class":240},[152,4708,245],{"class":244},[152,4710,249],{"class":248},[152,4712,4713,4715,4717],{"class":154,"line":300},[152,4714,256],{"class":255},[152,4716,259],{"class":248},[152,4718,1391],{"class":244},[152,4720,4721,4723,4725],{"class":154,"line":318},[152,4722,1396],{"class":240},[152,4724,245],{"class":244},[152,4726,249],{"class":248},[152,4728,4729,4732,4734],{"class":154,"line":324},[152,4730,4731],{"class":255},"      sampling",[152,4733,259],{"class":248},[152,4735,287],{"class":248},[152,4737,4738,4741,4743,4745,4748,4750,4752,4754,4757,4759,4761,4763,4766,4768,4770],{"class":154,"line":330},[152,4739,4740],{"class":255},"        rates",[152,4742,259],{"class":248},[152,4744,379],{"class":248},[152,4746,4747],{"class":255}," info",[152,4749,259],{"class":248},[152,4751,3093],{"class":890},[152,4753,427],{"class":248},[152,4755,4756],{"class":255}," warn",[152,4758,259],{"class":248},[152,4760,4604],{"class":890},[152,4762,427],{"class":248},[152,4764,4765],{"class":255}," debug",[152,4767,259],{"class":248},[152,4769,4619],{"class":890},[152,4771,1423],{"class":248},[152,4773,4774],{"class":154,"line":505},[152,4775,4303],{"class":248},[152,4777,4778,4780],{"class":154,"line":541},[152,4779,748],{"class":248},[152,4781,336],{"class":244},[152,4783,4784,4786],{"class":154,"line":553},[152,4785,1434],{"class":244},[152,4787,276],{"class":248},[152,4789,4790,4792],{"class":154,"line":559},[152,4791,333],{"class":248},[152,4793,336],{"class":244},[141,4795,4797],{"className":223,"code":4796,"filename":3840,"language":226,"meta":147,"style":147},"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",[149,4798,4799,4817,4831,4835,4847,4855,4863,4871,4903,4907,4913,4919],{"__ignoreMap":147},[152,4800,4801,4803,4805,4807,4809,4811,4813,4815],{"class":154,"line":155},[152,4802,373],{"class":233},[152,4804,379],{"class":248},[152,4806,1609],{"class":244},[152,4808,385],{"class":248},[152,4810,388],{"class":233},[152,4812,308],{"class":248},[152,4814,1618],{"class":161},[152,4816,396],{"class":248},[152,4818,4819,4821,4823,4825,4827,4829],{"class":154,"line":252},[152,4820,373],{"class":233},[152,4822,1356],{"class":244},[152,4824,1359],{"class":233},[152,4826,308],{"class":248},[152,4828,1633],{"class":161},[152,4830,396],{"class":248},[152,4832,4833],{"class":154,"line":279},[152,4834,452],{"emptyLinePlaceholder":451},[152,4836,4837,4839,4841,4843,4845],{"class":154,"line":290},[152,4838,234],{"class":233},[152,4840,237],{"class":233},[152,4842,1609],{"class":240},[152,4844,245],{"class":244},[152,4846,249],{"class":248},[152,4848,4849,4851,4853],{"class":154,"line":300},[152,4850,256],{"class":255},[152,4852,259],{"class":248},[152,4854,1391],{"class":244},[152,4856,4857,4859,4861],{"class":154,"line":318},[152,4858,1396],{"class":240},[152,4860,245],{"class":244},[152,4862,249],{"class":248},[152,4864,4865,4867,4869],{"class":154,"line":324},[152,4866,4731],{"class":255},[152,4868,259],{"class":248},[152,4870,287],{"class":248},[152,4872,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901],{"class":154,"line":330},[152,4874,4740],{"class":255},[152,4876,259],{"class":248},[152,4878,379],{"class":248},[152,4880,4747],{"class":255},[152,4882,259],{"class":248},[152,4884,3093],{"class":890},[152,4886,427],{"class":248},[152,4888,4756],{"class":255},[152,4890,259],{"class":248},[152,4892,4604],{"class":890},[152,4894,427],{"class":248},[152,4896,4765],{"class":255},[152,4898,259],{"class":248},[152,4900,4619],{"class":890},[152,4902,1423],{"class":248},[152,4904,4905],{"class":154,"line":505},[152,4906,4303],{"class":248},[152,4908,4909,4911],{"class":154,"line":541},[152,4910,748],{"class":248},[152,4912,336],{"class":244},[152,4914,4915,4917],{"class":154,"line":553},[152,4916,1434],{"class":244},[152,4918,276],{"class":248},[152,4920,4921,4923],{"class":154,"line":559},[152,4922,333],{"class":248},[152,4924,336],{"class":244},[1301,4926,4928,4931,4932,4935,4936,715],{"color":4927,"icon":49},"success",[1844,4929,4930],{},"Errors are always logged by default."," Even if you don't specify ",[149,4933,4934],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[149,4937,4938],{},"error: 0",[2939,4940,4942],{"id":4941},"tail-sampling-keep","Tail Sampling (keep)",[129,4944,4945,4946,4949],{},"Force-keep logs based on request outcome, evaluated ",[1844,4947,4948],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[141,4951,4953],{"className":223,"code":4952,"language":226,"meta":147,"style":147},"// 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",[149,4954,4955,4960,4968,4985,4994,5012,5027,5047,5053],{"__ignoreMap":147},[152,4956,4957],{"class":154,"line":155},[152,4958,4959],{"class":2929},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[152,4961,4962,4964,4966],{"class":154,"line":252},[152,4963,4503],{"class":158},[152,4965,259],{"class":248},[152,4967,287],{"class":248},[152,4969,4970,4973,4975,4977,4979,4981,4983],{"class":154,"line":279},[152,4971,4972],{"class":158},"  rates",[152,4974,259],{"class":248},[152,4976,379],{"class":248},[152,4978,4747],{"class":158},[152,4980,259],{"class":248},[152,4982,3093],{"class":890},[152,4984,1423],{"class":248},[152,4986,4987,4990,4992],{"class":154,"line":290},[152,4988,4989],{"class":158},"  keep",[152,4991,259],{"class":248},[152,4993,1391],{"class":255},[152,4995,4996,4999,5002,5004,5007,5009],{"class":154,"line":300},[152,4997,4998],{"class":248},"    {",[152,5000,5001],{"class":255}," duration",[152,5003,259],{"class":248},[152,5005,5006],{"class":890}," 1000",[152,5008,1280],{"class":248},[152,5010,5011],{"class":2929},"           // Always keep if duration >= 1000ms\n",[152,5013,5014,5016,5018,5020,5022,5024],{"class":154,"line":318},[152,5015,4998],{"class":248},[152,5017,812],{"class":255},[152,5019,259],{"class":248},[152,5021,1208],{"class":890},[152,5023,1280],{"class":248},[152,5025,5026],{"class":2929},"              // Always keep if status >= 400\n",[152,5028,5029,5031,5033,5035,5037,5040,5042,5044],{"class":154,"line":324},[152,5030,4998],{"class":248},[152,5032,2461],{"class":255},[152,5034,259],{"class":248},[152,5036,308],{"class":248},[152,5038,5039],{"class":161},"/api/critical/**",[152,5041,265],{"class":248},[152,5043,1280],{"class":248},[152,5045,5046],{"class":2929}," // Always keep critical paths\n",[152,5048,5049,5051],{"class":154,"line":330},[152,5050,1434],{"class":255},[152,5052,276],{"class":248},[152,5054,5055],{"class":154,"line":505},[152,5056,556],{"class":248},[129,5058,5059,5060,5063],{},"Conditions use ",[149,5061,5062],{},">="," comparison and follow OR logic (any match = keep).",[2939,5065,5067],{"id":5066},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[129,5069,5070,5071,5074],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[149,5072,5073],{},"evlog:emit:keep"," hook:",[141,5076,5079],{"className":223,"code":5077,"filename":5078,"language":226,"meta":147,"style":147},"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",[149,5080,5081,5103,5138,5180,5184,5203,5217,5221,5227],{"__ignoreMap":147},[152,5082,5083,5085,5087,5090,5092,5094,5097,5099,5101],{"class":154,"line":155},[152,5084,234],{"class":233},[152,5086,237],{"class":233},[152,5088,5089],{"class":240}," defineNitroPlugin",[152,5091,245],{"class":244},[152,5093,245],{"class":248},[152,5095,5096],{"class":584},"nitroApp",[152,5098,649],{"class":248},[152,5100,628],{"class":457},[152,5102,287],{"class":248},[152,5104,5105,5108,5110,5113,5115,5118,5120,5122,5124,5126,5128,5130,5132,5134,5136],{"class":154,"line":252},[152,5106,5107],{"class":244},"  nitroApp",[152,5109,715],{"class":248},[152,5111,5112],{"class":244},"hooks",[152,5114,715],{"class":248},[152,5116,5117],{"class":240},"hook",[152,5119,245],{"class":255},[152,5121,265],{"class":248},[152,5123,5073],{"class":161},[152,5125,265],{"class":248},[152,5127,427],{"class":248},[152,5129,493],{"class":248},[152,5131,585],{"class":584},[152,5133,649],{"class":248},[152,5135,628],{"class":457},[152,5137,287],{"class":248},[152,5139,5140,5142,5145,5147,5150,5152,5155,5157,5160,5162,5164,5167,5170,5173,5175,5177],{"class":154,"line":279},[152,5141,690],{"class":457},[152,5143,5144],{"class":244}," user",[152,5146,547],{"class":248},[152,5148,5149],{"class":244}," ctx",[152,5151,715],{"class":248},[152,5153,5154],{"class":244},"context",[152,5156,715],{"class":248},[152,5158,5159],{"class":244},"user",[152,5161,907],{"class":233},[152,5163,379],{"class":248},[152,5165,5166],{"class":255}," premium",[152,5168,5169],{"class":248},"?:",[152,5171,5172],{"class":158}," boolean",[152,5174,385],{"class":248},[152,5176,643],{"class":248},[152,5178,5179],{"class":158}," undefined\n",[152,5181,5182],{"class":154,"line":290},[152,5183,452],{"emptyLinePlaceholder":451},[152,5185,5186,5189,5191,5193,5196,5199,5201],{"class":154,"line":300},[152,5187,5188],{"class":233},"    if",[152,5190,493],{"class":255},[152,5192,5159],{"class":244},[152,5194,5195],{"class":248},"?.",[152,5197,5198],{"class":244},"premium",[152,5200,499],{"class":255},[152,5202,249],{"class":248},[152,5204,5205,5208,5210,5213,5215],{"class":154,"line":318},[152,5206,5207],{"class":244},"      ctx",[152,5209,715],{"class":248},[152,5211,5212],{"class":244},"shouldKeep",[152,5214,547],{"class":248},[152,5216,550],{"class":467},[152,5218,5219],{"class":154,"line":324},[152,5220,974],{"class":248},[152,5222,5223,5225],{"class":154,"line":330},[152,5224,2503],{"class":248},[152,5226,336],{"class":255},[152,5228,5229,5231],{"class":154,"line":505},[152,5230,333],{"class":248},[152,5232,336],{"class":244},[129,5234,5235,5236,5239,5240,343,5242,343,5245,343,5247,5249,5250,715],{},"The hook receives a ",[149,5237,5238],{},"TailSamplingContext"," with ",[149,5241,821],{},[149,5243,5244],{},"duration",[149,5246,2474],{},[149,5248,718],{},", and the full accumulated ",[149,5251,5154],{},[214,5253,5255],{"id":5254},"log-draining","Log Draining",[129,5257,5258,5259,5262,5263,5266],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[149,5260,5261],{},"evlog:drain"," hook. The hook is called in ",[1844,5264,5265],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[141,5268,5271],{"className":223,"code":5269,"filename":5270,"language":226,"meta":147,"style":147},"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",[149,5272,5273,5293,5327,5346,5360,5401,5430,5436,5442],{"__ignoreMap":147},[152,5274,5275,5277,5279,5281,5283,5285,5287,5289,5291],{"class":154,"line":155},[152,5276,234],{"class":233},[152,5278,237],{"class":233},[152,5280,5089],{"class":240},[152,5282,245],{"class":244},[152,5284,245],{"class":248},[152,5286,5096],{"class":584},[152,5288,649],{"class":248},[152,5290,628],{"class":457},[152,5292,287],{"class":248},[152,5294,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325],{"class":154,"line":252},[152,5296,5107],{"class":244},[152,5298,715],{"class":248},[152,5300,5112],{"class":244},[152,5302,715],{"class":248},[152,5304,5117],{"class":240},[152,5306,245],{"class":255},[152,5308,265],{"class":248},[152,5310,5261],{"class":161},[152,5312,265],{"class":248},[152,5314,427],{"class":248},[152,5316,660],{"class":457},[152,5318,493],{"class":248},[152,5320,585],{"class":584},[152,5322,649],{"class":248},[152,5324,628],{"class":457},[152,5326,287],{"class":248},[152,5328,5329,5331,5333,5335,5337,5340,5342,5344],{"class":154,"line":279},[152,5330,2494],{"class":233},[152,5332,1961],{"class":240},[152,5334,245],{"class":255},[152,5336,265],{"class":248},[152,5338,5339],{"class":161},"https://api.axiom.co/v1/datasets/logs/ingest",[152,5341,265],{"class":248},[152,5343,427],{"class":248},[152,5345,287],{"class":248},[152,5347,5348,5350,5352,5354,5356,5358],{"class":154,"line":290},[152,5349,707],{"class":255},[152,5351,259],{"class":248},[152,5353,308],{"class":248},[152,5355,3242],{"class":161},[152,5357,265],{"class":248},[152,5359,276],{"class":248},[152,5361,5362,5365,5367,5369,5372,5374,5377,5380,5383,5386,5388,5391,5393,5396,5399],{"class":154,"line":300},[152,5363,5364],{"class":255},"      headers",[152,5366,259],{"class":248},[152,5368,379],{"class":248},[152,5370,5371],{"class":255}," Authorization",[152,5373,259],{"class":248},[152,5375,5376],{"class":248}," `",[152,5378,5379],{"class":161},"Bearer ",[152,5381,5382],{"class":248},"${",[152,5384,5385],{"class":244},"process",[152,5387,715],{"class":248},[152,5389,5390],{"class":244},"env",[152,5392,715],{"class":248},[152,5394,5395],{"class":244},"AXIOM_TOKEN",[152,5397,5398],{"class":248},"}`",[152,5400,1423],{"class":248},[152,5402,5403,5406,5408,5411,5413,5416,5419,5421,5423,5425,5428],{"class":154,"line":318},[152,5404,5405],{"class":255},"      body",[152,5407,259],{"class":248},[152,5409,5410],{"class":244}," JSON",[152,5412,715],{"class":248},[152,5414,5415],{"class":240},"stringify",[152,5417,5418],{"class":255},"([",[152,5420,585],{"class":244},[152,5422,715],{"class":248},[152,5424,1514],{"class":244},[152,5426,5427],{"class":255},"])",[152,5429,276],{"class":248},[152,5431,5432,5434],{"class":154,"line":324},[152,5433,748],{"class":248},[152,5435,336],{"class":255},[152,5437,5438,5440],{"class":154,"line":330},[152,5439,2503],{"class":248},[152,5441,336],{"class":255},[152,5443,5444,5446],{"class":154,"line":505},[152,5445,333],{"class":248},[152,5447,336],{"class":244},[129,5449,5235,5450,5452],{},[149,5451,3072],{}," with:",[2198,5454,5455,5464,5475],{},[2201,5456,5457,5459,5460,5463],{},[149,5458,1514],{},": The complete ",[149,5461,5462],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[2201,5465,5466,5468,5469,343,5471,343,5473,649],{},[149,5467,665],{},": Optional request metadata (",[149,5470,718],{},[149,5472,2474],{},[149,5474,2205],{},[2201,5476,5477,5480],{},[149,5478,5479],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[1301,5482,5483,5486,5487,343,5490,343,5493,343,5496,343,5499,343,5502,5505],{"color":4927,"icon":49},[1844,5484,5485],{},"Security:"," Sensitive headers (",[149,5488,5489],{},"authorization",[149,5491,5492],{},"cookie",[149,5494,5495],{},"set-cookie",[149,5497,5498],{},"x-api-key",[149,5500,5501],{},"x-auth-token",[149,5503,5504],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[2939,5507,5509],{"id":5508},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[129,5511,5512,5513,5515],{},"The ",[149,5514,5479],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[141,5517,5520],{"className":223,"code":5518,"filename":5519,"language":226,"meta":147,"style":147},"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",[149,5521,5522,5542,5556,5560,5592,5607,5611,5641,5669,5673,5688,5692,5706,5713,5729,5738,5751,5762,5766,5772,5778],{"__ignoreMap":147},[152,5523,5524,5526,5528,5530,5532,5534,5536,5538,5540],{"class":154,"line":155},[152,5525,234],{"class":233},[152,5527,237],{"class":233},[152,5529,5089],{"class":240},[152,5531,245],{"class":244},[152,5533,245],{"class":248},[152,5535,5096],{"class":584},[152,5537,649],{"class":248},[152,5539,628],{"class":457},[152,5541,287],{"class":248},[152,5543,5544,5546,5549,5551,5554],{"class":154,"line":252},[152,5545,1094],{"class":457},[152,5547,5548],{"class":244}," posthog",[152,5550,547],{"class":248},[152,5552,5553],{"class":240}," usePostHog",[152,5555,684],{"class":255},[152,5557,5558],{"class":154,"line":279},[152,5559,452],{"emptyLinePlaceholder":451},[152,5561,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582,5584,5586,5588,5590],{"class":154,"line":290},[152,5563,5107],{"class":244},[152,5565,715],{"class":248},[152,5567,5112],{"class":244},[152,5569,715],{"class":248},[152,5571,5117],{"class":240},[152,5573,245],{"class":255},[152,5575,265],{"class":248},[152,5577,5261],{"class":161},[152,5579,265],{"class":248},[152,5581,427],{"class":248},[152,5583,493],{"class":248},[152,5585,585],{"class":584},[152,5587,649],{"class":248},[152,5589,628],{"class":457},[152,5591,287],{"class":248},[152,5593,5594,5596,5598,5600,5603,5605],{"class":154,"line":300},[152,5595,5188],{"class":233},[152,5597,493],{"class":255},[152,5599,1160],{"class":248},[152,5601,5602],{"class":244},"posthog",[152,5604,499],{"class":255},[152,5606,502],{"class":233},[152,5608,5609],{"class":154,"line":318},[152,5610,452],{"emptyLinePlaceholder":451},[152,5612,5613,5615,5618,5620,5622,5624,5626,5628,5631,5633,5636,5638],{"class":154,"line":324},[152,5614,690],{"class":457},[152,5616,5617],{"class":244}," sessionId",[152,5619,547],{"class":248},[152,5621,5149],{"class":244},[152,5623,715],{"class":248},[152,5625,5479],{"class":244},[152,5627,5195],{"class":248},[152,5629,5630],{"class":255},"[",[152,5632,265],{"class":248},[152,5634,5635],{"class":161},"x-posthog-session-id",[152,5637,265],{"class":248},[152,5639,5640],{"class":255},"]\n",[152,5642,5643,5645,5648,5650,5652,5654,5656,5658,5660,5662,5665,5667],{"class":154,"line":330},[152,5644,690],{"class":457},[152,5646,5647],{"class":244}," distinctId",[152,5649,547],{"class":248},[152,5651,5149],{"class":244},[152,5653,715],{"class":248},[152,5655,5479],{"class":244},[152,5657,5195],{"class":248},[152,5659,5630],{"class":255},[152,5661,265],{"class":248},[152,5663,5664],{"class":161},"x-posthog-distinct-id",[152,5666,265],{"class":248},[152,5668,5640],{"class":255},[152,5670,5671],{"class":154,"line":505},[152,5672,452],{"emptyLinePlaceholder":451},[152,5674,5675,5677,5679,5681,5684,5686],{"class":154,"line":541},[152,5676,5188],{"class":233},[152,5678,493],{"class":255},[152,5680,1160],{"class":248},[152,5682,5683],{"class":244},"distinctId",[152,5685,499],{"class":255},[152,5687,502],{"class":233},[152,5689,5690],{"class":154,"line":553},[152,5691,452],{"emptyLinePlaceholder":451},[152,5693,5694,5697,5699,5702,5704],{"class":154,"line":559},[152,5695,5696],{"class":244},"    posthog",[152,5698,715],{"class":248},[152,5700,5701],{"class":240},"capture",[152,5703,245],{"class":255},[152,5705,249],{"class":248},[152,5707,5708,5711],{"class":154,"line":564},[152,5709,5710],{"class":244},"      distinctId",[152,5712,276],{"class":248},[152,5714,5715,5718,5720,5722,5725,5727],{"class":154,"line":592},[152,5716,5717],{"class":255},"      event",[152,5719,259],{"class":248},[152,5721,308],{"class":248},[152,5723,5724],{"class":161},"server_log",[152,5726,265],{"class":248},[152,5728,276],{"class":248},[152,5730,5731,5734,5736],{"class":154,"line":603},[152,5732,5733],{"class":255},"      properties",[152,5735,259],{"class":248},[152,5737,287],{"class":248},[152,5739,5740,5743,5745,5747,5749],{"class":154,"line":622},[152,5741,5742],{"class":248},"        ...",[152,5744,585],{"class":244},[152,5746,715],{"class":248},[152,5748,1514],{"class":244},[152,5750,276],{"class":248},[152,5752,5753,5756,5758,5760],{"class":154,"line":654},[152,5754,5755],{"class":255},"        $session_id",[152,5757,259],{"class":248},[152,5759,5617],{"class":244},[152,5761,276],{"class":248},[152,5763,5764],{"class":154,"line":678},[152,5765,4303],{"class":248},[152,5767,5768,5770],{"class":154,"line":687},[152,5769,748],{"class":248},[152,5771,336],{"class":255},[152,5773,5774,5776],{"class":154,"line":704},[152,5775,2503],{"class":248},[152,5777,336],{"class":255},[152,5779,5780,5782],{"class":154,"line":723},[152,5781,333],{"class":248},[152,5783,336],{"class":244},[214,5785,5787],{"id":5786},"event-enrichment","Event Enrichment",[129,5789,5790],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[141,5792,5795],{"className":223,"code":5793,"filename":5794,"language":226,"meta":147,"style":147},"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",[149,5796,5797,5803,5810,5817,5824,5831,5844,5848,5868,5879,5888,5897,5906,5915,5920,5924,5957,5985,5991],{"__ignoreMap":147},[152,5798,5799,5801],{"class":154,"line":155},[152,5800,373],{"class":233},[152,5802,287],{"class":248},[152,5804,5805,5808],{"class":154,"line":252},[152,5806,5807],{"class":244},"  createUserAgentEnricher",[152,5809,276],{"class":248},[152,5811,5812,5815],{"class":154,"line":279},[152,5813,5814],{"class":244},"  createGeoEnricher",[152,5816,276],{"class":248},[152,5818,5819,5822],{"class":154,"line":290},[152,5820,5821],{"class":244},"  createRequestSizeEnricher",[152,5823,276],{"class":248},[152,5825,5826,5829],{"class":154,"line":300},[152,5827,5828],{"class":244},"  createTraceContextEnricher",[152,5830,276],{"class":248},[152,5832,5833,5835,5837,5839,5842],{"class":154,"line":318},[152,5834,333],{"class":248},[152,5836,388],{"class":233},[152,5838,308],{"class":248},[152,5840,5841],{"class":161},"evlog/enrichers",[152,5843,396],{"class":248},[152,5845,5846],{"class":154,"line":324},[152,5847,452],{"emptyLinePlaceholder":451},[152,5849,5850,5852,5854,5856,5858,5860,5862,5864,5866],{"class":154,"line":330},[152,5851,234],{"class":233},[152,5853,237],{"class":233},[152,5855,5089],{"class":240},[152,5857,245],{"class":244},[152,5859,245],{"class":248},[152,5861,5096],{"class":584},[152,5863,649],{"class":248},[152,5865,628],{"class":457},[152,5867,287],{"class":248},[152,5869,5870,5872,5875,5877],{"class":154,"line":505},[152,5871,1094],{"class":457},[152,5873,5874],{"class":244}," enrichers",[152,5876,547],{"class":248},[152,5878,1391],{"class":255},[152,5880,5881,5884,5886],{"class":154,"line":541},[152,5882,5883],{"class":240},"    createUserAgentEnricher",[152,5885,483],{"class":255},[152,5887,276],{"class":248},[152,5889,5890,5893,5895],{"class":154,"line":553},[152,5891,5892],{"class":240},"    createGeoEnricher",[152,5894,483],{"class":255},[152,5896,276],{"class":248},[152,5898,5899,5902,5904],{"class":154,"line":559},[152,5900,5901],{"class":240},"    createRequestSizeEnricher",[152,5903,483],{"class":255},[152,5905,276],{"class":248},[152,5907,5908,5911,5913],{"class":154,"line":564},[152,5909,5910],{"class":240},"    createTraceContextEnricher",[152,5912,483],{"class":255},[152,5914,276],{"class":248},[152,5916,5917],{"class":154,"line":592},[152,5918,5919],{"class":255},"  ]\n",[152,5921,5922],{"class":154,"line":603},[152,5923,452],{"emptyLinePlaceholder":451},[152,5925,5926,5928,5930,5932,5934,5936,5938,5940,5943,5945,5947,5949,5951,5953,5955],{"class":154,"line":622},[152,5927,5107],{"class":244},[152,5929,715],{"class":248},[152,5931,5112],{"class":244},[152,5933,715],{"class":248},[152,5935,5117],{"class":240},[152,5937,245],{"class":255},[152,5939,265],{"class":248},[152,5941,5942],{"class":161},"evlog:enrich",[152,5944,265],{"class":248},[152,5946,427],{"class":248},[152,5948,493],{"class":248},[152,5950,585],{"class":584},[152,5952,649],{"class":248},[152,5954,628],{"class":457},[152,5956,287],{"class":248},[152,5958,5959,5962,5964,5966,5969,5972,5974,5976,5979,5981,5983],{"class":154,"line":654},[152,5960,5961],{"class":233},"    for",[152,5963,493],{"class":255},[152,5965,2352],{"class":457},[152,5967,5968],{"class":244}," enricher",[152,5970,5971],{"class":248}," of",[152,5973,5874],{"class":244},[152,5975,499],{"class":255},[152,5977,5978],{"class":240},"enricher",[152,5980,245],{"class":255},[152,5982,585],{"class":244},[152,5984,336],{"class":255},[152,5986,5987,5989],{"class":154,"line":678},[152,5988,2503],{"class":248},[152,5990,336],{"class":255},[152,5992,5993,5995],{"class":154,"line":687},[152,5994,333],{"class":248},[152,5996,336],{"class":244},[3342,5998,5999,6011],{},[3345,6000,6001],{},[3348,6002,6003,6006,6009],{},[3351,6004,6005],{},"Enricher",[3351,6007,6008],{},"Event Field",[3351,6010,3362],{},[3364,6012,6013,6028,6043,6058],{},[3348,6014,6015,6020,6025],{},[3369,6016,6017],{},[149,6018,6019],{},"createUserAgentEnricher()",[3369,6021,6022],{},[149,6023,6024],{},"userAgent",[3369,6026,6027],{},"Browser, OS, device type from User-Agent header",[3348,6029,6030,6035,6040],{},[3369,6031,6032],{},[149,6033,6034],{},"createGeoEnricher()",[3369,6036,6037],{},[149,6038,6039],{},"geo",[3369,6041,6042],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[3348,6044,6045,6050,6055],{},[3369,6046,6047],{},[149,6048,6049],{},"createRequestSizeEnricher()",[3369,6051,6052],{},[149,6053,6054],{},"requestSize",[3369,6056,6057],{},"Request/response payload sizes from Content-Length",[3348,6059,6060,6065,6070],{},[3369,6061,6062],{},[149,6063,6064],{},"createTraceContextEnricher()",[3369,6066,6067],{},[149,6068,6069],{},"traceContext",[3369,6071,6072],{},"W3C trace context (traceId, spanId) from traceparent header",[129,6074,6075],{},"You can also write custom enrichers to add any derived context:",[141,6077,6079],{"className":223,"code":6078,"filename":5794,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    ctx.event.deploymentId = process.env.DEPLOYMENT_ID\n  })\n})\n",[149,6080,6081,6101,6133,6161,6167],{"__ignoreMap":147},[152,6082,6083,6085,6087,6089,6091,6093,6095,6097,6099],{"class":154,"line":155},[152,6084,234],{"class":233},[152,6086,237],{"class":233},[152,6088,5089],{"class":240},[152,6090,245],{"class":244},[152,6092,245],{"class":248},[152,6094,5096],{"class":584},[152,6096,649],{"class":248},[152,6098,628],{"class":457},[152,6100,287],{"class":248},[152,6102,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131],{"class":154,"line":252},[152,6104,5107],{"class":244},[152,6106,715],{"class":248},[152,6108,5112],{"class":244},[152,6110,715],{"class":248},[152,6112,5117],{"class":240},[152,6114,245],{"class":255},[152,6116,265],{"class":248},[152,6118,5942],{"class":161},[152,6120,265],{"class":248},[152,6122,427],{"class":248},[152,6124,493],{"class":248},[152,6126,585],{"class":584},[152,6128,649],{"class":248},[152,6130,628],{"class":457},[152,6132,287],{"class":248},[152,6134,6135,6138,6140,6142,6144,6147,6149,6152,6154,6156,6158],{"class":154,"line":279},[152,6136,6137],{"class":244},"    ctx",[152,6139,715],{"class":248},[152,6141,1514],{"class":244},[152,6143,715],{"class":248},[152,6145,6146],{"class":244},"deploymentId",[152,6148,547],{"class":248},[152,6150,6151],{"class":244}," process",[152,6153,715],{"class":248},[152,6155,5390],{"class":244},[152,6157,715],{"class":248},[152,6159,6160],{"class":244},"DEPLOYMENT_ID\n",[152,6162,6163,6165],{"class":154,"line":290},[152,6164,2503],{"class":248},[152,6166,336],{"class":255},[152,6168,6169,6171],{"class":154,"line":300},[152,6170,333],{"class":248},[152,6172,336],{"class":244},[129,6174,6175,6176,6179],{},"See the ",[1307,6177,6178],{"href":111},"Enrichers guide"," for full documentation.",[133,6181,6183],{"id":6182},"client-transport-nuxt-only","Client Transport (Nuxt only)",[129,6185,6186,6187,343,6190,6193,6194,6197],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[149,6188,6189],{},"log.info()",[149,6191,6192],{},"log.error()",", etc. calls are automatically sent to the server via the ",[149,6195,6196],{},"/api/_evlog/ingest"," endpoint.",[141,6199,6201],{"className":223,"code":6200,"filename":225,"language":226,"meta":147,"style":147},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    transport: {\n      enabled: true,\n      endpoint: '/api/_evlog/ingest',  // default\n    },\n  },\n})\n",[149,6202,6203,6215,6233,6241,6250,6261,6279,6283,6287],{"__ignoreMap":147},[152,6204,6205,6207,6209,6211,6213],{"class":154,"line":155},[152,6206,234],{"class":233},[152,6208,237],{"class":233},[152,6210,241],{"class":240},[152,6212,245],{"class":244},[152,6214,249],{"class":248},[152,6216,6217,6219,6221,6223,6225,6227,6229,6231],{"class":154,"line":252},[152,6218,256],{"class":255},[152,6220,259],{"class":248},[152,6222,262],{"class":244},[152,6224,265],{"class":248},[152,6226,268],{"class":161},[152,6228,265],{"class":248},[152,6230,273],{"class":244},[152,6232,276],{"class":248},[152,6234,6235,6237,6239],{"class":154,"line":279},[152,6236,282],{"class":255},[152,6238,259],{"class":248},[152,6240,287],{"class":248},[152,6242,6243,6246,6248],{"class":154,"line":290},[152,6244,6245],{"class":255},"    transport",[152,6247,259],{"class":248},[152,6249,287],{"class":248},[152,6251,6252,6255,6257,6259],{"class":154,"line":300},[152,6253,6254],{"class":255},"      enabled",[152,6256,259],{"class":248},[152,6258,937],{"class":467},[152,6260,276],{"class":248},[152,6262,6263,6266,6268,6270,6272,6274,6276],{"class":154,"line":318},[152,6264,6265],{"class":255},"      endpoint",[152,6267,259],{"class":248},[152,6269,308],{"class":248},[152,6271,6196],{"class":161},[152,6273,265],{"class":248},[152,6275,427],{"class":248},[152,6277,6278],{"class":2929},"  // default\n",[152,6280,6281],{"class":154,"line":324},[152,6282,321],{"class":248},[152,6284,6285],{"class":154,"line":330},[152,6286,327],{"class":248},[152,6288,6289,6291],{"class":154,"line":505},[152,6290,333],{"class":248},[152,6292,336],{"class":244},[2939,6294,6296],{"id":6295},"how-it-works","How it works",[6298,6299,6300,6306,6312,6315,6323],"ol",{},[2201,6301,6302,6303],{},"Client calls ",[149,6304,6305],{},"log.info({ action: 'click', button: 'submit' })",[2201,6307,6308,6309,6311],{},"Log is sent to ",[149,6310,6196],{}," via POST",[2201,6313,6314],{},"Server enriches with environment context (service, version, region, etc.)",[2201,6316,6317,6319,6320],{},[149,6318,5261],{}," hook is called with ",[149,6321,6322],{},"source: 'client'",[2201,6324,6325],{},"External services receive the log (Axiom, Loki, etc.)",[1301,6327,6328,6329,343,6332,6335,6336,6339],{"color":1842,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[149,6330,6331],{},"service",[149,6333,6334],{},"environment",", or ",[149,6337,6338],{},"version"," from the client.",[129,6341,6342,6343,6345],{},"In your drain hook, you can identify client logs by the ",[149,6344,6322],{}," field:",[141,6347,6349],{"className":223,"code":6348,"filename":5270,"language":226,"meta":147,"style":147},"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",[149,6350,6351,6371,6405,6435,6463,6467,6473],{"__ignoreMap":147},[152,6352,6353,6355,6357,6359,6361,6363,6365,6367,6369],{"class":154,"line":155},[152,6354,234],{"class":233},[152,6356,237],{"class":233},[152,6358,5089],{"class":240},[152,6360,245],{"class":244},[152,6362,245],{"class":248},[152,6364,5096],{"class":584},[152,6366,649],{"class":248},[152,6368,628],{"class":457},[152,6370,287],{"class":248},[152,6372,6373,6375,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403],{"class":154,"line":252},[152,6374,5107],{"class":244},[152,6376,715],{"class":248},[152,6378,5112],{"class":244},[152,6380,715],{"class":248},[152,6382,5117],{"class":240},[152,6384,245],{"class":255},[152,6386,265],{"class":248},[152,6388,5261],{"class":161},[152,6390,265],{"class":248},[152,6392,427],{"class":248},[152,6394,660],{"class":457},[152,6396,493],{"class":248},[152,6398,585],{"class":584},[152,6400,649],{"class":248},[152,6402,628],{"class":457},[152,6404,287],{"class":248},[152,6406,6407,6409,6411,6413,6415,6417,6419,6421,6424,6426,6429,6431,6433],{"class":154,"line":279},[152,6408,5188],{"class":233},[152,6410,493],{"class":255},[152,6412,585],{"class":244},[152,6414,715],{"class":248},[152,6416,1514],{"class":244},[152,6418,715],{"class":248},[152,6420,2874],{"class":244},[152,6422,6423],{"class":248}," ===",[152,6425,308],{"class":248},[152,6427,6428],{"class":161},"client",[152,6430,265],{"class":248},[152,6432,499],{"class":255},[152,6434,249],{"class":248},[152,6436,6437,6440,6442,6444,6446,6448,6451,6453,6455,6457,6459,6461],{"class":154,"line":290},[152,6438,6439],{"class":244},"      console",[152,6441,715],{"class":248},[152,6443,2854],{"class":240},[152,6445,245],{"class":255},[152,6447,265],{"class":248},[152,6449,6450],{"class":161},"[CLIENT]",[152,6452,265],{"class":248},[152,6454,427],{"class":248},[152,6456,5149],{"class":244},[152,6458,715],{"class":248},[152,6460,1514],{"class":244},[152,6462,336],{"class":255},[152,6464,6465],{"class":154,"line":300},[152,6466,974],{"class":248},[152,6468,6469,6471],{"class":154,"line":318},[152,6470,2503],{"class":248},[152,6472,336],{"class":255},[152,6474,6475,6477],{"class":154,"line":324},[152,6476,333],{"class":248},[152,6478,336],{"class":244},[214,6480,6482],{"id":6481},"client-identity","Client Identity",[129,6484,6485,6486,6489],{},"Attach user identity to all client logs with ",[149,6487,6488],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[141,6491,6493],{"className":223,"code":6492,"language":226,"meta":147,"style":147},"// 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",[149,6494,6495,6500,6539,6543,6570,6575,6579,6584],{"__ignoreMap":147},[152,6496,6497],{"class":154,"line":155},[152,6498,6499],{"class":2929},"// After login\n",[152,6501,6502,6505,6507,6509,6512,6514,6516,6519,6521,6523,6526,6528,6530,6533,6535,6537],{"class":154,"line":252},[152,6503,6504],{"class":240},"setIdentity",[152,6506,245],{"class":244},[152,6508,513],{"class":248},[152,6510,6511],{"class":255}," userId",[152,6513,259],{"class":248},[152,6515,308],{"class":248},[152,6517,6518],{"class":161},"usr_123",[152,6520,265],{"class":248},[152,6522,427],{"class":248},[152,6524,6525],{"class":255}," orgId",[152,6527,259],{"class":248},[152,6529,308],{"class":248},[152,6531,6532],{"class":161},"org_456",[152,6534,265],{"class":248},[152,6536,385],{"class":248},[152,6538,336],{"class":244},[152,6540,6541],{"class":154,"line":279},[152,6542,452],{"emptyLinePlaceholder":451},[152,6544,6545,6547,6549,6551,6553,6555,6557,6559,6561,6564,6566,6568],{"class":154,"line":290},[152,6546,2854],{"class":244},[152,6548,715],{"class":248},[152,6550,1842],{"class":240},[152,6552,245],{"class":244},[152,6554,513],{"class":248},[152,6556,1551],{"class":255},[152,6558,259],{"class":248},[152,6560,308],{"class":248},[152,6562,6563],{"class":161},"checkout",[152,6565,265],{"class":248},[152,6567,385],{"class":248},[152,6569,336],{"class":244},[152,6571,6572],{"class":154,"line":300},[152,6573,6574],{"class":2929},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[152,6576,6577],{"class":154,"line":318},[152,6578,452],{"emptyLinePlaceholder":451},[152,6580,6581],{"class":154,"line":324},[152,6582,6583],{"class":2929},"// After logout\n",[152,6585,6586,6589],{"class":154,"line":330},[152,6587,6588],{"class":240},"clearIdentity",[152,6590,684],{"class":244},[129,6592,6593,6594,3558,6596,6598],{},"Both ",[149,6595,6504],{},[149,6597,6588],{}," are auto-imported by the Nuxt module.",[129,6600,6601],{},"Per-event fields override identity fields, so you can always pass explicit values:",[141,6603,6605],{"className":223,"code":6604,"language":226,"meta":147,"style":147},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[149,6606,6607,6629,6656],{"__ignoreMap":147},[152,6608,6609,6611,6613,6615,6617,6619,6621,6623,6625,6627],{"class":154,"line":155},[152,6610,6504],{"class":240},[152,6612,245],{"class":244},[152,6614,513],{"class":248},[152,6616,6511],{"class":255},[152,6618,259],{"class":248},[152,6620,308],{"class":248},[152,6622,6518],{"class":161},[152,6624,265],{"class":248},[152,6626,385],{"class":248},[152,6628,336],{"class":244},[152,6630,6631,6633,6635,6637,6639,6641,6643,6645,6647,6650,6652,6654],{"class":154,"line":252},[152,6632,2854],{"class":244},[152,6634,715],{"class":248},[152,6636,1842],{"class":240},[152,6638,245],{"class":244},[152,6640,513],{"class":248},[152,6642,6511],{"class":255},[152,6644,259],{"class":248},[152,6646,308],{"class":248},[152,6648,6649],{"class":161},"usr_admin_override",[152,6651,265],{"class":248},[152,6653,385],{"class":248},[152,6655,336],{"class":244},[152,6657,6658],{"class":154,"line":279},[152,6659,6660],{"class":2929},"// -> { userId: 'usr_admin_override', ... }\n",[2939,6662,6664],{"id":6663},"syncing-identity-with-auth","Syncing identity with auth",[129,6666,6667],{},"Use a global route middleware to automatically sync identity with your auth state:",[141,6669,6672],{"className":223,"code":6670,"filename":6671,"language":226,"meta":147,"style":147},"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",[149,6673,6674,6691,6711,6715,6732,6778,6787,6794,6798],{"__ignoreMap":147},[152,6675,6676,6678,6680,6683,6685,6687,6689],{"class":154,"line":155},[152,6677,234],{"class":233},[152,6679,237],{"class":233},[152,6681,6682],{"class":240}," defineNuxtRouteMiddleware",[152,6684,245],{"class":244},[152,6686,483],{"class":248},[152,6688,628],{"class":457},[152,6690,287],{"class":248},[152,6692,6693,6695,6697,6699,6701,6703,6706,6708],{"class":154,"line":252},[152,6694,1094],{"class":457},[152,6696,379],{"class":248},[152,6698,5144],{"class":244},[152,6700,385],{"class":248},[152,6702,547],{"class":248},[152,6704,6705],{"class":240}," useAuth",[152,6707,2594],{"class":255},[152,6709,6710],{"class":2929},"// better-auth, supabase, clerk, etc.\n",[152,6712,6713],{"class":154,"line":279},[152,6714,452],{"emptyLinePlaceholder":451},[152,6716,6717,6719,6721,6723,6725,6728,6730],{"class":154,"line":290},[152,6718,490],{"class":233},[152,6720,493],{"class":255},[152,6722,5159],{"class":244},[152,6724,715],{"class":248},[152,6726,6727],{"class":244},"value",[152,6729,499],{"class":255},[152,6731,249],{"class":248},[152,6733,6734,6737,6739,6741,6743,6745,6747,6749,6751,6753,6756,6758,6761,6763,6765,6767,6769,6771,6774,6776],{"class":154,"line":300},[152,6735,6736],{"class":240},"    setIdentity",[152,6738,245],{"class":255},[152,6740,513],{"class":248},[152,6742,6511],{"class":255},[152,6744,259],{"class":248},[152,6746,5144],{"class":244},[152,6748,715],{"class":248},[152,6750,6727],{"class":244},[152,6752,715],{"class":248},[152,6754,6755],{"class":244},"id",[152,6757,427],{"class":248},[152,6759,6760],{"class":255}," email",[152,6762,259],{"class":248},[152,6764,5144],{"class":244},[152,6766,715],{"class":248},[152,6768,6727],{"class":244},[152,6770,715],{"class":248},[152,6772,6773],{"class":244},"email",[152,6775,385],{"class":248},[152,6777,336],{"class":255},[152,6779,6780,6782,6785],{"class":154,"line":318},[152,6781,2503],{"class":248},[152,6783,6784],{"class":233}," else",[152,6786,287],{"class":248},[152,6788,6789,6792],{"class":154,"line":324},[152,6790,6791],{"class":240},"    clearIdentity",[152,6793,684],{"class":255},[152,6795,6796],{"class":154,"line":330},[152,6797,980],{"class":248},[152,6799,6800,6802],{"class":154,"line":505},[152,6801,333],{"class":248},[152,6803,336],{"class":244},[1301,6805,6807,6817],{"color":1842,"icon":6806},"i-lucide-lightbulb",[129,6808,6809,6812,6813,6816],{},[1844,6810,6811],{},"Tip:"," Use Nuxt's ",[149,6814,6815],{},"$production"," override to sample only in production while keeping full visibility in development:",[141,6818,6820],{"className":223,"code":6819,"filename":225,"language":226,"meta":147,"style":147},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[149,6821,6822,6834,6852,6860,6880,6884,6893,6901,6909,6942,6975,6979,6983,6987],{"__ignoreMap":147},[152,6823,6824,6826,6828,6830,6832],{"class":154,"line":155},[152,6825,234],{"class":233},[152,6827,237],{"class":233},[152,6829,241],{"class":240},[152,6831,245],{"class":244},[152,6833,249],{"class":248},[152,6835,6836,6838,6840,6842,6844,6846,6848,6850],{"class":154,"line":252},[152,6837,256],{"class":255},[152,6839,259],{"class":248},[152,6841,262],{"class":244},[152,6843,265],{"class":248},[152,6845,268],{"class":161},[152,6847,265],{"class":248},[152,6849,273],{"class":244},[152,6851,276],{"class":248},[152,6853,6854,6856,6858],{"class":154,"line":279},[152,6855,282],{"class":255},[152,6857,259],{"class":248},[152,6859,287],{"class":248},[152,6861,6862,6864,6866,6868,6870,6872,6874,6876,6878],{"class":154,"line":290},[152,6863,293],{"class":255},[152,6865,259],{"class":248},[152,6867,379],{"class":248},[152,6869,523],{"class":255},[152,6871,259],{"class":248},[152,6873,308],{"class":248},[152,6875,311],{"class":161},[152,6877,265],{"class":248},[152,6879,1423],{"class":248},[152,6881,6882],{"class":154,"line":300},[152,6883,327],{"class":248},[152,6885,6886,6889,6891],{"class":154,"line":318},[152,6887,6888],{"class":255},"  $production",[152,6890,259],{"class":248},[152,6892,287],{"class":248},[152,6894,6895,6897,6899],{"class":154,"line":324},[152,6896,1396],{"class":255},[152,6898,259],{"class":248},[152,6900,287],{"class":248},[152,6902,6903,6905,6907],{"class":154,"line":330},[152,6904,4731],{"class":255},[152,6906,259],{"class":248},[152,6908,287],{"class":248},[152,6910,6911,6913,6915,6917,6919,6921,6923,6925,6927,6929,6931,6933,6935,6937,6940],{"class":154,"line":505},[152,6912,4740],{"class":255},[152,6914,259],{"class":248},[152,6916,379],{"class":248},[152,6918,4747],{"class":255},[152,6920,259],{"class":248},[152,6922,3093],{"class":890},[152,6924,427],{"class":248},[152,6926,4756],{"class":255},[152,6928,259],{"class":248},[152,6930,4604],{"class":890},[152,6932,427],{"class":248},[152,6934,4765],{"class":255},[152,6936,259],{"class":248},[152,6938,6939],{"class":890}," 0",[152,6941,1423],{"class":248},[152,6943,6944,6947,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971,6973],{"class":154,"line":541},[152,6945,6946],{"class":255},"        keep",[152,6948,259],{"class":248},[152,6950,262],{"class":244},[152,6952,513],{"class":248},[152,6954,5001],{"class":255},[152,6956,259],{"class":248},[152,6958,5006],{"class":890},[152,6960,1280],{"class":248},[152,6962,379],{"class":248},[152,6964,812],{"class":255},[152,6966,259],{"class":248},[152,6968,1208],{"class":890},[152,6970,385],{"class":248},[152,6972,273],{"class":244},[152,6974,276],{"class":248},[152,6976,6977],{"class":154,"line":553},[152,6978,4303],{"class":248},[152,6980,6981],{"class":154,"line":559},[152,6982,321],{"class":248},[152,6984,6985],{"class":154,"line":564},[152,6986,327],{"class":248},[152,6988,6989,6991],{"class":154,"line":592},[152,6990,333],{"class":248},[152,6992,336],{"class":244},[133,6994,6996],{"id":6995},"typescript-configuration","TypeScript Configuration",[129,6998,6999],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[1301,7001,7003],{"color":4927,"icon":7002},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[133,7005,7007],{"id":7006},"next-steps","Next Steps",[2198,7009,7010],{},[2201,7011,7012,7014],{},[1307,7013,20],{"href":21}," - Learn the core concepts and start using evlog",[7016,7017,7018],"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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":147,"searchDepth":252,"depth":252,"links":7020},[7021,7022,7031,7038,7041,7042],{"id":135,"depth":252,"text":136},{"id":211,"depth":252,"text":212,"children":7023},[7024,7025,7026,7027,7028,7029,7030],{"id":216,"depth":279,"text":217},{"id":354,"depth":279,"text":355},{"id":1316,"depth":279,"text":1317},{"id":1588,"depth":279,"text":1589},{"id":1865,"depth":279,"text":1866},{"id":2233,"depth":279,"text":2234},{"id":2719,"depth":279,"text":2720},{"id":3332,"depth":252,"text":3333,"children":7032},[7033,7034,7035,7036,7037],{"id":3569,"depth":279,"text":3570},{"id":3974,"depth":279,"text":3975},{"id":4503,"depth":279,"text":3530},{"id":5254,"depth":279,"text":5255},{"id":5786,"depth":279,"text":5787},{"id":6182,"depth":252,"text":6183,"children":7039},[7040],{"id":6481,"depth":279,"text":6482},{"id":6995,"depth":252,"text":6996},{"id":7006,"depth":252,"text":7007},"Install evlog in your Nuxt, Next.js, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[7046],{"label":20,"icon":23,"to":21,"color":1303,"variant":7047},"subtle",{},{"title":15,"icon":18},{"title":124,"description":7043},"l2JjmzTc35Z_1mUPgo9UPZMe-U5vTd1XuCzn6owgoR0",[7053,7055],{"title":10,"path":11,"stem":12,"description":7054,"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":7056,"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.",1771152855747]