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