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