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