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