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