[{"data":1,"prerenderedAt":3366},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-tanstack-start":301,"-frameworks-tanstack-start-surround":3361},[4,30,75,119,207,271,287],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60,65,70],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"icon":69},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":71,"path":72,"stem":73,"icon":74},"Audit Logs","\u002Flogging\u002Faudit","2.logging\u002F7.audit","i-lucide-shield-check",{"title":76,"path":77,"stem":78,"children":79,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[80,85,90,95,100,104,109,114],{"title":81,"path":82,"stem":83,"icon":84},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":86,"path":87,"stem":88,"icon":89},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":91,"path":92,"stem":93,"icon":94},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":96,"path":97,"stem":98,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":74},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":105,"path":106,"stem":107,"icon":108},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":110,"path":111,"stem":112,"icon":113},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":115,"path":116,"stem":117,"icon":118},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":120,"path":121,"stem":122,"children":123,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[124,128,133,138,143,148,153,158,163,168,173,178,183,188,192,197,202],{"title":36,"path":125,"stem":126,"icon":127},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":129,"path":130,"stem":131,"icon":132},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":134,"path":135,"stem":136,"icon":137},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":139,"path":140,"stem":141,"icon":142},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":144,"path":145,"stem":146,"icon":147},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":149,"path":150,"stem":151,"icon":152},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":154,"path":155,"stem":156,"icon":157},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":159,"path":160,"stem":161,"icon":162},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":164,"path":165,"stem":166,"icon":167},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":169,"path":170,"stem":171,"icon":172},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":174,"path":175,"stem":176,"icon":177},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":179,"path":180,"stem":181,"icon":182},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":184,"path":185,"stem":186,"icon":187},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":189,"path":190,"stem":191,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":193,"path":194,"stem":195,"icon":196},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":198,"path":199,"stem":200,"icon":201},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":203,"path":204,"stem":205,"icon":206},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":208,"path":209,"stem":210,"children":211,"page":29},"Adapters","\u002Fadapters","5.adapters",[212,216,221,226,231,236,241,246,251,256,261,266],{"title":36,"path":213,"stem":214,"icon":215},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":217,"path":218,"stem":219,"icon":220},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":222,"path":223,"stem":224,"icon":225},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":227,"path":228,"stem":229,"icon":230},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":232,"path":233,"stem":234,"icon":235},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":237,"path":238,"stem":239,"icon":240},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":242,"path":243,"stem":244,"icon":245},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":247,"path":248,"stem":249,"icon":250},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":252,"path":253,"stem":254,"icon":255},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":257,"path":258,"stem":259,"icon":260},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":262,"path":263,"stem":264,"icon":265},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":267,"path":268,"stem":269,"icon":270},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":272,"path":273,"stem":274,"children":275,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[276,279,283],{"title":36,"path":277,"stem":278,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":280,"path":281,"stem":282,"icon":201},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":284,"path":285,"stem":286,"icon":220},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":288,"path":289,"stem":290,"children":291,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[292,296],{"title":36,"path":293,"stem":294,"icon":295},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":297,"path":298,"stem":299,"icon":300},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":302,"title":149,"body":303,"description":3351,"extension":3352,"links":3353,"meta":3357,"navigation":3358,"path":150,"seo":3359,"stem":151,"__hash__":3360},"docs\u002F4.frameworks\u002F05.tanstack-start.md",{"type":304,"value":305,"toc":3331},"minimark",[306,320,335,416,420,427,432,453,460,474,648,659,663,686,826,829,848,851,865,1229,1232,1303,1312,1316,1330,1862,1865,1941,1945,1951,2189,2192,2203,2207,2218,2460,2464,2471,2594,2769,2776,2780,2787,3026,3037,3041,3048,3222,3226,3267,3276,3286,3290,3296,3327],[307,308,309,310,314,315,319],"p",{},"TanStack Start uses ",[311,312,313],"a",{"href":145},"Nitro v3"," as its server layer, so evlog integrates via the ",[316,317,318],"code",{},"evlog\u002Fnitro\u002Fv3"," module. The same plugin-based hooks system applies.",[321,322,324,328,329,331,332,334],"callout",{"color":323,"icon":13},"info",[325,326,327],"strong",{},"TanStack Router vs TanStack Start",": TanStack Router is a client-side router and doesn't need server-side logging. This page covers ",[325,330,149],{},", the full-stack framework. If you're using TanStack Router in SPA mode, see ",[311,333,56],{"href":57}," instead.",[336,337,338],"code-collapse",{},[339,340,346],"pre",{"className":341,"code":342,"filename":343,"language":344,"meta":345,"style":345},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Set up evlog in my TanStack Start app.\n\n- Install evlog: pnpm add evlog\n- Create nitro.config.ts with evlog\u002Fnitro\u002Fv3 module and experimental.asyncContext enabled\n- Configure env.service with your app name\n- Add evlogErrorHandler middleware to the root route for structured error responses\n- Access the logger via useRequest().context.log in route handlers\n- Use log.set() to accumulate context, throw createError() for structured errors\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Ftanstack-start\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n","Prompt","txt","",[316,347,348,356,363,369,375,381,387,393,399,404,410],{"__ignoreMap":345},[349,350,353],"span",{"class":351,"line":352},"line",1,[349,354,355],{},"Set up evlog in my TanStack Start app.\n",[349,357,359],{"class":351,"line":358},2,[349,360,362],{"emptyLinePlaceholder":361},true,"\n",[349,364,366],{"class":351,"line":365},3,[349,367,368],{},"- Install evlog: pnpm add evlog\n",[349,370,372],{"class":351,"line":371},4,[349,373,374],{},"- Create nitro.config.ts with evlog\u002Fnitro\u002Fv3 module and experimental.asyncContext enabled\n",[349,376,378],{"class":351,"line":377},5,[349,379,380],{},"- Configure env.service with your app name\n",[349,382,384],{"class":351,"line":383},6,[349,385,386],{},"- Add evlogErrorHandler middleware to the root route for structured error responses\n",[349,388,390],{"class":351,"line":389},7,[349,391,392],{},"- Access the logger via useRequest().context.log in route handlers\n",[349,394,396],{"class":351,"line":395},8,[349,397,398],{},"- Use log.set() to accumulate context, throw createError() for structured errors\n",[349,400,402],{"class":351,"line":401},9,[349,403,362],{"emptyLinePlaceholder":361},[349,405,407],{"class":351,"line":406},10,[349,408,409],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Ftanstack-start\n",[349,411,413],{"class":351,"line":412},11,[349,414,415],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[417,418,20],"h2",{"id":419},"quick-start",[307,421,422,423,426],{},"Starting from a TanStack Start project created with ",[316,424,425],{},"npm create @tanstack\u002Fstart@latest",":",[428,429,431],"h3",{"id":430},"_1-install","1. Install",[339,433,438],{"className":434,"code":435,"filename":436,"language":437,"meta":345,"style":345},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","Terminal","bash",[316,439,440],{"__ignoreMap":345},[349,441,442,446,450],{"class":351,"line":352},[349,443,445],{"class":444},"sBMFI","bun",[349,447,449],{"class":448},"sfazB"," add",[349,451,452],{"class":448}," evlog\n",[428,454,456,457],{"id":455},"_2-add-nitroconfigts","2. Add ",[316,458,459],{},"nitro.config.ts",[307,461,462,463,465,466,469,470,473],{},"Create a ",[316,464,459],{}," at the project root to register the evlog module. Your ",[316,467,468],{},"vite.config.ts"," already has the ",[316,471,472],{},"nitro()"," plugin from the CLI, so no changes are needed there.",[339,475,479],{"className":476,"code":477,"filename":459,"language":478,"meta":345,"style":345},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from 'nitro'\nimport evlog from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineConfig({\n  experimental: {\n    asyncContext: true,\n  },\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","typescript",[316,480,481,510,526,530,547,558,572,577,587,596,621,631,639],{"__ignoreMap":345},[349,482,483,487,491,495,498,501,504,507],{"class":351,"line":352},[349,484,486],{"class":485},"s7zQu","import",[349,488,490],{"class":489},"sMK4o"," {",[349,492,494],{"class":493},"sTEyZ"," defineConfig",[349,496,497],{"class":489}," }",[349,499,500],{"class":485}," from",[349,502,503],{"class":489}," '",[349,505,506],{"class":448},"nitro",[349,508,509],{"class":489},"'\n",[349,511,512,514,517,520,522,524],{"class":351,"line":358},[349,513,486],{"class":485},[349,515,516],{"class":493}," evlog ",[349,518,519],{"class":485},"from",[349,521,503],{"class":489},[349,523,318],{"class":448},[349,525,509],{"class":489},[349,527,528],{"class":351,"line":365},[349,529,362],{"emptyLinePlaceholder":361},[349,531,532,535,538,541,544],{"class":351,"line":371},[349,533,534],{"class":485},"export",[349,536,537],{"class":485}," default",[349,539,494],{"class":540},"s2Zo4",[349,542,543],{"class":493},"(",[349,545,546],{"class":489},"{\n",[349,548,549,553,555],{"class":351,"line":377},[349,550,552],{"class":551},"swJcz","  experimental",[349,554,426],{"class":489},[349,556,557],{"class":489}," {\n",[349,559,560,563,565,569],{"class":351,"line":383},[349,561,562],{"class":551},"    asyncContext",[349,564,426],{"class":489},[349,566,568],{"class":567},"sfNiH"," true",[349,570,571],{"class":489},",\n",[349,573,574],{"class":351,"line":389},[349,575,576],{"class":489},"  },\n",[349,578,579,582,584],{"class":351,"line":395},[349,580,581],{"class":551},"  modules",[349,583,426],{"class":489},[349,585,586],{"class":493}," [\n",[349,588,589,592,594],{"class":351,"line":401},[349,590,591],{"class":540},"    evlog",[349,593,543],{"class":493},[349,595,546],{"class":489},[349,597,598,601,603,605,608,610,612,615,618],{"class":351,"line":406},[349,599,600],{"class":551},"      env",[349,602,426],{"class":489},[349,604,490],{"class":489},[349,606,607],{"class":551}," service",[349,609,426],{"class":489},[349,611,503],{"class":489},[349,613,614],{"class":448},"my-app",[349,616,617],{"class":489},"'",[349,619,620],{"class":489}," },\n",[349,622,623,626,629],{"class":351,"line":412},[349,624,625],{"class":489},"    }",[349,627,628],{"class":493},")",[349,630,571],{"class":489},[349,632,634,637],{"class":351,"line":633},12,[349,635,636],{"class":493},"  ]",[349,638,571],{"class":489},[349,640,642,645],{"class":351,"line":641},13,[349,643,644],{"class":489},"}",[349,646,647],{"class":493},")\n",[307,649,650,651,654,655,658],{},"Enabling ",[316,652,653],{},"asyncContext"," lets you access the request-scoped logger from anywhere in the call stack via ",[316,656,657],{},"useRequest()",".",[428,660,662],{"id":661},"_3-error-handling-middleware","3. Error handling middleware",[307,664,665,666,669,670,673,674,677,678,681,682,685],{},"TanStack Start has its own error handling layer that runs before Nitro's. To ensure ",[316,667,668],{},"throw createError()"," returns a proper JSON response with ",[316,671,672],{},"why",", ",[316,675,676],{},"fix",", and ",[316,679,680],{},"link",", add the ",[316,683,684],{},"evlogErrorHandler"," middleware to your root route:",[339,687,690],{"className":476,"code":688,"filename":689,"language":478,"meta":345,"style":345},"import { createRootRoute } from '@tanstack\u002Freact-router'\nimport { createMiddleware } from '@tanstack\u002Freact-start'\nimport { evlogErrorHandler } from 'evlog\u002Fnitro\u002Fv3'\n\nexport const Route = createRootRoute({\n  server: {\n    middleware: [createMiddleware().server(evlogErrorHandler)],\n  },\n  \u002F\u002F ... head, shellComponent, etc.\n})\n","src\u002Froutes\u002F__root.tsx",[316,691,692,712,732,751,755,775,784,810,814,820],{"__ignoreMap":345},[349,693,694,696,698,701,703,705,707,710],{"class":351,"line":352},[349,695,486],{"class":485},[349,697,490],{"class":489},[349,699,700],{"class":493}," createRootRoute",[349,702,497],{"class":489},[349,704,500],{"class":485},[349,706,503],{"class":489},[349,708,709],{"class":448},"@tanstack\u002Freact-router",[349,711,509],{"class":489},[349,713,714,716,718,721,723,725,727,730],{"class":351,"line":358},[349,715,486],{"class":485},[349,717,490],{"class":489},[349,719,720],{"class":493}," createMiddleware",[349,722,497],{"class":489},[349,724,500],{"class":485},[349,726,503],{"class":489},[349,728,729],{"class":448},"@tanstack\u002Freact-start",[349,731,509],{"class":489},[349,733,734,736,738,741,743,745,747,749],{"class":351,"line":365},[349,735,486],{"class":485},[349,737,490],{"class":489},[349,739,740],{"class":493}," evlogErrorHandler",[349,742,497],{"class":489},[349,744,500],{"class":485},[349,746,503],{"class":489},[349,748,318],{"class":448},[349,750,509],{"class":489},[349,752,753],{"class":351,"line":371},[349,754,362],{"emptyLinePlaceholder":361},[349,756,757,759,763,766,769,771,773],{"class":351,"line":377},[349,758,534],{"class":485},[349,760,762],{"class":761},"spNyl"," const",[349,764,765],{"class":493}," Route ",[349,767,768],{"class":489},"=",[349,770,700],{"class":540},[349,772,543],{"class":493},[349,774,546],{"class":489},[349,776,777,780,782],{"class":351,"line":383},[349,778,779],{"class":551},"  server",[349,781,426],{"class":489},[349,783,557],{"class":489},[349,785,786,789,791,794,797,800,802,805,808],{"class":351,"line":389},[349,787,788],{"class":551},"    middleware",[349,790,426],{"class":489},[349,792,793],{"class":493}," [",[349,795,796],{"class":540},"createMiddleware",[349,798,799],{"class":493},"()",[349,801,658],{"class":489},[349,803,804],{"class":540},"server",[349,806,807],{"class":493},"(evlogErrorHandler)]",[349,809,571],{"class":489},[349,811,812],{"class":351,"line":395},[349,813,576],{"class":489},[349,815,816],{"class":351,"line":401},[349,817,819],{"class":818},"sHwdD","  \u002F\u002F ... head, shellComponent, etc.\n",[349,821,822,824],{"class":351,"line":406},[349,823,644],{"class":489},[349,825,647],{"class":493},[307,827,828],{},"That's it. evlog automatically captures every request as a wide event with method, path, status, and duration.",[321,830,831,834,835,840,841,844,845,847],{"color":323,"icon":113},[325,832,833],{},"Using Vite?"," TanStack Start is Vite-based. The ",[311,836,837],{"href":111},[316,838,839],{},"evlog\u002Fvite"," plugin strips ",[316,842,843],{},"log.debug()"," from production builds and injects source locations, add it to your ",[316,846,468],{}," alongside the TanStack Start plugin.",[417,849,46],{"id":850},"wide-events",[307,852,853,854,857,858,860,861,864],{},"With ",[316,855,856],{},"experimental.asyncContext: true",", use ",[316,859,657],{}," from ",[316,862,863],{},"nitro\u002Fcontext"," to access the request-scoped logger and build up context progressively:",[339,866,869],{"className":476,"code":867,"filename":868,"language":478,"meta":345,"style":345},"import { createFileRoute } from '@tanstack\u002Freact-router'\nimport { useRequest } from 'nitro\u002Fcontext'\nimport type { RequestLogger } from 'evlog'\n\nexport const Route = createFileRoute('\u002Fapi\u002Fhello')({\n  server: {\n    handlers: {\n      GET: async () => {\n        const req = useRequest()\n        const log = req.context.log as RequestLogger\n\n        log.set({ user: { id: 'user_123', plan: 'pro' } })\n        log.set({ action: 'fetch_profile' })\n        log.set({ cache: { hit: true, ttl: 3600 } })\n\n        return Response.json({ ok: true })\n      },\n    },\n  },\n})\n","src\u002Froutes\u002Fapi\u002Fhello.ts",[316,870,871,890,909,932,936,962,970,979,997,1013,1040,1044,1099,1127,1171,1176,1205,1211,1217,1222],{"__ignoreMap":345},[349,872,873,875,877,880,882,884,886,888],{"class":351,"line":352},[349,874,486],{"class":485},[349,876,490],{"class":489},[349,878,879],{"class":493}," createFileRoute",[349,881,497],{"class":489},[349,883,500],{"class":485},[349,885,503],{"class":489},[349,887,709],{"class":448},[349,889,509],{"class":489},[349,891,892,894,896,899,901,903,905,907],{"class":351,"line":358},[349,893,486],{"class":485},[349,895,490],{"class":489},[349,897,898],{"class":493}," useRequest",[349,900,497],{"class":489},[349,902,500],{"class":485},[349,904,503],{"class":489},[349,906,863],{"class":448},[349,908,509],{"class":489},[349,910,911,913,916,918,921,923,925,927,930],{"class":351,"line":365},[349,912,486],{"class":485},[349,914,915],{"class":485}," type",[349,917,490],{"class":489},[349,919,920],{"class":493}," RequestLogger",[349,922,497],{"class":489},[349,924,500],{"class":485},[349,926,503],{"class":489},[349,928,929],{"class":448},"evlog",[349,931,509],{"class":489},[349,933,934],{"class":351,"line":371},[349,935,362],{"emptyLinePlaceholder":361},[349,937,938,940,942,944,946,948,950,952,955,957,960],{"class":351,"line":377},[349,939,534],{"class":485},[349,941,762],{"class":761},[349,943,765],{"class":493},[349,945,768],{"class":489},[349,947,879],{"class":540},[349,949,543],{"class":493},[349,951,617],{"class":489},[349,953,954],{"class":448},"\u002Fapi\u002Fhello",[349,956,617],{"class":489},[349,958,959],{"class":493},")(",[349,961,546],{"class":489},[349,963,964,966,968],{"class":351,"line":383},[349,965,779],{"class":551},[349,967,426],{"class":489},[349,969,557],{"class":489},[349,971,972,975,977],{"class":351,"line":389},[349,973,974],{"class":551},"    handlers",[349,976,426],{"class":489},[349,978,557],{"class":489},[349,980,981,984,986,989,992,995],{"class":351,"line":395},[349,982,983],{"class":540},"      GET",[349,985,426],{"class":489},[349,987,988],{"class":761}," async",[349,990,991],{"class":489}," ()",[349,993,994],{"class":761}," =>",[349,996,557],{"class":489},[349,998,999,1002,1005,1008,1010],{"class":351,"line":401},[349,1000,1001],{"class":761},"        const",[349,1003,1004],{"class":493}," req",[349,1006,1007],{"class":489}," =",[349,1009,898],{"class":540},[349,1011,1012],{"class":551},"()\n",[349,1014,1015,1017,1020,1022,1024,1026,1029,1031,1034,1037],{"class":351,"line":406},[349,1016,1001],{"class":761},[349,1018,1019],{"class":493}," log",[349,1021,1007],{"class":489},[349,1023,1004],{"class":493},[349,1025,658],{"class":489},[349,1027,1028],{"class":493},"context",[349,1030,658],{"class":489},[349,1032,1033],{"class":493},"log",[349,1035,1036],{"class":485}," as",[349,1038,1039],{"class":444}," RequestLogger\n",[349,1041,1042],{"class":351,"line":412},[349,1043,362],{"emptyLinePlaceholder":361},[349,1045,1046,1049,1051,1054,1056,1059,1062,1064,1066,1069,1071,1073,1076,1078,1081,1084,1086,1088,1091,1093,1095,1097],{"class":351,"line":633},[349,1047,1048],{"class":493},"        log",[349,1050,658],{"class":489},[349,1052,1053],{"class":540},"set",[349,1055,543],{"class":551},[349,1057,1058],{"class":489},"{",[349,1060,1061],{"class":551}," user",[349,1063,426],{"class":489},[349,1065,490],{"class":489},[349,1067,1068],{"class":551}," id",[349,1070,426],{"class":489},[349,1072,503],{"class":489},[349,1074,1075],{"class":448},"user_123",[349,1077,617],{"class":489},[349,1079,1080],{"class":489},",",[349,1082,1083],{"class":551}," plan",[349,1085,426],{"class":489},[349,1087,503],{"class":489},[349,1089,1090],{"class":448},"pro",[349,1092,617],{"class":489},[349,1094,497],{"class":489},[349,1096,497],{"class":489},[349,1098,647],{"class":551},[349,1100,1101,1103,1105,1107,1109,1111,1114,1116,1118,1121,1123,1125],{"class":351,"line":641},[349,1102,1048],{"class":493},[349,1104,658],{"class":489},[349,1106,1053],{"class":540},[349,1108,543],{"class":551},[349,1110,1058],{"class":489},[349,1112,1113],{"class":551}," action",[349,1115,426],{"class":489},[349,1117,503],{"class":489},[349,1119,1120],{"class":448},"fetch_profile",[349,1122,617],{"class":489},[349,1124,497],{"class":489},[349,1126,647],{"class":551},[349,1128,1130,1132,1134,1136,1138,1140,1143,1145,1147,1150,1152,1154,1156,1159,1161,1165,1167,1169],{"class":351,"line":1129},14,[349,1131,1048],{"class":493},[349,1133,658],{"class":489},[349,1135,1053],{"class":540},[349,1137,543],{"class":551},[349,1139,1058],{"class":489},[349,1141,1142],{"class":551}," cache",[349,1144,426],{"class":489},[349,1146,490],{"class":489},[349,1148,1149],{"class":551}," hit",[349,1151,426],{"class":489},[349,1153,568],{"class":567},[349,1155,1080],{"class":489},[349,1157,1158],{"class":551}," ttl",[349,1160,426],{"class":489},[349,1162,1164],{"class":1163},"sbssI"," 3600",[349,1166,497],{"class":489},[349,1168,497],{"class":489},[349,1170,647],{"class":551},[349,1172,1174],{"class":351,"line":1173},15,[349,1175,362],{"emptyLinePlaceholder":361},[349,1177,1179,1182,1185,1187,1190,1192,1194,1197,1199,1201,1203],{"class":351,"line":1178},16,[349,1180,1181],{"class":485},"        return",[349,1183,1184],{"class":493}," Response",[349,1186,658],{"class":489},[349,1188,1189],{"class":540},"json",[349,1191,543],{"class":551},[349,1193,1058],{"class":489},[349,1195,1196],{"class":551}," ok",[349,1198,426],{"class":489},[349,1200,568],{"class":567},[349,1202,497],{"class":489},[349,1204,647],{"class":551},[349,1206,1208],{"class":351,"line":1207},17,[349,1209,1210],{"class":489},"      },\n",[349,1212,1214],{"class":351,"line":1213},18,[349,1215,1216],{"class":489},"    },\n",[349,1218,1220],{"class":351,"line":1219},19,[349,1221,576],{"class":489},[349,1223,1225,1227],{"class":351,"line":1224},20,[349,1226,644],{"class":489},[349,1228,647],{"class":493},[307,1230,1231],{},"All fields are merged into a single wide event emitted when the request completes:",[339,1233,1236],{"className":434,"code":1234,"filename":1235,"language":437,"meta":345,"style":345},"14:58:15 INFO [my-app] GET \u002Fapi\u002Fhello 200 in 52ms\n  ├─ cache: hit=true ttl=3600\n  ├─ action: fetch_profile\n  ├─ user: id=user_123 plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[316,1237,1238,1249,1269,1279,1292],{"__ignoreMap":345},[349,1239,1240,1243,1246],{"class":351,"line":352},[349,1241,1242],{"class":444},"14:58:15",[349,1244,1245],{"class":448}," INFO",[349,1247,1248],{"class":493}," [my-app] GET \u002Fapi\u002Fhello 200 in 52ms\n",[349,1250,1251,1254,1257,1260,1263,1266],{"class":351,"line":358},[349,1252,1253],{"class":444},"  ├─",[349,1255,1256],{"class":448}," cache:",[349,1258,1259],{"class":448}," hit=",[349,1261,1262],{"class":489},"true",[349,1264,1265],{"class":448}," ttl=",[349,1267,1268],{"class":1163},"3600\n",[349,1270,1271,1273,1276],{"class":351,"line":365},[349,1272,1253],{"class":444},[349,1274,1275],{"class":448}," action:",[349,1277,1278],{"class":448}," fetch_profile\n",[349,1280,1281,1283,1286,1289],{"class":351,"line":371},[349,1282,1253],{"class":444},[349,1284,1285],{"class":448}," user:",[349,1287,1288],{"class":448}," id=user_123",[349,1290,1291],{"class":448}," plan=pro\n",[349,1293,1294,1297,1300],{"class":351,"line":377},[349,1295,1296],{"class":444},"  └─",[349,1298,1299],{"class":448}," requestId:",[349,1301,1302],{"class":448}," 4a8ff3a8-...\n",[321,1304,1305,1307,1308,1311],{"color":323,"icon":13},[316,1306,657],{}," is an experimental Nitro v3 feature powered by ",[316,1309,1310],{},"AsyncLocalStorage",". It works on Node.js and Bun runtimes.",[417,1313,1315],{"id":1314},"error-handling","Error Handling",[307,1317,1318,1319,1322,1323,673,1325,677,1327,1329],{},"Use ",[316,1320,1321],{},"createError"," for structured errors with ",[316,1324,672],{},[316,1326,676],{},[316,1328,680],{}," fields:",[339,1331,1334],{"className":476,"code":1332,"filename":1333,"language":478,"meta":345,"style":345},"import { createFileRoute } from '@tanstack\u002Freact-router'\nimport { useRequest } from 'nitro\u002Fcontext'\nimport { createError } from 'evlog'\nimport type { RequestLogger } from 'evlog'\n\nexport const Route = createFileRoute('\u002Fapi\u002Fcheckout')({\n  server: {\n    handlers: {\n      POST: async ({ request }) => {\n        const req = useRequest()\n        const log = req.context.log as RequestLogger\n        const body = await request.json()\n\n        log.set({ user: { id: body.userId, plan: body.plan } })\n        log.set({ cart: { items: body.items, total: body.total } })\n\n        const result = await chargeCard(body)\n\n        if (!result.success) {\n          throw createError({\n            message: 'Payment failed',\n            status: 402,\n            why: 'Card declined by issuer',\n            fix: 'Try a different payment method',\n            link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n          })\n        }\n\n        return Response.json({ success: true, orderId: result.orderId })\n      },\n    },\n  },\n})\n","src\u002Froutes\u002Fapi\u002Fcheckout.ts",[316,1335,1336,1354,1372,1391,1411,1415,1440,1448,1456,1479,1491,1513,1533,1537,1585,1636,1640,1661,1665,1689,1700,1717,1730,1747,1764,1781,1789,1795,1800,1840,1845,1850,1855],{"__ignoreMap":345},[349,1337,1338,1340,1342,1344,1346,1348,1350,1352],{"class":351,"line":352},[349,1339,486],{"class":485},[349,1341,490],{"class":489},[349,1343,879],{"class":493},[349,1345,497],{"class":489},[349,1347,500],{"class":485},[349,1349,503],{"class":489},[349,1351,709],{"class":448},[349,1353,509],{"class":489},[349,1355,1356,1358,1360,1362,1364,1366,1368,1370],{"class":351,"line":358},[349,1357,486],{"class":485},[349,1359,490],{"class":489},[349,1361,898],{"class":493},[349,1363,497],{"class":489},[349,1365,500],{"class":485},[349,1367,503],{"class":489},[349,1369,863],{"class":448},[349,1371,509],{"class":489},[349,1373,1374,1376,1378,1381,1383,1385,1387,1389],{"class":351,"line":365},[349,1375,486],{"class":485},[349,1377,490],{"class":489},[349,1379,1380],{"class":493}," createError",[349,1382,497],{"class":489},[349,1384,500],{"class":485},[349,1386,503],{"class":489},[349,1388,929],{"class":448},[349,1390,509],{"class":489},[349,1392,1393,1395,1397,1399,1401,1403,1405,1407,1409],{"class":351,"line":371},[349,1394,486],{"class":485},[349,1396,915],{"class":485},[349,1398,490],{"class":489},[349,1400,920],{"class":493},[349,1402,497],{"class":489},[349,1404,500],{"class":485},[349,1406,503],{"class":489},[349,1408,929],{"class":448},[349,1410,509],{"class":489},[349,1412,1413],{"class":351,"line":377},[349,1414,362],{"emptyLinePlaceholder":361},[349,1416,1417,1419,1421,1423,1425,1427,1429,1431,1434,1436,1438],{"class":351,"line":383},[349,1418,534],{"class":485},[349,1420,762],{"class":761},[349,1422,765],{"class":493},[349,1424,768],{"class":489},[349,1426,879],{"class":540},[349,1428,543],{"class":493},[349,1430,617],{"class":489},[349,1432,1433],{"class":448},"\u002Fapi\u002Fcheckout",[349,1435,617],{"class":489},[349,1437,959],{"class":493},[349,1439,546],{"class":489},[349,1441,1442,1444,1446],{"class":351,"line":389},[349,1443,779],{"class":551},[349,1445,426],{"class":489},[349,1447,557],{"class":489},[349,1449,1450,1452,1454],{"class":351,"line":395},[349,1451,974],{"class":551},[349,1453,426],{"class":489},[349,1455,557],{"class":489},[349,1457,1458,1461,1463,1465,1468,1472,1475,1477],{"class":351,"line":401},[349,1459,1460],{"class":540},"      POST",[349,1462,426],{"class":489},[349,1464,988],{"class":761},[349,1466,1467],{"class":489}," ({",[349,1469,1471],{"class":1470},"sHdIc"," request",[349,1473,1474],{"class":489}," })",[349,1476,994],{"class":761},[349,1478,557],{"class":489},[349,1480,1481,1483,1485,1487,1489],{"class":351,"line":406},[349,1482,1001],{"class":761},[349,1484,1004],{"class":493},[349,1486,1007],{"class":489},[349,1488,898],{"class":540},[349,1490,1012],{"class":551},[349,1492,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511],{"class":351,"line":412},[349,1494,1001],{"class":761},[349,1496,1019],{"class":493},[349,1498,1007],{"class":489},[349,1500,1004],{"class":493},[349,1502,658],{"class":489},[349,1504,1028],{"class":493},[349,1506,658],{"class":489},[349,1508,1033],{"class":493},[349,1510,1036],{"class":485},[349,1512,1039],{"class":444},[349,1514,1515,1517,1520,1522,1525,1527,1529,1531],{"class":351,"line":633},[349,1516,1001],{"class":761},[349,1518,1519],{"class":493}," body",[349,1521,1007],{"class":489},[349,1523,1524],{"class":485}," await",[349,1526,1471],{"class":493},[349,1528,658],{"class":489},[349,1530,1189],{"class":540},[349,1532,1012],{"class":551},[349,1534,1535],{"class":351,"line":641},[349,1536,362],{"emptyLinePlaceholder":361},[349,1538,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1566,1568,1570,1572,1574,1576,1579,1581,1583],{"class":351,"line":1129},[349,1540,1048],{"class":493},[349,1542,658],{"class":489},[349,1544,1053],{"class":540},[349,1546,543],{"class":551},[349,1548,1058],{"class":489},[349,1550,1061],{"class":551},[349,1552,426],{"class":489},[349,1554,490],{"class":489},[349,1556,1068],{"class":551},[349,1558,426],{"class":489},[349,1560,1519],{"class":493},[349,1562,658],{"class":489},[349,1564,1565],{"class":493},"userId",[349,1567,1080],{"class":489},[349,1569,1083],{"class":551},[349,1571,426],{"class":489},[349,1573,1519],{"class":493},[349,1575,658],{"class":489},[349,1577,1578],{"class":493},"plan",[349,1580,497],{"class":489},[349,1582,497],{"class":489},[349,1584,647],{"class":551},[349,1586,1587,1589,1591,1593,1595,1597,1600,1602,1604,1607,1609,1611,1613,1616,1618,1621,1623,1625,1627,1630,1632,1634],{"class":351,"line":1173},[349,1588,1048],{"class":493},[349,1590,658],{"class":489},[349,1592,1053],{"class":540},[349,1594,543],{"class":551},[349,1596,1058],{"class":489},[349,1598,1599],{"class":551}," cart",[349,1601,426],{"class":489},[349,1603,490],{"class":489},[349,1605,1606],{"class":551}," items",[349,1608,426],{"class":489},[349,1610,1519],{"class":493},[349,1612,658],{"class":489},[349,1614,1615],{"class":493},"items",[349,1617,1080],{"class":489},[349,1619,1620],{"class":551}," total",[349,1622,426],{"class":489},[349,1624,1519],{"class":493},[349,1626,658],{"class":489},[349,1628,1629],{"class":493},"total",[349,1631,497],{"class":489},[349,1633,497],{"class":489},[349,1635,647],{"class":551},[349,1637,1638],{"class":351,"line":1178},[349,1639,362],{"emptyLinePlaceholder":361},[349,1641,1642,1644,1647,1649,1651,1654,1656,1659],{"class":351,"line":1207},[349,1643,1001],{"class":761},[349,1645,1646],{"class":493}," result",[349,1648,1007],{"class":489},[349,1650,1524],{"class":485},[349,1652,1653],{"class":540}," chargeCard",[349,1655,543],{"class":551},[349,1657,1658],{"class":493},"body",[349,1660,647],{"class":551},[349,1662,1663],{"class":351,"line":1213},[349,1664,362],{"emptyLinePlaceholder":361},[349,1666,1667,1670,1673,1676,1679,1681,1684,1687],{"class":351,"line":1219},[349,1668,1669],{"class":485},"        if",[349,1671,1672],{"class":551}," (",[349,1674,1675],{"class":489},"!",[349,1677,1678],{"class":493},"result",[349,1680,658],{"class":489},[349,1682,1683],{"class":493},"success",[349,1685,1686],{"class":551},") ",[349,1688,546],{"class":489},[349,1690,1691,1694,1696,1698],{"class":351,"line":1224},[349,1692,1693],{"class":485},"          throw",[349,1695,1380],{"class":540},[349,1697,543],{"class":551},[349,1699,546],{"class":489},[349,1701,1703,1706,1708,1710,1713,1715],{"class":351,"line":1702},21,[349,1704,1705],{"class":551},"            message",[349,1707,426],{"class":489},[349,1709,503],{"class":489},[349,1711,1712],{"class":448},"Payment failed",[349,1714,617],{"class":489},[349,1716,571],{"class":489},[349,1718,1720,1723,1725,1728],{"class":351,"line":1719},22,[349,1721,1722],{"class":551},"            status",[349,1724,426],{"class":489},[349,1726,1727],{"class":1163}," 402",[349,1729,571],{"class":489},[349,1731,1733,1736,1738,1740,1743,1745],{"class":351,"line":1732},23,[349,1734,1735],{"class":551},"            why",[349,1737,426],{"class":489},[349,1739,503],{"class":489},[349,1741,1742],{"class":448},"Card declined by issuer",[349,1744,617],{"class":489},[349,1746,571],{"class":489},[349,1748,1750,1753,1755,1757,1760,1762],{"class":351,"line":1749},24,[349,1751,1752],{"class":551},"            fix",[349,1754,426],{"class":489},[349,1756,503],{"class":489},[349,1758,1759],{"class":448},"Try a different payment method",[349,1761,617],{"class":489},[349,1763,571],{"class":489},[349,1765,1767,1770,1772,1774,1777,1779],{"class":351,"line":1766},25,[349,1768,1769],{"class":551},"            link",[349,1771,426],{"class":489},[349,1773,503],{"class":489},[349,1775,1776],{"class":448},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[349,1778,617],{"class":489},[349,1780,571],{"class":489},[349,1782,1784,1787],{"class":351,"line":1783},26,[349,1785,1786],{"class":489},"          }",[349,1788,647],{"class":551},[349,1790,1792],{"class":351,"line":1791},27,[349,1793,1794],{"class":489},"        }\n",[349,1796,1798],{"class":351,"line":1797},28,[349,1799,362],{"emptyLinePlaceholder":361},[349,1801,1803,1805,1807,1809,1811,1813,1815,1818,1820,1822,1824,1827,1829,1831,1833,1836,1838],{"class":351,"line":1802},29,[349,1804,1181],{"class":485},[349,1806,1184],{"class":493},[349,1808,658],{"class":489},[349,1810,1189],{"class":540},[349,1812,543],{"class":551},[349,1814,1058],{"class":489},[349,1816,1817],{"class":551}," success",[349,1819,426],{"class":489},[349,1821,568],{"class":567},[349,1823,1080],{"class":489},[349,1825,1826],{"class":551}," orderId",[349,1828,426],{"class":489},[349,1830,1646],{"class":493},[349,1832,658],{"class":489},[349,1834,1835],{"class":493},"orderId",[349,1837,497],{"class":489},[349,1839,647],{"class":551},[349,1841,1843],{"class":351,"line":1842},30,[349,1844,1210],{"class":489},[349,1846,1848],{"class":351,"line":1847},31,[349,1849,1216],{"class":489},[349,1851,1853],{"class":351,"line":1852},32,[349,1854,576],{"class":489},[349,1856,1858,1860],{"class":351,"line":1857},33,[349,1859,644],{"class":489},[349,1861,647],{"class":493},[307,1863,1864],{},"The error is captured and logged with both the custom context and structured error fields:",[339,1866,1868],{"className":434,"code":1867,"filename":1235,"language":437,"meta":345,"style":345},"14:58:20 ERROR [my-app] POST \u002Fapi\u002Fcheckout 402 in 104ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: items=3 total=9999\n  ├─ user: id=user_123 plan=pro\n  └─ requestId: 880a50ac-...\n",[316,1869,1870,1881,1903,1922,1932],{"__ignoreMap":345},[349,1871,1872,1875,1878],{"class":351,"line":352},[349,1873,1874],{"class":444},"14:58:20",[349,1876,1877],{"class":448}," ERROR",[349,1879,1880],{"class":493}," [my-app] POST \u002Fapi\u002Fcheckout 402 in 104ms\n",[349,1882,1883,1885,1888,1891,1894,1897,1900],{"class":351,"line":358},[349,1884,1253],{"class":444},[349,1886,1887],{"class":448}," error:",[349,1889,1890],{"class":448}," name=EvlogError",[349,1892,1893],{"class":448}," message=Payment",[349,1895,1896],{"class":448}," failed",[349,1898,1899],{"class":448}," status=",[349,1901,1902],{"class":1163},"402\n",[349,1904,1905,1907,1910,1913,1916,1919],{"class":351,"line":365},[349,1906,1253],{"class":444},[349,1908,1909],{"class":448}," cart:",[349,1911,1912],{"class":448}," items=",[349,1914,1915],{"class":1163},"3",[349,1917,1918],{"class":448}," total=",[349,1920,1921],{"class":1163},"9999\n",[349,1923,1924,1926,1928,1930],{"class":351,"line":371},[349,1925,1253],{"class":444},[349,1927,1285],{"class":448},[349,1929,1288],{"class":448},[349,1931,1291],{"class":448},[349,1933,1934,1936,1938],{"class":351,"line":377},[349,1935,1296],{"class":444},[349,1937,1299],{"class":448},[349,1939,1940],{"class":448}," 880a50ac-...\n",[428,1942,1944],{"id":1943},"parsing-errors-on-the-client","Parsing Errors on the Client",[307,1946,1318,1947,1950],{},[316,1948,1949],{},"parseError"," to extract the structured fields from any error response:",[339,1952,1957],{"className":1953,"code":1954,"filename":1955,"language":1956,"meta":345,"style":345},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { parseError } from 'evlog'\n\ntry {\n  const res = await fetch('\u002Fapi\u002Fcheckout', {\n    method: 'POST',\n    body: JSON.stringify({ userId: 'user_123' }),\n  })\n  if (!res.ok) throw { data: await res.json(), status: res.status }\n} catch (error) {\n  const { message, status, why, fix, link } = parseError(error)\n}\n","src\u002Froutes\u002Fcheckout.tsx","tsx",[316,1958,1959,1978,1982,1989,2016,2032,2068,2075,2131,2143,2184],{"__ignoreMap":345},[349,1960,1961,1963,1965,1968,1970,1972,1974,1976],{"class":351,"line":352},[349,1962,486],{"class":485},[349,1964,490],{"class":489},[349,1966,1967],{"class":493}," parseError",[349,1969,497],{"class":489},[349,1971,500],{"class":485},[349,1973,503],{"class":489},[349,1975,929],{"class":448},[349,1977,509],{"class":489},[349,1979,1980],{"class":351,"line":358},[349,1981,362],{"emptyLinePlaceholder":361},[349,1983,1984,1987],{"class":351,"line":365},[349,1985,1986],{"class":485},"try",[349,1988,557],{"class":489},[349,1990,1991,1994,1997,1999,2001,2004,2006,2008,2010,2012,2014],{"class":351,"line":371},[349,1992,1993],{"class":761},"  const",[349,1995,1996],{"class":493}," res",[349,1998,1007],{"class":489},[349,2000,1524],{"class":485},[349,2002,2003],{"class":540}," fetch",[349,2005,543],{"class":551},[349,2007,617],{"class":489},[349,2009,1433],{"class":448},[349,2011,617],{"class":489},[349,2013,1080],{"class":489},[349,2015,557],{"class":489},[349,2017,2018,2021,2023,2025,2028,2030],{"class":351,"line":377},[349,2019,2020],{"class":551},"    method",[349,2022,426],{"class":489},[349,2024,503],{"class":489},[349,2026,2027],{"class":448},"POST",[349,2029,617],{"class":489},[349,2031,571],{"class":489},[349,2033,2034,2037,2039,2042,2044,2047,2049,2051,2054,2056,2058,2060,2062,2064,2066],{"class":351,"line":383},[349,2035,2036],{"class":551},"    body",[349,2038,426],{"class":489},[349,2040,2041],{"class":493}," JSON",[349,2043,658],{"class":489},[349,2045,2046],{"class":540},"stringify",[349,2048,543],{"class":551},[349,2050,1058],{"class":489},[349,2052,2053],{"class":551}," userId",[349,2055,426],{"class":489},[349,2057,503],{"class":489},[349,2059,1075],{"class":448},[349,2061,617],{"class":489},[349,2063,497],{"class":489},[349,2065,628],{"class":551},[349,2067,571],{"class":489},[349,2069,2070,2073],{"class":351,"line":389},[349,2071,2072],{"class":489},"  }",[349,2074,647],{"class":551},[349,2076,2077,2080,2082,2084,2087,2089,2092,2094,2097,2099,2102,2104,2106,2108,2110,2112,2114,2116,2119,2121,2123,2125,2128],{"class":351,"line":395},[349,2078,2079],{"class":485},"  if",[349,2081,1672],{"class":551},[349,2083,1675],{"class":489},[349,2085,2086],{"class":493},"res",[349,2088,658],{"class":489},[349,2090,2091],{"class":493},"ok",[349,2093,1686],{"class":551},[349,2095,2096],{"class":485},"throw",[349,2098,490],{"class":489},[349,2100,2101],{"class":551}," data",[349,2103,426],{"class":489},[349,2105,1524],{"class":485},[349,2107,1996],{"class":493},[349,2109,658],{"class":489},[349,2111,1189],{"class":540},[349,2113,799],{"class":551},[349,2115,1080],{"class":489},[349,2117,2118],{"class":551}," status",[349,2120,426],{"class":489},[349,2122,1996],{"class":493},[349,2124,658],{"class":489},[349,2126,2127],{"class":493},"status",[349,2129,2130],{"class":489}," }\n",[349,2132,2133,2135,2138,2141],{"class":351,"line":401},[349,2134,644],{"class":489},[349,2136,2137],{"class":485}," catch",[349,2139,2140],{"class":493}," (error) ",[349,2142,546],{"class":489},[349,2144,2145,2147,2149,2152,2154,2156,2158,2161,2163,2166,2168,2171,2173,2175,2177,2179,2182],{"class":351,"line":406},[349,2146,1993],{"class":761},[349,2148,490],{"class":489},[349,2150,2151],{"class":493}," message",[349,2153,1080],{"class":489},[349,2155,2118],{"class":493},[349,2157,1080],{"class":489},[349,2159,2160],{"class":493}," why",[349,2162,1080],{"class":489},[349,2164,2165],{"class":493}," fix",[349,2167,1080],{"class":489},[349,2169,2170],{"class":493}," link",[349,2172,497],{"class":489},[349,2174,1007],{"class":489},[349,2176,1967],{"class":540},[349,2178,543],{"class":551},[349,2180,2181],{"class":493},"error",[349,2183,647],{"class":551},[349,2185,2186],{"class":351,"line":412},[349,2187,2188],{"class":489},"}\n",[417,2190,86],{"id":2191},"configuration",[307,2193,2194,2195,2198,2199,2202],{},"See the ",[311,2196,2197],{"href":87},"Configuration reference"," for all available options (",[316,2200,2201],{},"initLogger",", middleware options, sampling, silent mode, etc.).",[417,2204,2206],{"id":2205},"route-filtering","Route Filtering",[307,2208,2209,2210,2213,2214,2217],{},"Control which routes are logged with ",[316,2211,2212],{},"include"," and ",[316,2215,2216],{},"exclude"," in the module options:",[339,2219,2221],{"className":476,"code":2220,"filename":459,"language":478,"meta":345,"style":345},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineConfig({\n  experimental: { asyncContext: true },\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n      include: ['\u002Fapi\u002F**'],\n      exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n      routes: {\n        '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n        '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      },\n    }),\n  ],\n})\n",[316,2222,2223,2241,2255,2259,2271,2288,2296,2304,2324,2345,2374,2383,2410,2436,2440,2448,2454],{"__ignoreMap":345},[349,2224,2225,2227,2229,2231,2233,2235,2237,2239],{"class":351,"line":352},[349,2226,486],{"class":485},[349,2228,490],{"class":489},[349,2230,494],{"class":493},[349,2232,497],{"class":489},[349,2234,500],{"class":485},[349,2236,503],{"class":489},[349,2238,506],{"class":448},[349,2240,509],{"class":489},[349,2242,2243,2245,2247,2249,2251,2253],{"class":351,"line":358},[349,2244,486],{"class":485},[349,2246,516],{"class":493},[349,2248,519],{"class":485},[349,2250,503],{"class":489},[349,2252,318],{"class":448},[349,2254,509],{"class":489},[349,2256,2257],{"class":351,"line":365},[349,2258,362],{"emptyLinePlaceholder":361},[349,2260,2261,2263,2265,2267,2269],{"class":351,"line":371},[349,2262,534],{"class":485},[349,2264,537],{"class":485},[349,2266,494],{"class":540},[349,2268,543],{"class":493},[349,2270,546],{"class":489},[349,2272,2273,2275,2277,2279,2282,2284,2286],{"class":351,"line":377},[349,2274,552],{"class":551},[349,2276,426],{"class":489},[349,2278,490],{"class":489},[349,2280,2281],{"class":551}," asyncContext",[349,2283,426],{"class":489},[349,2285,568],{"class":567},[349,2287,620],{"class":489},[349,2289,2290,2292,2294],{"class":351,"line":383},[349,2291,581],{"class":551},[349,2293,426],{"class":489},[349,2295,586],{"class":493},[349,2297,2298,2300,2302],{"class":351,"line":389},[349,2299,591],{"class":540},[349,2301,543],{"class":493},[349,2303,546],{"class":489},[349,2305,2306,2308,2310,2312,2314,2316,2318,2320,2322],{"class":351,"line":395},[349,2307,600],{"class":551},[349,2309,426],{"class":489},[349,2311,490],{"class":489},[349,2313,607],{"class":551},[349,2315,426],{"class":489},[349,2317,503],{"class":489},[349,2319,614],{"class":448},[349,2321,617],{"class":489},[349,2323,620],{"class":489},[349,2325,2326,2329,2331,2333,2335,2338,2340,2343],{"class":351,"line":401},[349,2327,2328],{"class":551},"      include",[349,2330,426],{"class":489},[349,2332,793],{"class":493},[349,2334,617],{"class":489},[349,2336,2337],{"class":448},"\u002Fapi\u002F**",[349,2339,617],{"class":489},[349,2341,2342],{"class":493},"]",[349,2344,571],{"class":489},[349,2346,2347,2350,2352,2354,2356,2359,2361,2363,2365,2368,2370,2372],{"class":351,"line":406},[349,2348,2349],{"class":551},"      exclude",[349,2351,426],{"class":489},[349,2353,793],{"class":493},[349,2355,617],{"class":489},[349,2357,2358],{"class":448},"\u002F_internal\u002F**",[349,2360,617],{"class":489},[349,2362,1080],{"class":489},[349,2364,503],{"class":489},[349,2366,2367],{"class":448},"\u002Fhealth",[349,2369,617],{"class":489},[349,2371,2342],{"class":493},[349,2373,571],{"class":489},[349,2375,2376,2379,2381],{"class":351,"line":412},[349,2377,2378],{"class":551},"      routes",[349,2380,426],{"class":489},[349,2382,557],{"class":489},[349,2384,2385,2388,2391,2393,2395,2397,2399,2401,2403,2406,2408],{"class":351,"line":633},[349,2386,2387],{"class":489},"        '",[349,2389,2390],{"class":551},"\u002Fapi\u002Fauth\u002F**",[349,2392,617],{"class":489},[349,2394,426],{"class":489},[349,2396,490],{"class":489},[349,2398,607],{"class":551},[349,2400,426],{"class":489},[349,2402,503],{"class":489},[349,2404,2405],{"class":448},"auth-service",[349,2407,617],{"class":489},[349,2409,620],{"class":489},[349,2411,2412,2414,2417,2419,2421,2423,2425,2427,2429,2432,2434],{"class":351,"line":641},[349,2413,2387],{"class":489},[349,2415,2416],{"class":551},"\u002Fapi\u002Fpayment\u002F**",[349,2418,617],{"class":489},[349,2420,426],{"class":489},[349,2422,490],{"class":489},[349,2424,607],{"class":551},[349,2426,426],{"class":489},[349,2428,503],{"class":489},[349,2430,2431],{"class":448},"payment-service",[349,2433,617],{"class":489},[349,2435,620],{"class":489},[349,2437,2438],{"class":351,"line":1129},[349,2439,1210],{"class":489},[349,2441,2442,2444,2446],{"class":351,"line":1173},[349,2443,625],{"class":489},[349,2445,628],{"class":493},[349,2447,571],{"class":489},[349,2449,2450,2452],{"class":351,"line":1178},[349,2451,636],{"class":493},[349,2453,571],{"class":489},[349,2455,2456,2458],{"class":351,"line":1207},[349,2457,644],{"class":489},[349,2459,647],{"class":493},[417,2461,2463],{"id":2462},"drain-enrichers","Drain & Enrichers",[307,2465,2466,2467,2470],{},"Since TanStack Start uses Nitro v3, configure drains and enrichers via Nitro plugins. Create a ",[316,2468,2469],{},"server\u002Fplugins\u002F"," directory and register hooks:",[339,2472,2475],{"className":476,"code":2473,"filename":2474,"language":478,"meta":345,"style":345},"import { definePlugin } from 'nitro'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default definePlugin((nitroApp) => {\n  const axiom = createAxiomDrain()\n\n  nitroApp.hooks.hook('evlog:drain', axiom)\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[316,2476,2477,2496,2516,2520,2541,2554,2558,2588],{"__ignoreMap":345},[349,2478,2479,2481,2483,2486,2488,2490,2492,2494],{"class":351,"line":352},[349,2480,486],{"class":485},[349,2482,490],{"class":489},[349,2484,2485],{"class":493}," definePlugin",[349,2487,497],{"class":489},[349,2489,500],{"class":485},[349,2491,503],{"class":489},[349,2493,506],{"class":448},[349,2495,509],{"class":489},[349,2497,2498,2500,2502,2505,2507,2509,2511,2514],{"class":351,"line":358},[349,2499,486],{"class":485},[349,2501,490],{"class":489},[349,2503,2504],{"class":493}," createAxiomDrain",[349,2506,497],{"class":489},[349,2508,500],{"class":485},[349,2510,503],{"class":489},[349,2512,2513],{"class":448},"evlog\u002Faxiom",[349,2515,509],{"class":489},[349,2517,2518],{"class":351,"line":365},[349,2519,362],{"emptyLinePlaceholder":361},[349,2521,2522,2524,2526,2528,2530,2532,2535,2537,2539],{"class":351,"line":371},[349,2523,534],{"class":485},[349,2525,537],{"class":485},[349,2527,2485],{"class":540},[349,2529,543],{"class":493},[349,2531,543],{"class":489},[349,2533,2534],{"class":1470},"nitroApp",[349,2536,628],{"class":489},[349,2538,994],{"class":761},[349,2540,557],{"class":489},[349,2542,2543,2545,2548,2550,2552],{"class":351,"line":377},[349,2544,1993],{"class":761},[349,2546,2547],{"class":493}," axiom",[349,2549,1007],{"class":489},[349,2551,2504],{"class":540},[349,2553,1012],{"class":551},[349,2555,2556],{"class":351,"line":383},[349,2557,362],{"emptyLinePlaceholder":361},[349,2559,2560,2563,2565,2568,2570,2573,2575,2577,2580,2582,2584,2586],{"class":351,"line":389},[349,2561,2562],{"class":493},"  nitroApp",[349,2564,658],{"class":489},[349,2566,2567],{"class":493},"hooks",[349,2569,658],{"class":489},[349,2571,2572],{"class":540},"hook",[349,2574,543],{"class":551},[349,2576,617],{"class":489},[349,2578,2579],{"class":448},"evlog:drain",[349,2581,617],{"class":489},[349,2583,1080],{"class":489},[349,2585,2547],{"class":493},[349,2587,647],{"class":551},[349,2589,2590,2592],{"class":351,"line":395},[349,2591,644],{"class":489},[349,2593,647],{"class":493},[339,2595,2598],{"className":476,"code":2596,"filename":2597,"language":478,"meta":345,"style":345},"import { definePlugin } from 'nitro'\nimport { createUserAgentEnricher, createRequestSizeEnricher } from 'evlog\u002Fenrichers'\n\nexport default definePlugin((nitroApp) => {\n  const enrichers = [createUserAgentEnricher(), createRequestSizeEnricher()]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[316,2599,2600,2618,2643,2647,2667,2690,2694,2728,2757,2763],{"__ignoreMap":345},[349,2601,2602,2604,2606,2608,2610,2612,2614,2616],{"class":351,"line":352},[349,2603,486],{"class":485},[349,2605,490],{"class":489},[349,2607,2485],{"class":493},[349,2609,497],{"class":489},[349,2611,500],{"class":485},[349,2613,503],{"class":489},[349,2615,506],{"class":448},[349,2617,509],{"class":489},[349,2619,2620,2622,2624,2627,2629,2632,2634,2636,2638,2641],{"class":351,"line":358},[349,2621,486],{"class":485},[349,2623,490],{"class":489},[349,2625,2626],{"class":493}," createUserAgentEnricher",[349,2628,1080],{"class":489},[349,2630,2631],{"class":493}," createRequestSizeEnricher",[349,2633,497],{"class":489},[349,2635,500],{"class":485},[349,2637,503],{"class":489},[349,2639,2640],{"class":448},"evlog\u002Fenrichers",[349,2642,509],{"class":489},[349,2644,2645],{"class":351,"line":365},[349,2646,362],{"emptyLinePlaceholder":361},[349,2648,2649,2651,2653,2655,2657,2659,2661,2663,2665],{"class":351,"line":371},[349,2650,534],{"class":485},[349,2652,537],{"class":485},[349,2654,2485],{"class":540},[349,2656,543],{"class":493},[349,2658,543],{"class":489},[349,2660,2534],{"class":1470},[349,2662,628],{"class":489},[349,2664,994],{"class":761},[349,2666,557],{"class":489},[349,2668,2669,2671,2674,2676,2678,2681,2683,2685,2687],{"class":351,"line":377},[349,2670,1993],{"class":761},[349,2672,2673],{"class":493}," enrichers",[349,2675,1007],{"class":489},[349,2677,793],{"class":551},[349,2679,2680],{"class":540},"createUserAgentEnricher",[349,2682,799],{"class":551},[349,2684,1080],{"class":489},[349,2686,2631],{"class":540},[349,2688,2689],{"class":551},"()]\n",[349,2691,2692],{"class":351,"line":383},[349,2693,362],{"emptyLinePlaceholder":361},[349,2695,2696,2698,2700,2702,2704,2706,2708,2710,2713,2715,2717,2719,2722,2724,2726],{"class":351,"line":389},[349,2697,2562],{"class":493},[349,2699,658],{"class":489},[349,2701,2567],{"class":493},[349,2703,658],{"class":489},[349,2705,2572],{"class":540},[349,2707,543],{"class":551},[349,2709,617],{"class":489},[349,2711,2712],{"class":448},"evlog:enrich",[349,2714,617],{"class":489},[349,2716,1080],{"class":489},[349,2718,1672],{"class":489},[349,2720,2721],{"class":1470},"ctx",[349,2723,628],{"class":489},[349,2725,994],{"class":761},[349,2727,557],{"class":489},[349,2729,2730,2733,2735,2738,2741,2744,2746,2748,2751,2753,2755],{"class":351,"line":395},[349,2731,2732],{"class":485},"    for",[349,2734,1672],{"class":551},[349,2736,2737],{"class":761},"const",[349,2739,2740],{"class":493}," enricher",[349,2742,2743],{"class":489}," of",[349,2745,2673],{"class":493},[349,2747,1686],{"class":551},[349,2749,2750],{"class":540},"enricher",[349,2752,543],{"class":551},[349,2754,2721],{"class":493},[349,2756,647],{"class":551},[349,2758,2759,2761],{"class":351,"line":401},[349,2760,2072],{"class":489},[349,2762,647],{"class":551},[349,2764,2765,2767],{"class":351,"line":406},[349,2766,644],{"class":489},[349,2768,647],{"class":493},[321,2770,2194,2771,2213,2773,2775],{"color":323,"icon":13},[311,2772,208],{"href":213},[311,2774,272],{"href":277}," docs for all available drain adapters and enrichers.",[428,2777,2779],{"id":2778},"pipeline-batching-retry","Pipeline (Batching & Retry)",[307,2781,2782,2783,2786],{},"For production, wrap your adapter with ",[316,2784,2785],{},"createDrainPipeline"," to batch events and retry on failure:",[339,2788,2790],{"className":476,"code":2789,"filename":2474,"language":478,"meta":345,"style":345},"import { definePlugin } from 'nitro'\nimport type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nexport default definePlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>({\n    batch: { size: 50, intervalMs: 5000 },\n    retry: { maxAttempts: 3 },\n  })\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n",[316,2791,2792,2810,2831,2849,2869,2873,2893,2917,2946,2965,2971,2990,2994,3020],{"__ignoreMap":345},[349,2793,2794,2796,2798,2800,2802,2804,2806,2808],{"class":351,"line":352},[349,2795,486],{"class":485},[349,2797,490],{"class":489},[349,2799,2485],{"class":493},[349,2801,497],{"class":489},[349,2803,500],{"class":485},[349,2805,503],{"class":489},[349,2807,506],{"class":448},[349,2809,509],{"class":489},[349,2811,2812,2814,2816,2818,2821,2823,2825,2827,2829],{"class":351,"line":358},[349,2813,486],{"class":485},[349,2815,915],{"class":485},[349,2817,490],{"class":489},[349,2819,2820],{"class":493}," DrainContext",[349,2822,497],{"class":489},[349,2824,500],{"class":485},[349,2826,503],{"class":489},[349,2828,929],{"class":448},[349,2830,509],{"class":489},[349,2832,2833,2835,2837,2839,2841,2843,2845,2847],{"class":351,"line":365},[349,2834,486],{"class":485},[349,2836,490],{"class":489},[349,2838,2504],{"class":493},[349,2840,497],{"class":489},[349,2842,500],{"class":485},[349,2844,503],{"class":489},[349,2846,2513],{"class":448},[349,2848,509],{"class":489},[349,2850,2851,2853,2855,2858,2860,2862,2864,2867],{"class":351,"line":371},[349,2852,486],{"class":485},[349,2854,490],{"class":489},[349,2856,2857],{"class":493}," createDrainPipeline",[349,2859,497],{"class":489},[349,2861,500],{"class":485},[349,2863,503],{"class":489},[349,2865,2866],{"class":448},"evlog\u002Fpipeline",[349,2868,509],{"class":489},[349,2870,2871],{"class":351,"line":377},[349,2872,362],{"emptyLinePlaceholder":361},[349,2874,2875,2877,2879,2881,2883,2885,2887,2889,2891],{"class":351,"line":383},[349,2876,534],{"class":485},[349,2878,537],{"class":485},[349,2880,2485],{"class":540},[349,2882,543],{"class":493},[349,2884,543],{"class":489},[349,2886,2534],{"class":1470},[349,2888,628],{"class":489},[349,2890,994],{"class":761},[349,2892,557],{"class":489},[349,2894,2895,2897,2900,2902,2904,2907,2910,2913,2915],{"class":351,"line":389},[349,2896,1993],{"class":761},[349,2898,2899],{"class":493}," pipeline",[349,2901,1007],{"class":489},[349,2903,2857],{"class":540},[349,2905,2906],{"class":489},"\u003C",[349,2908,2909],{"class":444},"DrainContext",[349,2911,2912],{"class":489},">",[349,2914,543],{"class":551},[349,2916,546],{"class":489},[349,2918,2919,2922,2924,2926,2929,2931,2934,2936,2939,2941,2944],{"class":351,"line":395},[349,2920,2921],{"class":551},"    batch",[349,2923,426],{"class":489},[349,2925,490],{"class":489},[349,2927,2928],{"class":551}," size",[349,2930,426],{"class":489},[349,2932,2933],{"class":1163}," 50",[349,2935,1080],{"class":489},[349,2937,2938],{"class":551}," intervalMs",[349,2940,426],{"class":489},[349,2942,2943],{"class":1163}," 5000",[349,2945,620],{"class":489},[349,2947,2948,2951,2953,2955,2958,2960,2963],{"class":351,"line":401},[349,2949,2950],{"class":551},"    retry",[349,2952,426],{"class":489},[349,2954,490],{"class":489},[349,2956,2957],{"class":551}," maxAttempts",[349,2959,426],{"class":489},[349,2961,2962],{"class":1163}," 3",[349,2964,620],{"class":489},[349,2966,2967,2969],{"class":351,"line":406},[349,2968,2072],{"class":489},[349,2970,647],{"class":551},[349,2972,2973,2975,2978,2980,2982,2984,2987],{"class":351,"line":412},[349,2974,1993],{"class":761},[349,2976,2977],{"class":493}," drain",[349,2979,1007],{"class":489},[349,2981,2899],{"class":540},[349,2983,543],{"class":551},[349,2985,2986],{"class":540},"createAxiomDrain",[349,2988,2989],{"class":551},"())\n",[349,2991,2992],{"class":351,"line":633},[349,2993,362],{"emptyLinePlaceholder":361},[349,2995,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018],{"class":351,"line":641},[349,2997,2562],{"class":493},[349,2999,658],{"class":489},[349,3001,2567],{"class":493},[349,3003,658],{"class":489},[349,3005,2572],{"class":540},[349,3007,543],{"class":551},[349,3009,617],{"class":489},[349,3011,2579],{"class":448},[349,3013,617],{"class":489},[349,3015,1080],{"class":489},[349,3017,2977],{"class":493},[349,3019,647],{"class":551},[349,3021,3022,3024],{"class":351,"line":1129},[349,3023,644],{"class":489},[349,3025,647],{"class":493},[321,3027,3028,3029,3032,3033,3036],{"color":323,"icon":13},"Call ",[316,3030,3031],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[311,3034,3035],{"href":223},"Pipeline docs"," for all options.",[417,3038,3040],{"id":3039},"tail-sampling","Tail Sampling",[307,3042,3043,3044,3047],{},"Use the ",[316,3045,3046],{},"evlog:emit:keep"," hook to force-retain specific events regardless of head sampling:",[339,3049,3052],{"className":476,"code":3050,"filename":3051,"language":478,"meta":345,"style":345},"import { definePlugin } from 'nitro'\n\nexport default definePlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n    if (ctx.status && ctx.status >= 500) ctx.shouldKeep = true\n  })\n})\n","server\u002Fplugins\u002Fevlog-keep.ts",[316,3053,3054,3072,3076,3096,3128,3172,3210,3216],{"__ignoreMap":345},[349,3055,3056,3058,3060,3062,3064,3066,3068,3070],{"class":351,"line":352},[349,3057,486],{"class":485},[349,3059,490],{"class":489},[349,3061,2485],{"class":493},[349,3063,497],{"class":489},[349,3065,500],{"class":485},[349,3067,503],{"class":489},[349,3069,506],{"class":448},[349,3071,509],{"class":489},[349,3073,3074],{"class":351,"line":358},[349,3075,362],{"emptyLinePlaceholder":361},[349,3077,3078,3080,3082,3084,3086,3088,3090,3092,3094],{"class":351,"line":365},[349,3079,534],{"class":485},[349,3081,537],{"class":485},[349,3083,2485],{"class":540},[349,3085,543],{"class":493},[349,3087,543],{"class":489},[349,3089,2534],{"class":1470},[349,3091,628],{"class":489},[349,3093,994],{"class":761},[349,3095,557],{"class":489},[349,3097,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126],{"class":351,"line":371},[349,3099,2562],{"class":493},[349,3101,658],{"class":489},[349,3103,2567],{"class":493},[349,3105,658],{"class":489},[349,3107,2572],{"class":540},[349,3109,543],{"class":551},[349,3111,617],{"class":489},[349,3113,3046],{"class":448},[349,3115,617],{"class":489},[349,3117,1080],{"class":489},[349,3119,1672],{"class":489},[349,3121,2721],{"class":1470},[349,3123,628],{"class":489},[349,3125,994],{"class":761},[349,3127,557],{"class":489},[349,3129,3130,3133,3135,3137,3139,3142,3145,3148,3150,3152,3155,3158,3160,3162,3164,3167,3169],{"class":351,"line":377},[349,3131,3132],{"class":485},"    if",[349,3134,1672],{"class":551},[349,3136,2721],{"class":493},[349,3138,658],{"class":489},[349,3140,3141],{"class":493},"duration",[349,3143,3144],{"class":489}," &&",[349,3146,3147],{"class":493}," ctx",[349,3149,658],{"class":489},[349,3151,3141],{"class":493},[349,3153,3154],{"class":489}," >",[349,3156,3157],{"class":1163}," 2000",[349,3159,1686],{"class":551},[349,3161,2721],{"class":493},[349,3163,658],{"class":489},[349,3165,3166],{"class":493},"shouldKeep",[349,3168,1007],{"class":489},[349,3170,3171],{"class":567}," true\n",[349,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3195,3198,3200,3202,3204,3206,3208],{"class":351,"line":383},[349,3175,3132],{"class":485},[349,3177,1672],{"class":551},[349,3179,2721],{"class":493},[349,3181,658],{"class":489},[349,3183,2127],{"class":493},[349,3185,3144],{"class":489},[349,3187,3147],{"class":493},[349,3189,658],{"class":489},[349,3191,2127],{"class":493},[349,3193,3194],{"class":489}," >=",[349,3196,3197],{"class":1163}," 500",[349,3199,1686],{"class":551},[349,3201,2721],{"class":493},[349,3203,658],{"class":489},[349,3205,3166],{"class":493},[349,3207,1007],{"class":489},[349,3209,3171],{"class":567},[349,3211,3212,3214],{"class":351,"line":389},[349,3213,2072],{"class":489},[349,3215,647],{"class":551},[349,3217,3218,3220],{"class":351,"line":395},[349,3219,644],{"class":489},[349,3221,647],{"class":493},[417,3223,3225],{"id":3224},"run-locally","Run Locally",[339,3227,3229],{"className":434,"code":3228,"filename":436,"language":437,"meta":345,"style":345},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\u002Fexamples\u002Ftanstack-start\nbun install\nbun run dev\n",[316,3230,3231,3242,3250,3257],{"__ignoreMap":345},[349,3232,3233,3236,3239],{"class":351,"line":352},[349,3234,3235],{"class":444},"git",[349,3237,3238],{"class":448}," clone",[349,3240,3241],{"class":448}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[349,3243,3244,3247],{"class":351,"line":358},[349,3245,3246],{"class":540},"cd",[349,3248,3249],{"class":448}," evlog\u002Fexamples\u002Ftanstack-start\n",[349,3251,3252,3254],{"class":351,"line":365},[349,3253,445],{"class":444},[349,3255,3256],{"class":448}," install\n",[349,3258,3259,3261,3264],{"class":351,"line":371},[349,3260,445],{"class":444},[349,3262,3263],{"class":448}," run",[349,3265,3266],{"class":448}," dev\n",[307,3268,3269,3270,3275],{},"Open ",[311,3271,3272],{"href":3272,"rel":3273},"http:\u002F\u002Flocalhost:3000",[3274],"nofollow"," and navigate to the evlog Demo page to test the API endpoints.",[3277,3278,3279],"card-group",{},[3280,3281,3285],"card",{"icon":3282,"title":3283,"to":3284},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Ftanstack-start","Browse the complete TanStack Start example source on GitHub.",[417,3287,3289],{"id":3288},"next-steps","Next Steps",[307,3291,3292,3293,3295],{},"Deepen your ",[325,3294,149],{}," integration:",[3297,3298,3299,3305,3310,3315],"ul",{},[3300,3301,3302,3304],"li",{},[311,3303,46],{"href":47},": Design comprehensive events with context layering",[3300,3306,3307,3309],{},[311,3308,208],{"href":213},": Send logs to Axiom, Sentry, PostHog, and more",[3300,3311,3312,3314],{},[311,3313,91],{"href":92},": Control log volume with head and tail sampling",[3300,3316,3317,3319,3320,673,3322,677,3324,3326],{},[311,3318,51],{"href":52},": Throw errors with ",[316,3321,672],{},[316,3323,676],{},[316,3325,680],{}," fields",[3328,3329,3330],"style",{},"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 .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 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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":345,"searchDepth":358,"depth":358,"links":3332},[3333,3339,3340,3343,3344,3345,3348,3349,3350],{"id":419,"depth":358,"text":20,"children":3334},[3335,3336,3338],{"id":430,"depth":365,"text":431},{"id":455,"depth":365,"text":3337},"2. Add nitro.config.ts",{"id":661,"depth":365,"text":662},{"id":850,"depth":358,"text":46},{"id":1314,"depth":358,"text":1315,"children":3341},[3342],{"id":1943,"depth":365,"text":1944},{"id":2191,"depth":358,"text":86},{"id":2205,"depth":358,"text":2206},{"id":2462,"depth":358,"text":2463,"children":3346},[3347],{"id":2778,"depth":365,"text":2779},{"id":3039,"depth":358,"text":3040},{"id":3224,"depth":358,"text":3225},{"id":3288,"depth":358,"text":3289},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.","md",[3354],{"label":3283,"icon":3282,"to":3284,"color":3355,"variant":3356},"neutral","subtle",{},{"title":149,"icon":152},{"title":149,"description":3351},"bi5MViymvrczS4Mncb4sysdmOmAZ6reStr_SuwwOEZc",[3362,3364],{"title":144,"path":145,"stem":146,"description":3363,"icon":147,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Nitro v2 and v3 applications.",{"title":154,"path":155,"stem":156,"description":3365,"icon":157,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in NestJS applications.",1777048040710]