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