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