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