[{"data":1,"prerenderedAt":2948},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nitro":219,"-frameworks-nitro-surround":2943},[4,30,105,139,188,205],{"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},"Frameworks","/frameworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100],{"title":36,"path":37,"stem":38,"icon":39},"Overview","/frameworks/overview","2.frameworks/00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","/frameworks/nuxt","2.frameworks/01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","/frameworks/nextjs","2.frameworks/02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","/frameworks/sveltekit","2.frameworks/03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","/frameworks/nitro","2.frameworks/04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","/frameworks/tanstack-start","2.frameworks/05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","/frameworks/nestjs","2.frameworks/06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","/frameworks/express","2.frameworks/07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","/frameworks/hono","2.frameworks/08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","/frameworks/fastify","2.frameworks/09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","/frameworks/elysia","2.frameworks/10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","/frameworks/cloudflare-workers","2.frameworks/11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","/frameworks/standalone","2.frameworks/12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","/frameworks/astro","2.frameworks/13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Core Concepts","/core-concepts","3.core-concepts",[110,115,120,125,129,134],{"title":111,"path":112,"stem":113,"icon":114},"Wide Events","/core-concepts/wide-events","3.core-concepts/1.wide-events","i-lucide-layers",{"title":116,"path":117,"stem":118,"icon":119},"Structured Errors","/core-concepts/structured-errors","3.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":121,"path":122,"stem":123,"icon":124},"Best Practices","/core-concepts/best-practices","3.core-concepts/3.best-practices","i-lucide-shield-check",{"title":126,"path":127,"stem":128,"icon":99},"Typed Fields","/core-concepts/typed-fields","3.core-concepts/4.typed-fields",{"title":130,"path":131,"stem":132,"icon":133},"Sampling","/core-concepts/sampling","3.core-concepts/5.sampling","i-lucide-filter",{"title":135,"path":136,"stem":137,"icon":138},"Client Logging","/core-concepts/client-logging","3.core-concepts/6.client-logging","i-lucide-monitor",{"title":140,"path":141,"stem":142,"children":143,"page":29},"Adapters","/adapters","4.adapters",[144,148,153,158,163,168,173,178,183],{"title":36,"path":145,"stem":146,"icon":147},"/adapters/overview","4.adapters/1.overview","i-custom-plug",{"title":149,"path":150,"stem":151,"icon":152},"Axiom","/adapters/axiom","4.adapters/2.axiom","i-custom-axiom",{"title":154,"path":155,"stem":156,"icon":157},"OTLP","/adapters/otlp","4.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":159,"path":160,"stem":161,"icon":162},"PostHog","/adapters/posthog","4.adapters/4.posthog","i-simple-icons-posthog",{"title":164,"path":165,"stem":166,"icon":167},"Sentry","/adapters/sentry","4.adapters/5.sentry","i-simple-icons-sentry",{"title":169,"path":170,"stem":171,"icon":172},"Better Stack","/adapters/better-stack","4.adapters/6.better-stack","i-simple-icons-betterstack",{"title":174,"path":175,"stem":176,"icon":177},"Custom Adapters","/adapters/custom","4.adapters/7.custom","i-lucide-code",{"title":179,"path":180,"stem":181,"icon":182},"Pipeline","/adapters/pipeline","4.adapters/8.pipeline","i-lucide-workflow",{"title":184,"path":185,"stem":186,"icon":187},"Browser","/adapters/browser","4.adapters/9.browser","i-lucide-globe",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Enrichers","/enrichers","5.enrichers",[193,196,201],{"title":36,"path":194,"stem":195,"icon":28},"/enrichers/overview","5.enrichers/1.overview",{"title":197,"path":198,"stem":199,"icon":200},"Built-in","/enrichers/built-in","5.enrichers/2.built-in","i-lucide-puzzle",{"title":202,"path":203,"stem":204,"icon":177},"Custom","/enrichers/custom","5.enrichers/3.custom",{"title":206,"path":207,"stem":208,"children":209,"page":29},"NuxtHub","/nuxthub","6.nuxthub",[210,214],{"title":36,"path":211,"stem":212,"icon":213},"/nuxthub/overview","6.nuxthub/1.overview","i-lucide-database",{"title":215,"path":216,"stem":217,"icon":218},"Retention","/nuxthub/retention","6.nuxthub/2.retention","i-lucide-clock",{"id":220,"title":56,"body":221,"description":2936,"extension":2937,"links":2938,"meta":2939,"navigation":2940,"path":57,"seo":2941,"stem":58,"__hash__":2942},"docs/2.frameworks/04.nitro.md",{"type":222,"value":223,"toc":2917},"minimark",[224,233,237,242,313,317,590,593,599,1071,1074,1133,1137,1155,1517,1533,1537,1541,1556,1938,1952,1956,1959,1963,2198,2210,2214,2373,2384,2387,2391,2394,2749,2752,2756,2763,2906,2913],[225,226,227,228,232],"p",{},"evlog provides modules for both Nitro v3 and Nitro v2 (nitropack). The module hooks into the request lifecycle, creating a request-scoped logger accessible via ",[229,230,231],"code",{},"useLogger(event)",", and emits a wide event when the response completes.",[234,235,20],"h2",{"id":236},"quick-start",[238,239,241],"h3",{"id":240},"_1-install","1. Install",[243,244,245,270,285,299],"code-group",{},[246,247,253],"pre",{"className":248,"code":249,"filename":250,"language":251,"meta":252,"style":252},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[229,254,255],{"__ignoreMap":252},[256,257,260,263,267],"span",{"class":258,"line":259},"line",1,[256,261,250],{"class":262},"sBMFI",[256,264,266],{"class":265},"sfazB"," add",[256,268,269],{"class":265}," evlog\n",[246,271,274],{"className":248,"code":272,"filename":273,"language":251,"meta":252,"style":252},"npm install evlog\n","npm",[229,275,276],{"__ignoreMap":252},[256,277,278,280,283],{"class":258,"line":259},[256,279,273],{"class":262},[256,281,282],{"class":265}," install",[256,284,269],{"class":265},[246,286,289],{"className":248,"code":287,"filename":288,"language":251,"meta":252,"style":252},"yarn add evlog\n","yarn",[229,290,291],{"__ignoreMap":252},[256,292,293,295,297],{"class":258,"line":259},[256,294,288],{"class":262},[256,296,266],{"class":265},[256,298,269],{"class":265},[246,300,303],{"className":248,"code":301,"filename":302,"language":251,"meta":252,"style":252},"bun add evlog\n","bun",[229,304,305],{"__ignoreMap":252},[256,306,307,309,311],{"class":258,"line":259},[256,308,302],{"class":262},[256,310,266],{"class":265},[256,312,269],{"class":265},[238,314,316],{"id":315},"_2-add-the-module","2. Add the module",[243,318,319,477],{},[246,320,325],{"className":321,"code":322,"filename":323,"language":324,"meta":252,"style":252},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","nitro.config.ts (v3)","typescript",[229,326,327,356,374,381,399,412,422,448,460,468],{"__ignoreMap":252},[256,328,329,333,337,341,344,347,350,353],{"class":258,"line":259},[256,330,332],{"class":331},"s7zQu","import",[256,334,336],{"class":335},"sMK4o"," {",[256,338,340],{"class":339},"sTEyZ"," defineConfig",[256,342,343],{"class":335}," }",[256,345,346],{"class":331}," from",[256,348,349],{"class":335}," '",[256,351,352],{"class":265},"nitro",[256,354,355],{"class":335},"'\n",[256,357,359,361,364,367,369,372],{"class":258,"line":358},2,[256,360,332],{"class":331},[256,362,363],{"class":339}," evlog ",[256,365,366],{"class":331},"from",[256,368,349],{"class":335},[256,370,371],{"class":265},"evlog/nitro/v3",[256,373,355],{"class":335},[256,375,377],{"class":258,"line":376},3,[256,378,380],{"emptyLinePlaceholder":379},true,"\n",[256,382,384,387,390,393,396],{"class":258,"line":383},4,[256,385,386],{"class":331},"export",[256,388,389],{"class":331}," default",[256,391,340],{"class":392},"s2Zo4",[256,394,395],{"class":339},"(",[256,397,398],{"class":335},"{\n",[256,400,402,406,409],{"class":258,"line":401},5,[256,403,405],{"class":404},"swJcz","  modules",[256,407,408],{"class":335},":",[256,410,411],{"class":339}," [\n",[256,413,415,418,420],{"class":258,"line":414},6,[256,416,417],{"class":392},"    evlog",[256,419,395],{"class":339},[256,421,398],{"class":335},[256,423,425,428,430,432,435,437,439,442,445],{"class":258,"line":424},7,[256,426,427],{"class":404},"      env",[256,429,408],{"class":335},[256,431,336],{"class":335},[256,433,434],{"class":404}," service",[256,436,408],{"class":335},[256,438,349],{"class":335},[256,440,441],{"class":265},"my-app",[256,443,444],{"class":335},"'",[256,446,447],{"class":335}," },\n",[256,449,451,454,457],{"class":258,"line":450},8,[256,452,453],{"class":335},"    }",[256,455,456],{"class":339},")",[256,458,459],{"class":335},",\n",[256,461,463,466],{"class":258,"line":462},9,[256,464,465],{"class":339},"  ]",[256,467,459],{"class":335},[256,469,471,474],{"class":258,"line":470},10,[256,472,473],{"class":335},"}",[256,475,476],{"class":339},")\n",[246,478,481],{"className":321,"code":479,"filename":480,"language":324,"meta":252,"style":252},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","nitro.config.ts (v2)",[229,482,483,503,518,522,534,542,550,570,578,584],{"__ignoreMap":252},[256,484,485,487,489,492,494,496,498,501],{"class":258,"line":259},[256,486,332],{"class":331},[256,488,336],{"class":335},[256,490,491],{"class":339}," defineNitroConfig",[256,493,343],{"class":335},[256,495,346],{"class":331},[256,497,349],{"class":335},[256,499,500],{"class":265},"nitropack/config",[256,502,355],{"class":335},[256,504,505,507,509,511,513,516],{"class":258,"line":358},[256,506,332],{"class":331},[256,508,363],{"class":339},[256,510,366],{"class":331},[256,512,349],{"class":335},[256,514,515],{"class":265},"evlog/nitro",[256,517,355],{"class":335},[256,519,520],{"class":258,"line":376},[256,521,380],{"emptyLinePlaceholder":379},[256,523,524,526,528,530,532],{"class":258,"line":383},[256,525,386],{"class":331},[256,527,389],{"class":331},[256,529,491],{"class":392},[256,531,395],{"class":339},[256,533,398],{"class":335},[256,535,536,538,540],{"class":258,"line":401},[256,537,405],{"class":404},[256,539,408],{"class":335},[256,541,411],{"class":339},[256,543,544,546,548],{"class":258,"line":414},[256,545,417],{"class":392},[256,547,395],{"class":339},[256,549,398],{"class":335},[256,551,552,554,556,558,560,562,564,566,568],{"class":258,"line":424},[256,553,427],{"class":404},[256,555,408],{"class":335},[256,557,336],{"class":335},[256,559,434],{"class":404},[256,561,408],{"class":335},[256,563,349],{"class":335},[256,565,441],{"class":265},[256,567,444],{"class":335},[256,569,447],{"class":335},[256,571,572,574,576],{"class":258,"line":450},[256,573,453],{"class":335},[256,575,456],{"class":339},[256,577,459],{"class":335},[256,579,580,582],{"class":258,"line":462},[256,581,465],{"class":339},[256,583,459],{"class":335},[256,585,586,588],{"class":258,"line":470},[256,587,473],{"class":335},[256,589,476],{"class":339},[234,591,111],{"id":592},"wide-events",[225,594,595,596,598],{},"Build up context progressively throughout a request with ",[229,597,231],{},". evlog emits a single wide event when the request completes.",[243,600,601,852],{},[246,602,605],{"className":321,"code":603,"filename":604,"language":324,"meta":252,"style":252},"import { defineHandler } from 'nitro/h3'\nimport { useLogger } from 'evlog/nitro/v3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId } })\n  log.set({ cart: { items: body.items.length, total: body.total } })\n\n  return { success: true }\n})\n","routes/api/checkout.post.ts (v3)",[229,606,607,627,646,650,679,698,719,723,764,821,825,845],{"__ignoreMap":252},[256,608,609,611,613,616,618,620,622,625],{"class":258,"line":259},[256,610,332],{"class":331},[256,612,336],{"class":335},[256,614,615],{"class":339}," defineHandler",[256,617,343],{"class":335},[256,619,346],{"class":331},[256,621,349],{"class":335},[256,623,624],{"class":265},"nitro/h3",[256,626,355],{"class":335},[256,628,629,631,633,636,638,640,642,644],{"class":258,"line":358},[256,630,332],{"class":331},[256,632,336],{"class":335},[256,634,635],{"class":339}," useLogger",[256,637,343],{"class":335},[256,639,346],{"class":331},[256,641,349],{"class":335},[256,643,371],{"class":265},[256,645,355],{"class":335},[256,647,648],{"class":258,"line":376},[256,649,380],{"emptyLinePlaceholder":379},[256,651,652,654,656,658,660,664,667,671,673,676],{"class":258,"line":383},[256,653,386],{"class":331},[256,655,389],{"class":331},[256,657,615],{"class":392},[256,659,395],{"class":339},[256,661,663],{"class":662},"spNyl","async",[256,665,666],{"class":335}," (",[256,668,670],{"class":669},"sHdIc","event",[256,672,456],{"class":335},[256,674,675],{"class":662}," =>",[256,677,678],{"class":335}," {\n",[256,680,681,684,687,690,692,694,696],{"class":258,"line":401},[256,682,683],{"class":662},"  const",[256,685,686],{"class":339}," log",[256,688,689],{"class":335}," =",[256,691,635],{"class":392},[256,693,395],{"class":404},[256,695,670],{"class":339},[256,697,476],{"class":404},[256,699,700,702,705,707,710,713,715,717],{"class":258,"line":414},[256,701,683],{"class":662},[256,703,704],{"class":339}," body",[256,706,689],{"class":335},[256,708,709],{"class":331}," await",[256,711,712],{"class":392}," readBody",[256,714,395],{"class":404},[256,716,670],{"class":339},[256,718,476],{"class":404},[256,720,721],{"class":258,"line":424},[256,722,380],{"emptyLinePlaceholder":379},[256,724,725,728,731,734,736,739,742,744,746,749,751,753,755,758,760,762],{"class":258,"line":450},[256,726,727],{"class":339},"  log",[256,729,730],{"class":335},".",[256,732,733],{"class":392},"set",[256,735,395],{"class":404},[256,737,738],{"class":335},"{",[256,740,741],{"class":404}," user",[256,743,408],{"class":335},[256,745,336],{"class":335},[256,747,748],{"class":404}," id",[256,750,408],{"class":335},[256,752,704],{"class":339},[256,754,730],{"class":335},[256,756,757],{"class":339},"userId",[256,759,343],{"class":335},[256,761,343],{"class":335},[256,763,476],{"class":404},[256,765,766,768,770,772,774,776,779,781,783,786,788,790,792,795,797,800,803,806,808,810,812,815,817,819],{"class":258,"line":462},[256,767,727],{"class":339},[256,769,730],{"class":335},[256,771,733],{"class":392},[256,773,395],{"class":404},[256,775,738],{"class":335},[256,777,778],{"class":404}," cart",[256,780,408],{"class":335},[256,782,336],{"class":335},[256,784,785],{"class":404}," items",[256,787,408],{"class":335},[256,789,704],{"class":339},[256,791,730],{"class":335},[256,793,794],{"class":339},"items",[256,796,730],{"class":335},[256,798,799],{"class":339},"length",[256,801,802],{"class":335},",",[256,804,805],{"class":404}," total",[256,807,408],{"class":335},[256,809,704],{"class":339},[256,811,730],{"class":335},[256,813,814],{"class":339},"total",[256,816,343],{"class":335},[256,818,343],{"class":335},[256,820,476],{"class":404},[256,822,823],{"class":258,"line":470},[256,824,380],{"emptyLinePlaceholder":379},[256,826,828,831,833,836,838,842],{"class":258,"line":827},11,[256,829,830],{"class":331},"  return",[256,832,336],{"class":335},[256,834,835],{"class":404}," success",[256,837,408],{"class":335},[256,839,841],{"class":840},"sfNiH"," true",[256,843,844],{"class":335}," }\n",[256,846,848,850],{"class":258,"line":847},12,[256,849,473],{"class":335},[256,851,476],{"class":339},[246,853,856],{"className":321,"code":854,"filename":855,"language":324,"meta":252,"style":252},"import { defineEventHandler, readBody } from 'h3'\nimport { useLogger } from 'evlog/nitro'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId } })\n  log.set({ cart: { items: body.items.length, total: body.total } })\n\n  return { success: true }\n})\n","routes/api/checkout.post.ts (v2)",[229,857,858,881,899,903,925,941,959,963,997,1047,1051,1065],{"__ignoreMap":252},[256,859,860,862,864,867,869,871,873,875,877,879],{"class":258,"line":259},[256,861,332],{"class":331},[256,863,336],{"class":335},[256,865,866],{"class":339}," defineEventHandler",[256,868,802],{"class":335},[256,870,712],{"class":339},[256,872,343],{"class":335},[256,874,346],{"class":331},[256,876,349],{"class":335},[256,878,238],{"class":265},[256,880,355],{"class":335},[256,882,883,885,887,889,891,893,895,897],{"class":258,"line":358},[256,884,332],{"class":331},[256,886,336],{"class":335},[256,888,635],{"class":339},[256,890,343],{"class":335},[256,892,346],{"class":331},[256,894,349],{"class":335},[256,896,515],{"class":265},[256,898,355],{"class":335},[256,900,901],{"class":258,"line":376},[256,902,380],{"emptyLinePlaceholder":379},[256,904,905,907,909,911,913,915,917,919,921,923],{"class":258,"line":383},[256,906,386],{"class":331},[256,908,389],{"class":331},[256,910,866],{"class":392},[256,912,395],{"class":339},[256,914,663],{"class":662},[256,916,666],{"class":335},[256,918,670],{"class":669},[256,920,456],{"class":335},[256,922,675],{"class":662},[256,924,678],{"class":335},[256,926,927,929,931,933,935,937,939],{"class":258,"line":401},[256,928,683],{"class":662},[256,930,686],{"class":339},[256,932,689],{"class":335},[256,934,635],{"class":392},[256,936,395],{"class":404},[256,938,670],{"class":339},[256,940,476],{"class":404},[256,942,943,945,947,949,951,953,955,957],{"class":258,"line":414},[256,944,683],{"class":662},[256,946,704],{"class":339},[256,948,689],{"class":335},[256,950,709],{"class":331},[256,952,712],{"class":392},[256,954,395],{"class":404},[256,956,670],{"class":339},[256,958,476],{"class":404},[256,960,961],{"class":258,"line":424},[256,962,380],{"emptyLinePlaceholder":379},[256,964,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995],{"class":258,"line":450},[256,966,727],{"class":339},[256,968,730],{"class":335},[256,970,733],{"class":392},[256,972,395],{"class":404},[256,974,738],{"class":335},[256,976,741],{"class":404},[256,978,408],{"class":335},[256,980,336],{"class":335},[256,982,748],{"class":404},[256,984,408],{"class":335},[256,986,704],{"class":339},[256,988,730],{"class":335},[256,990,757],{"class":339},[256,992,343],{"class":335},[256,994,343],{"class":335},[256,996,476],{"class":404},[256,998,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045],{"class":258,"line":462},[256,1000,727],{"class":339},[256,1002,730],{"class":335},[256,1004,733],{"class":392},[256,1006,395],{"class":404},[256,1008,738],{"class":335},[256,1010,778],{"class":404},[256,1012,408],{"class":335},[256,1014,336],{"class":335},[256,1016,785],{"class":404},[256,1018,408],{"class":335},[256,1020,704],{"class":339},[256,1022,730],{"class":335},[256,1024,794],{"class":339},[256,1026,730],{"class":335},[256,1028,799],{"class":339},[256,1030,802],{"class":335},[256,1032,805],{"class":404},[256,1034,408],{"class":335},[256,1036,704],{"class":339},[256,1038,730],{"class":335},[256,1040,814],{"class":339},[256,1042,343],{"class":335},[256,1044,343],{"class":335},[256,1046,476],{"class":404},[256,1048,1049],{"class":258,"line":470},[256,1050,380],{"emptyLinePlaceholder":379},[256,1052,1053,1055,1057,1059,1061,1063],{"class":258,"line":827},[256,1054,830],{"class":331},[256,1056,336],{"class":335},[256,1058,835],{"class":404},[256,1060,408],{"class":335},[256,1062,841],{"class":840},[256,1064,844],{"class":335},[256,1066,1067,1069],{"class":258,"line":847},[256,1068,473],{"class":335},[256,1070,476],{"class":339},[225,1072,1073],{},"One request, one log line with all context:",[246,1075,1078],{"className":248,"code":1076,"filename":1077,"language":251,"meta":252,"style":252},"10:23:45 INFO [my-app] POST /api/checkout 200 in 145ms\n  ├─ user: id=usr_123\n  ├─ cart: items=3 total=14999\n  └─ requestId: a1b2c3d4-...\n","Terminal output",[229,1079,1080,1091,1102,1122],{"__ignoreMap":252},[256,1081,1082,1085,1088],{"class":258,"line":259},[256,1083,1084],{"class":262},"10:23:45",[256,1086,1087],{"class":265}," INFO",[256,1089,1090],{"class":339}," [my-app] POST /api/checkout 200 in 145ms\n",[256,1092,1093,1096,1099],{"class":258,"line":358},[256,1094,1095],{"class":262},"  ├─",[256,1097,1098],{"class":265}," user:",[256,1100,1101],{"class":265}," id=usr_123\n",[256,1103,1104,1106,1109,1112,1116,1119],{"class":258,"line":376},[256,1105,1095],{"class":262},[256,1107,1108],{"class":265}," cart:",[256,1110,1111],{"class":265}," items=",[256,1113,1115],{"class":1114},"sbssI","3",[256,1117,1118],{"class":265}," total=",[256,1120,1121],{"class":1114},"14999\n",[256,1123,1124,1127,1130],{"class":258,"line":383},[256,1125,1126],{"class":262},"  └─",[256,1128,1129],{"class":265}," requestId:",[256,1131,1132],{"class":265}," a1b2c3d4-...\n",[234,1134,1136],{"id":1135},"error-handling","Error Handling",[225,1138,1139,1142,1143,1146,1147,1150,1151,1154],{},[229,1140,1141],{},"createError"," produces structured errors with ",[229,1144,1145],{},"why",", ",[229,1148,1149],{},"fix",", and ",[229,1152,1153],{},"link"," fields that help both humans and AI agents understand what went wrong.",[243,1156,1157,1335],{},[246,1158,1161],{"className":321,"code":1159,"filename":1160,"language":324,"meta":252,"style":252},"import { defineHandler } from 'nitro/h3'\nimport { useLogger, createError } from 'evlog/nitro/v3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n\n  throw createError({\n    status: 402,\n    message: 'Payment failed',\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n  })\n})\n","routes/api/payment.post.ts (v3)",[229,1162,1163,1181,1204,1208,1230,1246,1250,1261,1273,1289,1305,1321,1328],{"__ignoreMap":252},[256,1164,1165,1167,1169,1171,1173,1175,1177,1179],{"class":258,"line":259},[256,1166,332],{"class":331},[256,1168,336],{"class":335},[256,1170,615],{"class":339},[256,1172,343],{"class":335},[256,1174,346],{"class":331},[256,1176,349],{"class":335},[256,1178,624],{"class":265},[256,1180,355],{"class":335},[256,1182,1183,1185,1187,1189,1191,1194,1196,1198,1200,1202],{"class":258,"line":358},[256,1184,332],{"class":331},[256,1186,336],{"class":335},[256,1188,635],{"class":339},[256,1190,802],{"class":335},[256,1192,1193],{"class":339}," createError",[256,1195,343],{"class":335},[256,1197,346],{"class":331},[256,1199,349],{"class":335},[256,1201,371],{"class":265},[256,1203,355],{"class":335},[256,1205,1206],{"class":258,"line":376},[256,1207,380],{"emptyLinePlaceholder":379},[256,1209,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228],{"class":258,"line":383},[256,1211,386],{"class":331},[256,1213,389],{"class":331},[256,1215,615],{"class":392},[256,1217,395],{"class":339},[256,1219,663],{"class":662},[256,1221,666],{"class":335},[256,1223,670],{"class":669},[256,1225,456],{"class":335},[256,1227,675],{"class":662},[256,1229,678],{"class":335},[256,1231,1232,1234,1236,1238,1240,1242,1244],{"class":258,"line":401},[256,1233,683],{"class":662},[256,1235,686],{"class":339},[256,1237,689],{"class":335},[256,1239,635],{"class":392},[256,1241,395],{"class":404},[256,1243,670],{"class":339},[256,1245,476],{"class":404},[256,1247,1248],{"class":258,"line":414},[256,1249,380],{"emptyLinePlaceholder":379},[256,1251,1252,1255,1257,1259],{"class":258,"line":424},[256,1253,1254],{"class":331},"  throw",[256,1256,1193],{"class":392},[256,1258,395],{"class":404},[256,1260,398],{"class":335},[256,1262,1263,1266,1268,1271],{"class":258,"line":450},[256,1264,1265],{"class":404},"    status",[256,1267,408],{"class":335},[256,1269,1270],{"class":1114}," 402",[256,1272,459],{"class":335},[256,1274,1275,1278,1280,1282,1285,1287],{"class":258,"line":462},[256,1276,1277],{"class":404},"    message",[256,1279,408],{"class":335},[256,1281,349],{"class":335},[256,1283,1284],{"class":265},"Payment failed",[256,1286,444],{"class":335},[256,1288,459],{"class":335},[256,1290,1291,1294,1296,1298,1301,1303],{"class":258,"line":470},[256,1292,1293],{"class":404},"    why",[256,1295,408],{"class":335},[256,1297,349],{"class":335},[256,1299,1300],{"class":265},"Card declined by issuer",[256,1302,444],{"class":335},[256,1304,459],{"class":335},[256,1306,1307,1310,1312,1314,1317,1319],{"class":258,"line":827},[256,1308,1309],{"class":404},"    fix",[256,1311,408],{"class":335},[256,1313,349],{"class":335},[256,1315,1316],{"class":265},"Try a different payment method",[256,1318,444],{"class":335},[256,1320,459],{"class":335},[256,1322,1323,1326],{"class":258,"line":847},[256,1324,1325],{"class":335},"  }",[256,1327,476],{"class":404},[256,1329,1331,1333],{"class":258,"line":1330},13,[256,1332,473],{"class":335},[256,1334,476],{"class":339},[246,1336,1339],{"className":321,"code":1337,"filename":1338,"language":324,"meta":252,"style":252},"import { defineEventHandler } from 'h3'\nimport { useLogger } from 'evlog/nitro'\nimport { createError } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  throw createError({\n    status: 402,\n    message: 'Payment failed',\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n  })\n})\n","routes/api/payment.post.ts (v2)",[229,1340,1341,1359,1377,1396,1400,1422,1438,1442,1452,1462,1476,1490,1504,1510],{"__ignoreMap":252},[256,1342,1343,1345,1347,1349,1351,1353,1355,1357],{"class":258,"line":259},[256,1344,332],{"class":331},[256,1346,336],{"class":335},[256,1348,866],{"class":339},[256,1350,343],{"class":335},[256,1352,346],{"class":331},[256,1354,349],{"class":335},[256,1356,238],{"class":265},[256,1358,355],{"class":335},[256,1360,1361,1363,1365,1367,1369,1371,1373,1375],{"class":258,"line":358},[256,1362,332],{"class":331},[256,1364,336],{"class":335},[256,1366,635],{"class":339},[256,1368,343],{"class":335},[256,1370,346],{"class":331},[256,1372,349],{"class":335},[256,1374,515],{"class":265},[256,1376,355],{"class":335},[256,1378,1379,1381,1383,1385,1387,1389,1391,1394],{"class":258,"line":376},[256,1380,332],{"class":331},[256,1382,336],{"class":335},[256,1384,1193],{"class":339},[256,1386,343],{"class":335},[256,1388,346],{"class":331},[256,1390,349],{"class":335},[256,1392,1393],{"class":265},"evlog",[256,1395,355],{"class":335},[256,1397,1398],{"class":258,"line":383},[256,1399,380],{"emptyLinePlaceholder":379},[256,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420],{"class":258,"line":401},[256,1403,386],{"class":331},[256,1405,389],{"class":331},[256,1407,866],{"class":392},[256,1409,395],{"class":339},[256,1411,663],{"class":662},[256,1413,666],{"class":335},[256,1415,670],{"class":669},[256,1417,456],{"class":335},[256,1419,675],{"class":662},[256,1421,678],{"class":335},[256,1423,1424,1426,1428,1430,1432,1434,1436],{"class":258,"line":414},[256,1425,683],{"class":662},[256,1427,686],{"class":339},[256,1429,689],{"class":335},[256,1431,635],{"class":392},[256,1433,395],{"class":404},[256,1435,670],{"class":339},[256,1437,476],{"class":404},[256,1439,1440],{"class":258,"line":424},[256,1441,380],{"emptyLinePlaceholder":379},[256,1443,1444,1446,1448,1450],{"class":258,"line":450},[256,1445,1254],{"class":331},[256,1447,1193],{"class":392},[256,1449,395],{"class":404},[256,1451,398],{"class":335},[256,1453,1454,1456,1458,1460],{"class":258,"line":462},[256,1455,1265],{"class":404},[256,1457,408],{"class":335},[256,1459,1270],{"class":1114},[256,1461,459],{"class":335},[256,1463,1464,1466,1468,1470,1472,1474],{"class":258,"line":470},[256,1465,1277],{"class":404},[256,1467,408],{"class":335},[256,1469,349],{"class":335},[256,1471,1284],{"class":265},[256,1473,444],{"class":335},[256,1475,459],{"class":335},[256,1477,1478,1480,1482,1484,1486,1488],{"class":258,"line":827},[256,1479,1293],{"class":404},[256,1481,408],{"class":335},[256,1483,349],{"class":335},[256,1485,1300],{"class":265},[256,1487,444],{"class":335},[256,1489,459],{"class":335},[256,1491,1492,1494,1496,1498,1500,1502],{"class":258,"line":847},[256,1493,1309],{"class":404},[256,1495,408],{"class":335},[256,1497,349],{"class":335},[256,1499,1316],{"class":265},[256,1501,444],{"class":335},[256,1503,459],{"class":335},[256,1505,1506,1508],{"class":258,"line":1330},[256,1507,1325],{"class":335},[256,1509,476],{"class":404},[256,1511,1513,1515],{"class":258,"line":1512},14,[256,1514,473],{"class":335},[256,1516,476],{"class":339},[1518,1519,1521,1522,1524,1525,1527,1528,1524,1530,1532],"callout",{"color":1520,"icon":13},"info","In Nitro v3, import ",[229,1523,1141],{}," from ",[229,1526,371],{}," — it wraps the Nitro error handler. In Nitro v2, import ",[229,1529,1141],{},[229,1531,1393],{}," directly.",[234,1534,1536],{"id":1535},"configuration","Configuration",[238,1538,1540],{"id":1539},"route-filtering","Route Filtering",[225,1542,1543,1544,1547,1548,1551,1552,1555],{},"Use ",[229,1545,1546],{},"include"," and ",[229,1549,1550],{},"exclude"," to control which routes are logged, and ",[229,1553,1554],{},"routes"," to assign different service names to different route groups:",[243,1557,1558,1755],{},[246,1559,1561],{"className":321,"code":1560,"filename":323,"language":324,"meta":252,"style":252},"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      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[229,1562,1563,1581,1595,1599,1611,1619,1627,1649,1669,1678,1705,1731,1736,1742,1748],{"__ignoreMap":252},[256,1564,1565,1567,1569,1571,1573,1575,1577,1579],{"class":258,"line":259},[256,1566,332],{"class":331},[256,1568,336],{"class":335},[256,1570,340],{"class":339},[256,1572,343],{"class":335},[256,1574,346],{"class":331},[256,1576,349],{"class":335},[256,1578,352],{"class":265},[256,1580,355],{"class":335},[256,1582,1583,1585,1587,1589,1591,1593],{"class":258,"line":358},[256,1584,332],{"class":331},[256,1586,363],{"class":339},[256,1588,366],{"class":331},[256,1590,349],{"class":335},[256,1592,371],{"class":265},[256,1594,355],{"class":335},[256,1596,1597],{"class":258,"line":376},[256,1598,380],{"emptyLinePlaceholder":379},[256,1600,1601,1603,1605,1607,1609],{"class":258,"line":383},[256,1602,386],{"class":331},[256,1604,389],{"class":331},[256,1606,340],{"class":392},[256,1608,395],{"class":339},[256,1610,398],{"class":335},[256,1612,1613,1615,1617],{"class":258,"line":401},[256,1614,405],{"class":404},[256,1616,408],{"class":335},[256,1618,411],{"class":339},[256,1620,1621,1623,1625],{"class":258,"line":414},[256,1622,417],{"class":392},[256,1624,395],{"class":339},[256,1626,398],{"class":335},[256,1628,1629,1632,1634,1637,1639,1642,1644,1647],{"class":258,"line":424},[256,1630,1631],{"class":404},"      include",[256,1633,408],{"class":335},[256,1635,1636],{"class":339}," [",[256,1638,444],{"class":335},[256,1640,1641],{"class":265},"/api/**",[256,1643,444],{"class":335},[256,1645,1646],{"class":339},"]",[256,1648,459],{"class":335},[256,1650,1651,1654,1656,1658,1660,1663,1665,1667],{"class":258,"line":450},[256,1652,1653],{"class":404},"      exclude",[256,1655,408],{"class":335},[256,1657,1636],{"class":339},[256,1659,444],{"class":335},[256,1661,1662],{"class":265},"/api/health",[256,1664,444],{"class":335},[256,1666,1646],{"class":339},[256,1668,459],{"class":335},[256,1670,1671,1674,1676],{"class":258,"line":462},[256,1672,1673],{"class":404},"      routes",[256,1675,408],{"class":335},[256,1677,678],{"class":335},[256,1679,1680,1683,1686,1688,1690,1692,1694,1696,1698,1701,1703],{"class":258,"line":470},[256,1681,1682],{"class":335},"        '",[256,1684,1685],{"class":404},"/api/auth/**",[256,1687,444],{"class":335},[256,1689,408],{"class":335},[256,1691,336],{"class":335},[256,1693,434],{"class":404},[256,1695,408],{"class":335},[256,1697,349],{"class":335},[256,1699,1700],{"class":265},"auth-service",[256,1702,444],{"class":335},[256,1704,447],{"class":335},[256,1706,1707,1709,1712,1714,1716,1718,1720,1722,1724,1727,1729],{"class":258,"line":827},[256,1708,1682],{"class":335},[256,1710,1711],{"class":404},"/api/payment/**",[256,1713,444],{"class":335},[256,1715,408],{"class":335},[256,1717,336],{"class":335},[256,1719,434],{"class":404},[256,1721,408],{"class":335},[256,1723,349],{"class":335},[256,1725,1726],{"class":265},"payment-service",[256,1728,444],{"class":335},[256,1730,447],{"class":335},[256,1732,1733],{"class":258,"line":847},[256,1734,1735],{"class":335},"      },\n",[256,1737,1738,1740],{"class":258,"line":1330},[256,1739,453],{"class":335},[256,1741,476],{"class":339},[256,1743,1744,1746],{"class":258,"line":1512},[256,1745,465],{"class":339},[256,1747,459],{"class":335},[256,1749,1751,1753],{"class":258,"line":1750},15,[256,1752,473],{"class":335},[256,1754,476],{"class":339},[246,1756,1758],{"className":321,"code":1757,"filename":480,"language":324,"meta":252,"style":252},"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      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[229,1759,1760,1778,1792,1796,1808,1816,1824,1842,1860,1868,1892,1916,1920,1926,1932],{"__ignoreMap":252},[256,1761,1762,1764,1766,1768,1770,1772,1774,1776],{"class":258,"line":259},[256,1763,332],{"class":331},[256,1765,336],{"class":335},[256,1767,491],{"class":339},[256,1769,343],{"class":335},[256,1771,346],{"class":331},[256,1773,349],{"class":335},[256,1775,500],{"class":265},[256,1777,355],{"class":335},[256,1779,1780,1782,1784,1786,1788,1790],{"class":258,"line":358},[256,1781,332],{"class":331},[256,1783,363],{"class":339},[256,1785,366],{"class":331},[256,1787,349],{"class":335},[256,1789,515],{"class":265},[256,1791,355],{"class":335},[256,1793,1794],{"class":258,"line":376},[256,1795,380],{"emptyLinePlaceholder":379},[256,1797,1798,1800,1802,1804,1806],{"class":258,"line":383},[256,1799,386],{"class":331},[256,1801,389],{"class":331},[256,1803,491],{"class":392},[256,1805,395],{"class":339},[256,1807,398],{"class":335},[256,1809,1810,1812,1814],{"class":258,"line":401},[256,1811,405],{"class":404},[256,1813,408],{"class":335},[256,1815,411],{"class":339},[256,1817,1818,1820,1822],{"class":258,"line":414},[256,1819,417],{"class":392},[256,1821,395],{"class":339},[256,1823,398],{"class":335},[256,1825,1826,1828,1830,1832,1834,1836,1838,1840],{"class":258,"line":424},[256,1827,1631],{"class":404},[256,1829,408],{"class":335},[256,1831,1636],{"class":339},[256,1833,444],{"class":335},[256,1835,1641],{"class":265},[256,1837,444],{"class":335},[256,1839,1646],{"class":339},[256,1841,459],{"class":335},[256,1843,1844,1846,1848,1850,1852,1854,1856,1858],{"class":258,"line":450},[256,1845,1653],{"class":404},[256,1847,408],{"class":335},[256,1849,1636],{"class":339},[256,1851,444],{"class":335},[256,1853,1662],{"class":265},[256,1855,444],{"class":335},[256,1857,1646],{"class":339},[256,1859,459],{"class":335},[256,1861,1862,1864,1866],{"class":258,"line":462},[256,1863,1673],{"class":404},[256,1865,408],{"class":335},[256,1867,678],{"class":335},[256,1869,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890],{"class":258,"line":470},[256,1871,1682],{"class":335},[256,1873,1685],{"class":404},[256,1875,444],{"class":335},[256,1877,408],{"class":335},[256,1879,336],{"class":335},[256,1881,434],{"class":404},[256,1883,408],{"class":335},[256,1885,349],{"class":335},[256,1887,1700],{"class":265},[256,1889,444],{"class":335},[256,1891,447],{"class":335},[256,1893,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914],{"class":258,"line":827},[256,1895,1682],{"class":335},[256,1897,1711],{"class":404},[256,1899,444],{"class":335},[256,1901,408],{"class":335},[256,1903,336],{"class":335},[256,1905,434],{"class":404},[256,1907,408],{"class":335},[256,1909,349],{"class":335},[256,1911,1726],{"class":265},[256,1913,444],{"class":335},[256,1915,447],{"class":335},[256,1917,1918],{"class":258,"line":847},[256,1919,1735],{"class":335},[256,1921,1922,1924],{"class":258,"line":1330},[256,1923,453],{"class":335},[256,1925,476],{"class":339},[256,1927,1928,1930],{"class":258,"line":1512},[256,1929,465],{"class":339},[256,1931,459],{"class":335},[256,1933,1934,1936],{"class":258,"line":1750},[256,1935,473],{"class":335},[256,1937,476],{"class":339},[1518,1939,1942,1946,1947,1547,1949,1951],{"color":1940,"icon":1941},"warning","i-lucide-alert-triangle",[1943,1944,1945],"strong",{},"Exclusions take precedence."," If a path matches both ",[229,1948,1546],{},[229,1950,1550],{},", it will be excluded.",[234,1953,1955],{"id":1954},"drain-enrichers","Drain & Enrichers",[225,1957,1958],{},"Use Nitro plugin hooks to send logs to external services and enrich them with additional context.",[238,1960,1962],{"id":1961},"drain-plugin","Drain Plugin",[246,1964,1967],{"className":321,"code":1965,"filename":1966,"language":324,"meta":252,"style":252},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","server/plugins/evlog-drain.ts",[229,1968,1969,1991,2011,2031,2035,2061,2090,2109,2115,2135,2139,2161,2192],{"__ignoreMap":252},[256,1970,1971,1973,1976,1978,1981,1983,1985,1987,1989],{"class":258,"line":259},[256,1972,332],{"class":331},[256,1974,1975],{"class":331}," type",[256,1977,336],{"class":335},[256,1979,1980],{"class":339}," DrainContext",[256,1982,343],{"class":335},[256,1984,346],{"class":331},[256,1986,349],{"class":335},[256,1988,1393],{"class":265},[256,1990,355],{"class":335},[256,1992,1993,1995,1997,2000,2002,2004,2006,2009],{"class":258,"line":358},[256,1994,332],{"class":331},[256,1996,336],{"class":335},[256,1998,1999],{"class":339}," createAxiomDrain",[256,2001,343],{"class":335},[256,2003,346],{"class":331},[256,2005,349],{"class":335},[256,2007,2008],{"class":265},"evlog/axiom",[256,2010,355],{"class":335},[256,2012,2013,2015,2017,2020,2022,2024,2026,2029],{"class":258,"line":376},[256,2014,332],{"class":331},[256,2016,336],{"class":335},[256,2018,2019],{"class":339}," createDrainPipeline",[256,2021,343],{"class":335},[256,2023,346],{"class":331},[256,2025,349],{"class":335},[256,2027,2028],{"class":265},"evlog/pipeline",[256,2030,355],{"class":335},[256,2032,2033],{"class":258,"line":383},[256,2034,380],{"emptyLinePlaceholder":379},[256,2036,2037,2040,2043,2046,2048,2051,2054,2057,2059],{"class":258,"line":401},[256,2038,2039],{"class":662},"const",[256,2041,2042],{"class":339}," pipeline ",[256,2044,2045],{"class":335},"=",[256,2047,2019],{"class":392},[256,2049,2050],{"class":335},"\u003C",[256,2052,2053],{"class":262},"DrainContext",[256,2055,2056],{"class":335},">",[256,2058,395],{"class":339},[256,2060,398],{"class":335},[256,2062,2063,2066,2068,2070,2073,2075,2078,2080,2083,2085,2088],{"class":258,"line":414},[256,2064,2065],{"class":404},"  batch",[256,2067,408],{"class":335},[256,2069,336],{"class":335},[256,2071,2072],{"class":404}," size",[256,2074,408],{"class":335},[256,2076,2077],{"class":1114}," 50",[256,2079,802],{"class":335},[256,2081,2082],{"class":404}," intervalMs",[256,2084,408],{"class":335},[256,2086,2087],{"class":1114}," 5000",[256,2089,447],{"class":335},[256,2091,2092,2095,2097,2099,2102,2104,2107],{"class":258,"line":424},[256,2093,2094],{"class":404},"  retry",[256,2096,408],{"class":335},[256,2098,336],{"class":335},[256,2100,2101],{"class":404}," maxAttempts",[256,2103,408],{"class":335},[256,2105,2106],{"class":1114}," 3",[256,2108,447],{"class":335},[256,2110,2111,2113],{"class":258,"line":450},[256,2112,473],{"class":335},[256,2114,476],{"class":339},[256,2116,2117,2119,2122,2124,2127,2129,2132],{"class":258,"line":462},[256,2118,2039],{"class":662},[256,2120,2121],{"class":339}," drain ",[256,2123,2045],{"class":335},[256,2125,2126],{"class":392}," pipeline",[256,2128,395],{"class":339},[256,2130,2131],{"class":392},"createAxiomDrain",[256,2133,2134],{"class":339},"())\n",[256,2136,2137],{"class":258,"line":470},[256,2138,380],{"emptyLinePlaceholder":379},[256,2140,2141,2143,2145,2148,2150,2152,2155,2157,2159],{"class":258,"line":827},[256,2142,386],{"class":331},[256,2144,389],{"class":331},[256,2146,2147],{"class":392}," defineNitroPlugin",[256,2149,395],{"class":339},[256,2151,395],{"class":335},[256,2153,2154],{"class":669},"nitroApp",[256,2156,456],{"class":335},[256,2158,675],{"class":662},[256,2160,678],{"class":335},[256,2162,2163,2166,2168,2171,2173,2176,2178,2180,2183,2185,2187,2190],{"class":258,"line":847},[256,2164,2165],{"class":339},"  nitroApp",[256,2167,730],{"class":335},[256,2169,2170],{"class":339},"hooks",[256,2172,730],{"class":335},[256,2174,2175],{"class":392},"hook",[256,2177,395],{"class":404},[256,2179,444],{"class":335},[256,2181,2182],{"class":265},"evlog:drain",[256,2184,444],{"class":335},[256,2186,802],{"class":335},[256,2188,2189],{"class":339}," drain",[256,2191,476],{"class":404},[256,2193,2194,2196],{"class":258,"line":1330},[256,2195,473],{"class":335},[256,2197,476],{"class":339},[1518,2199,2200,2201,1524,2204,2206,2207,730],{"color":1520,"icon":13},"For Nitro v3 standalone, use ",[229,2202,2203],{},"definePlugin",[229,2205,352],{}," instead of ",[229,2208,2209],{},"defineNitroPlugin",[238,2211,2213],{"id":2212},"enricher-plugin","Enricher Plugin",[246,2215,2218],{"className":321,"code":2216,"filename":2217,"language":324,"meta":252,"style":252},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog/enrichers'\n\nconst enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server/plugins/evlog-enrich.ts",[229,2219,2220,2245,2249,2273,2277,2297,2331,2361,2367],{"__ignoreMap":252},[256,2221,2222,2224,2226,2229,2231,2234,2236,2238,2240,2243],{"class":258,"line":259},[256,2223,332],{"class":331},[256,2225,336],{"class":335},[256,2227,2228],{"class":339}," createUserAgentEnricher",[256,2230,802],{"class":335},[256,2232,2233],{"class":339}," createGeoEnricher",[256,2235,343],{"class":335},[256,2237,346],{"class":331},[256,2239,349],{"class":335},[256,2241,2242],{"class":265},"evlog/enrichers",[256,2244,355],{"class":335},[256,2246,2247],{"class":258,"line":358},[256,2248,380],{"emptyLinePlaceholder":379},[256,2250,2251,2253,2256,2258,2260,2263,2266,2268,2270],{"class":258,"line":376},[256,2252,2039],{"class":662},[256,2254,2255],{"class":339}," enrichers ",[256,2257,2045],{"class":335},[256,2259,1636],{"class":339},[256,2261,2262],{"class":392},"createUserAgentEnricher",[256,2264,2265],{"class":339},"()",[256,2267,802],{"class":335},[256,2269,2233],{"class":392},[256,2271,2272],{"class":339},"()]\n",[256,2274,2275],{"class":258,"line":383},[256,2276,380],{"emptyLinePlaceholder":379},[256,2278,2279,2281,2283,2285,2287,2289,2291,2293,2295],{"class":258,"line":401},[256,2280,386],{"class":331},[256,2282,389],{"class":331},[256,2284,2147],{"class":392},[256,2286,395],{"class":339},[256,2288,395],{"class":335},[256,2290,2154],{"class":669},[256,2292,456],{"class":335},[256,2294,675],{"class":662},[256,2296,678],{"class":335},[256,2298,2299,2301,2303,2305,2307,2309,2311,2313,2316,2318,2320,2322,2325,2327,2329],{"class":258,"line":414},[256,2300,2165],{"class":339},[256,2302,730],{"class":335},[256,2304,2170],{"class":339},[256,2306,730],{"class":335},[256,2308,2175],{"class":392},[256,2310,395],{"class":404},[256,2312,444],{"class":335},[256,2314,2315],{"class":265},"evlog:enrich",[256,2317,444],{"class":335},[256,2319,802],{"class":335},[256,2321,666],{"class":335},[256,2323,2324],{"class":669},"ctx",[256,2326,456],{"class":335},[256,2328,675],{"class":662},[256,2330,678],{"class":335},[256,2332,2333,2336,2338,2340,2343,2346,2349,2352,2355,2357,2359],{"class":258,"line":424},[256,2334,2335],{"class":331},"    for",[256,2337,666],{"class":404},[256,2339,2039],{"class":662},[256,2341,2342],{"class":339}," enricher",[256,2344,2345],{"class":335}," of",[256,2347,2348],{"class":339}," enrichers",[256,2350,2351],{"class":404},") ",[256,2353,2354],{"class":392},"enricher",[256,2356,395],{"class":404},[256,2358,2324],{"class":339},[256,2360,476],{"class":404},[256,2362,2363,2365],{"class":258,"line":450},[256,2364,1325],{"class":335},[256,2366,476],{"class":404},[256,2368,2369,2371],{"class":258,"line":462},[256,2370,473],{"class":335},[256,2372,476],{"class":339},[1518,2374,2377,2378,1547,2381,2383],{"color":2375,"icon":2376},"neutral","i-lucide-arrow-right","See the ",[2379,2380,140],"a",{"href":145},[2379,2382,189],{"href":194}," docs for the full list of available drains and enrichers.",[234,2385,130],{"id":2386},"sampling",[238,2388,2390],{"id":2389},"head-sampling","Head Sampling",[225,2392,2393],{},"Randomly keep a percentage of logs per level. Runs before the request completes.",[243,2395,2396,2580],{},[246,2397,2399],{"className":321,"code":2398,"filename":323,"language":324,"meta":252,"style":252},"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        keep: [\n          { duration: 1000 },\n          { status: 400 },\n        ],\n      },\n    })\n  ],\n})\n",[229,2400,2401,2419,2433,2437,2449,2457,2465,2474,2512,2521,2536,2550,2557,2561,2567,2573],{"__ignoreMap":252},[256,2402,2403,2405,2407,2409,2411,2413,2415,2417],{"class":258,"line":259},[256,2404,332],{"class":331},[256,2406,336],{"class":335},[256,2408,340],{"class":339},[256,2410,343],{"class":335},[256,2412,346],{"class":331},[256,2414,349],{"class":335},[256,2416,352],{"class":265},[256,2418,355],{"class":335},[256,2420,2421,2423,2425,2427,2429,2431],{"class":258,"line":358},[256,2422,332],{"class":331},[256,2424,363],{"class":339},[256,2426,366],{"class":331},[256,2428,349],{"class":335},[256,2430,371],{"class":265},[256,2432,355],{"class":335},[256,2434,2435],{"class":258,"line":376},[256,2436,380],{"emptyLinePlaceholder":379},[256,2438,2439,2441,2443,2445,2447],{"class":258,"line":383},[256,2440,386],{"class":331},[256,2442,389],{"class":331},[256,2444,340],{"class":392},[256,2446,395],{"class":339},[256,2448,398],{"class":335},[256,2450,2451,2453,2455],{"class":258,"line":401},[256,2452,405],{"class":404},[256,2454,408],{"class":335},[256,2456,411],{"class":339},[256,2458,2459,2461,2463],{"class":258,"line":414},[256,2460,417],{"class":392},[256,2462,395],{"class":339},[256,2464,398],{"class":335},[256,2466,2467,2470,2472],{"class":258,"line":424},[256,2468,2469],{"class":404},"      sampling",[256,2471,408],{"class":335},[256,2473,678],{"class":335},[256,2475,2476,2479,2481,2483,2486,2488,2491,2493,2496,2498,2500,2502,2505,2507,2510],{"class":258,"line":450},[256,2477,2478],{"class":404},"        rates",[256,2480,408],{"class":335},[256,2482,336],{"class":335},[256,2484,2485],{"class":404}," info",[256,2487,408],{"class":335},[256,2489,2490],{"class":1114}," 10",[256,2492,802],{"class":335},[256,2494,2495],{"class":404}," warn",[256,2497,408],{"class":335},[256,2499,2077],{"class":1114},[256,2501,802],{"class":335},[256,2503,2504],{"class":404}," debug",[256,2506,408],{"class":335},[256,2508,2509],{"class":1114}," 5",[256,2511,447],{"class":335},[256,2513,2514,2517,2519],{"class":258,"line":462},[256,2515,2516],{"class":404},"        keep",[256,2518,408],{"class":335},[256,2520,411],{"class":339},[256,2522,2523,2526,2529,2531,2534],{"class":258,"line":470},[256,2524,2525],{"class":335},"          {",[256,2527,2528],{"class":404}," duration",[256,2530,408],{"class":335},[256,2532,2533],{"class":1114}," 1000",[256,2535,447],{"class":335},[256,2537,2538,2540,2543,2545,2548],{"class":258,"line":827},[256,2539,2525],{"class":335},[256,2541,2542],{"class":404}," status",[256,2544,408],{"class":335},[256,2546,2547],{"class":1114}," 400",[256,2549,447],{"class":335},[256,2551,2552,2555],{"class":258,"line":847},[256,2553,2554],{"class":339},"        ]",[256,2556,459],{"class":335},[256,2558,2559],{"class":258,"line":1330},[256,2560,1735],{"class":335},[256,2562,2563,2565],{"class":258,"line":1512},[256,2564,453],{"class":335},[256,2566,476],{"class":339},[256,2568,2569,2571],{"class":258,"line":1750},[256,2570,465],{"class":339},[256,2572,459],{"class":335},[256,2574,2576,2578],{"class":258,"line":2575},16,[256,2577,473],{"class":335},[256,2579,476],{"class":339},[246,2581,2583],{"className":321,"code":2582,"filename":480,"language":324,"meta":252,"style":252},"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        keep: [\n          { duration: 1000 },\n          { status: 400 },\n        ],\n      },\n    })\n  ],\n})\n",[229,2584,2585,2603,2617,2621,2633,2641,2649,2657,2689,2697,2709,2721,2727,2731,2737,2743],{"__ignoreMap":252},[256,2586,2587,2589,2591,2593,2595,2597,2599,2601],{"class":258,"line":259},[256,2588,332],{"class":331},[256,2590,336],{"class":335},[256,2592,491],{"class":339},[256,2594,343],{"class":335},[256,2596,346],{"class":331},[256,2598,349],{"class":335},[256,2600,500],{"class":265},[256,2602,355],{"class":335},[256,2604,2605,2607,2609,2611,2613,2615],{"class":258,"line":358},[256,2606,332],{"class":331},[256,2608,363],{"class":339},[256,2610,366],{"class":331},[256,2612,349],{"class":335},[256,2614,515],{"class":265},[256,2616,355],{"class":335},[256,2618,2619],{"class":258,"line":376},[256,2620,380],{"emptyLinePlaceholder":379},[256,2622,2623,2625,2627,2629,2631],{"class":258,"line":383},[256,2624,386],{"class":331},[256,2626,389],{"class":331},[256,2628,491],{"class":392},[256,2630,395],{"class":339},[256,2632,398],{"class":335},[256,2634,2635,2637,2639],{"class":258,"line":401},[256,2636,405],{"class":404},[256,2638,408],{"class":335},[256,2640,411],{"class":339},[256,2642,2643,2645,2647],{"class":258,"line":414},[256,2644,417],{"class":392},[256,2646,395],{"class":339},[256,2648,398],{"class":335},[256,2650,2651,2653,2655],{"class":258,"line":424},[256,2652,2469],{"class":404},[256,2654,408],{"class":335},[256,2656,678],{"class":335},[256,2658,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687],{"class":258,"line":450},[256,2660,2478],{"class":404},[256,2662,408],{"class":335},[256,2664,336],{"class":335},[256,2666,2485],{"class":404},[256,2668,408],{"class":335},[256,2670,2490],{"class":1114},[256,2672,802],{"class":335},[256,2674,2495],{"class":404},[256,2676,408],{"class":335},[256,2678,2077],{"class":1114},[256,2680,802],{"class":335},[256,2682,2504],{"class":404},[256,2684,408],{"class":335},[256,2686,2509],{"class":1114},[256,2688,447],{"class":335},[256,2690,2691,2693,2695],{"class":258,"line":462},[256,2692,2516],{"class":404},[256,2694,408],{"class":335},[256,2696,411],{"class":339},[256,2698,2699,2701,2703,2705,2707],{"class":258,"line":470},[256,2700,2525],{"class":335},[256,2702,2528],{"class":404},[256,2704,408],{"class":335},[256,2706,2533],{"class":1114},[256,2708,447],{"class":335},[256,2710,2711,2713,2715,2717,2719],{"class":258,"line":827},[256,2712,2525],{"class":335},[256,2714,2542],{"class":404},[256,2716,408],{"class":335},[256,2718,2547],{"class":1114},[256,2720,447],{"class":335},[256,2722,2723,2725],{"class":258,"line":847},[256,2724,2554],{"class":339},[256,2726,459],{"class":335},[256,2728,2729],{"class":258,"line":1330},[256,2730,1735],{"class":335},[256,2732,2733,2735],{"class":258,"line":1512},[256,2734,453],{"class":335},[256,2736,476],{"class":339},[256,2738,2739,2741],{"class":258,"line":1750},[256,2740,465],{"class":339},[256,2742,459],{"class":335},[256,2744,2745,2747],{"class":258,"line":2575},[256,2746,473],{"class":335},[256,2748,476],{"class":339},[225,2750,2751],{},"Each level is a percentage from 0 to 100. Levels you don't configure default to 100% (keep everything).",[238,2753,2755],{"id":2754},"custom-tail-sampling","Custom Tail Sampling",[225,2757,2758,2759,2762],{},"For conditions beyond status, duration, and path, use the ",[229,2760,2761],{},"evlog:emit:keep"," hook:",[246,2764,2767],{"className":321,"code":2765,"filename":2766,"language":324,"meta":252,"style":252},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  })\n})\n","server/plugins/evlog-sampling.ts",[229,2768,2769,2789,2821,2865,2894,2900],{"__ignoreMap":252},[256,2770,2771,2773,2775,2777,2779,2781,2783,2785,2787],{"class":258,"line":259},[256,2772,386],{"class":331},[256,2774,389],{"class":331},[256,2776,2147],{"class":392},[256,2778,395],{"class":339},[256,2780,395],{"class":335},[256,2782,2154],{"class":669},[256,2784,456],{"class":335},[256,2786,675],{"class":662},[256,2788,678],{"class":335},[256,2790,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819],{"class":258,"line":358},[256,2792,2165],{"class":339},[256,2794,730],{"class":335},[256,2796,2170],{"class":339},[256,2798,730],{"class":335},[256,2800,2175],{"class":392},[256,2802,395],{"class":404},[256,2804,444],{"class":335},[256,2806,2761],{"class":265},[256,2808,444],{"class":335},[256,2810,802],{"class":335},[256,2812,666],{"class":335},[256,2814,2324],{"class":669},[256,2816,456],{"class":335},[256,2818,675],{"class":662},[256,2820,678],{"class":335},[256,2822,2823,2826,2828,2830,2833,2835,2838,2840,2843,2846,2848,2851,2854,2857,2859,2862],{"class":258,"line":376},[256,2824,2825],{"class":662},"    const",[256,2827,741],{"class":339},[256,2829,689],{"class":335},[256,2831,2832],{"class":339}," ctx",[256,2834,730],{"class":335},[256,2836,2837],{"class":339},"context",[256,2839,730],{"class":335},[256,2841,2842],{"class":339},"user",[256,2844,2845],{"class":331}," as",[256,2847,336],{"class":335},[256,2849,2850],{"class":404}," premium",[256,2852,2853],{"class":335},"?:",[256,2855,2856],{"class":262}," boolean",[256,2858,343],{"class":335},[256,2860,2861],{"class":335}," |",[256,2863,2864],{"class":262}," undefined\n",[256,2866,2867,2870,2872,2874,2877,2880,2882,2884,2886,2889,2891],{"class":258,"line":383},[256,2868,2869],{"class":331},"    if",[256,2871,666],{"class":404},[256,2873,2842],{"class":339},[256,2875,2876],{"class":335},"?.",[256,2878,2879],{"class":339},"premium",[256,2881,2351],{"class":404},[256,2883,2324],{"class":339},[256,2885,730],{"class":335},[256,2887,2888],{"class":339},"shouldKeep",[256,2890,689],{"class":335},[256,2892,2893],{"class":840}," true\n",[256,2895,2896,2898],{"class":258,"line":401},[256,2897,1325],{"class":335},[256,2899,476],{"class":404},[256,2901,2902,2904],{"class":258,"line":414},[256,2903,473],{"class":335},[256,2905,476],{"class":339},[1518,2907,2908,2909,2912],{"color":1520,"icon":13},"Errors are always kept by default. You have to explicitly set ",[229,2910,2911],{},"error: 0"," to drop them.",[2914,2915,2916],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":252,"searchDepth":358,"depth":358,"links":2918},[2919,2923,2924,2925,2928,2932],{"id":236,"depth":358,"text":20,"children":2920},[2921,2922],{"id":240,"depth":376,"text":241},{"id":315,"depth":376,"text":316},{"id":592,"depth":358,"text":111},{"id":1135,"depth":358,"text":1136},{"id":1535,"depth":358,"text":1536,"children":2926},[2927],{"id":1539,"depth":376,"text":1540},{"id":1954,"depth":358,"text":1955,"children":2929},[2930,2931],{"id":1961,"depth":376,"text":1962},{"id":2212,"depth":376,"text":2213},{"id":2386,"depth":358,"text":130,"children":2933},[2934,2935],{"id":2389,"depth":376,"text":2390},{"id":2754,"depth":376,"text":2755},"Using evlog with Nitro — automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Nitro v2 and v3 applications.","md",null,{},{"title":56,"icon":59},{"title":56,"description":2936},"pmSHvRmMmVJzBQ29mq7reFI93LZLCH8At0t0K-jOaWU",[2944,2946],{"title":51,"path":52,"stem":53,"description":2945,"icon":54,"children":-1},"Using evlog with SvelteKit — automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.",{"title":61,"path":62,"stem":63,"description":2947,"icon":64,"children":-1},"Using evlog with TanStack Start — automatic wide events, structured errors, and logging in API routes and server functions.",1773097845588]