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