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