[{"data":1,"prerenderedAt":3702},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-tanstack-start":612,"-integrate-frameworks-tanstack-start-surround":3697},[4,35,85,138,318,453,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],{"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],{"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,"children":457,"page":34},"Libraries","\u002Flibraries","6.libraries",[458,462,467,470,474,479,484],{"title":41,"path":459,"stem":460,"icon":461},"\u002Flibraries\u002Foverview","6.libraries\u002F0.overview","i-lucide-package",{"title":463,"path":464,"stem":465,"icon":466},"Emitting Events","\u002Flibraries\u002Femitting","6.libraries\u002F1.emitting","i-lucide-radio",{"title":56,"path":468,"stem":469,"icon":59},"\u002Flibraries\u002Ferrors","6.libraries\u002F2.errors",{"title":471,"path":472,"stem":473,"icon":132},"Errors Agents Can Act On","\u002Flibraries\u002Fagents","6.libraries\u002F3.agents",{"title":475,"path":476,"stem":477,"icon":478},"Exporting the Catalog","\u002Flibraries\u002Fexporting","6.libraries\u002F4.exporting","i-lucide-file-output",{"title":480,"path":481,"stem":482,"icon":483},"Migrating","\u002Flibraries\u002Fmigrating","6.libraries\u002F5.migrating","i-lucide-route",{"title":485,"path":486,"stem":487,"icon":488},"Testing","\u002Flibraries\u002Ftesting","6.libraries\u002F6.testing","i-lucide-flask-conical",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","7.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","7.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","7.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","7.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","7.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","7.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","7.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","7.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","7.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","7.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","7.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","7.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","7.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","8.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","8.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","8.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":562,"stem":563,"icon":112},"\u002Freference\u002Fperformance","8.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","8.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","8.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","8.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","8.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","8.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","9.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","9.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","9.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","9.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","9.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","9.compare\u002F5.consola",{"id":613,"title":260,"body":614,"description":3687,"extension":3688,"links":3689,"meta":3693,"navigation":3694,"path":261,"seo":3695,"stem":262,"__hash__":3696},"docs\u002F4.integrate\u002Fframeworks\u002F05.tanstack-start.md",{"type":615,"value":616,"toc":3667},"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,1665,2200,2203,2279,2283,2289,2527,2530,2541,2545,2556,2798,2802,2809,2932,3107,3114,3118,3125,3364,3375,3379,3386,3560,3564,3606,3614,3624,3628,3634,3663],[618,619,620,621,625,626,630],"p",{},"TanStack Start uses ",[622,623,624],"a",{"href":256},"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,260],{},", the full-stack framework. If you're using TanStack Router in SPA mode, see ",[622,644,327],{"href":328}," instead.",[647,648,651,654,676],"prompt",{":actions":649,"description":650,"icon":263},"[\"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},"error-handling","Error Handling",[618,1652,1653,1654,1657,1658,1008,1660,1012,1662,1664],{},"Use ",[627,1655,1656],{},"createError"," for structured errors with ",[627,1659,1007],{},[627,1661,1011],{},[627,1663,1015],{}," fields:",[1666,1667,1668],"code-collapse",{},[709,1669,1672],{"className":799,"code":1670,"filename":1671,"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,1673,1674,1692,1710,1729,1749,1753,1778,1786,1794,1817,1829,1851,1871,1875,1923,1974,1978,1999,2003,2027,2038,2055,2068,2085,2102,2119,2127,2133,2138,2178,2183,2188,2193],{"__ignoreMap":715},[719,1675,1676,1678,1680,1682,1684,1686,1688,1690],{"class":721,"line":722},[719,1677,809],{"class":808},[719,1679,813],{"class":812},[719,1681,1214],{"class":816},[719,1683,820],{"class":812},[719,1685,823],{"class":808},[719,1687,826],{"class":812},[719,1689,1044],{"class":728},[719,1691,832],{"class":812},[719,1693,1694,1696,1698,1700,1702,1704,1706,1708],{"class":721,"line":835},[719,1695,809],{"class":808},[719,1697,813],{"class":812},[719,1699,1233],{"class":816},[719,1701,820],{"class":812},[719,1703,823],{"class":808},[719,1705,826],{"class":812},[719,1707,1198],{"class":728},[719,1709,832],{"class":812},[719,1711,1712,1714,1716,1719,1721,1723,1725,1727],{"class":721,"line":852},[719,1713,809],{"class":808},[719,1715,813],{"class":812},[719,1717,1718],{"class":816}," createError",[719,1720,820],{"class":812},[719,1722,823],{"class":808},[719,1724,826],{"class":812},[719,1726,1264],{"class":728},[719,1728,832],{"class":812},[719,1730,1731,1733,1735,1737,1739,1741,1743,1745,1747],{"class":721,"line":859},[719,1732,809],{"class":808},[719,1734,1250],{"class":808},[719,1736,813],{"class":812},[719,1738,1255],{"class":816},[719,1740,820],{"class":812},[719,1742,823],{"class":808},[719,1744,826],{"class":812},[719,1746,1264],{"class":728},[719,1748,832],{"class":812},[719,1750,1751],{"class":721,"line":877},[719,1752,856],{"emptyLinePlaceholder":855},[719,1754,1755,1757,1759,1761,1763,1765,1767,1769,1772,1774,1776],{"class":721,"line":889},[719,1756,862],{"class":808},[719,1758,1097],{"class":1096},[719,1760,1100],{"class":816},[719,1762,1103],{"class":812},[719,1764,1214],{"class":868},[719,1766,871],{"class":816},[719,1768,951],{"class":812},[719,1770,1771],{"class":728},"\u002Fapi\u002Fcheckout",[719,1773,951],{"class":812},[719,1775,1294],{"class":816},[719,1777,874],{"class":812},[719,1779,1780,1782,1784],{"class":721,"line":904},[719,1781,1114],{"class":880},[719,1783,699],{"class":812},[719,1785,886],{"class":812},[719,1787,1788,1790,1792],{"class":721,"line":910},[719,1789,1309],{"class":880},[719,1791,699],{"class":812},[719,1793,886],{"class":812},[719,1795,1796,1799,1801,1803,1806,1810,1813,1815],{"class":721,"line":921},[719,1797,1798],{"class":868},"      POST",[719,1800,699],{"class":812},[719,1802,1323],{"class":1096},[719,1804,1805],{"class":812}," ({",[719,1807,1809],{"class":1808},"sHdIc"," request",[719,1811,1812],{"class":812}," })",[719,1814,1329],{"class":1096},[719,1816,886],{"class":812},[719,1818,1819,1821,1823,1825,1827],{"class":721,"line":931},[719,1820,1336],{"class":1096},[719,1822,1339],{"class":816},[719,1824,1342],{"class":812},[719,1826,1233],{"class":868},[719,1828,1347],{"class":880},[719,1830,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849],{"class":721,"line":957},[719,1832,1336],{"class":1096},[719,1834,1354],{"class":816},[719,1836,1342],{"class":812},[719,1838,1339],{"class":816},[719,1840,993],{"class":812},[719,1842,1363],{"class":816},[719,1844,993],{"class":812},[719,1846,1368],{"class":816},[719,1848,1371],{"class":808},[719,1850,1374],{"class":725},[719,1852,1853,1855,1858,1860,1863,1865,1867,1869],{"class":721,"line":968},[719,1854,1336],{"class":1096},[719,1856,1857],{"class":816}," body",[719,1859,1342],{"class":812},[719,1861,1862],{"class":808}," await",[719,1864,1809],{"class":816},[719,1866,993],{"class":812},[719,1868,1524],{"class":868},[719,1870,1347],{"class":880},[719,1872,1873],{"class":721,"line":976},[719,1874,856],{"emptyLinePlaceholder":855},[719,1876,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1904,1906,1908,1910,1912,1914,1917,1919,1921],{"class":721,"line":1464},[719,1878,1383],{"class":816},[719,1880,993],{"class":812},[719,1882,1388],{"class":868},[719,1884,871],{"class":880},[719,1886,1393],{"class":812},[719,1888,1396],{"class":880},[719,1890,699],{"class":812},[719,1892,813],{"class":812},[719,1894,1403],{"class":880},[719,1896,699],{"class":812},[719,1898,1857],{"class":816},[719,1900,993],{"class":812},[719,1902,1903],{"class":816},"userId",[719,1905,1415],{"class":812},[719,1907,1418],{"class":880},[719,1909,699],{"class":812},[719,1911,1857],{"class":816},[719,1913,993],{"class":812},[719,1915,1916],{"class":816},"plan",[719,1918,820],{"class":812},[719,1920,820],{"class":812},[719,1922,982],{"class":880},[719,1924,1925,1927,1929,1931,1933,1935,1938,1940,1942,1945,1947,1949,1951,1954,1956,1959,1961,1963,1965,1968,1970,1972],{"class":721,"line":1508},[719,1926,1383],{"class":816},[719,1928,993],{"class":812},[719,1930,1388],{"class":868},[719,1932,871],{"class":880},[719,1934,1393],{"class":812},[719,1936,1937],{"class":880}," cart",[719,1939,699],{"class":812},[719,1941,813],{"class":812},[719,1943,1944],{"class":880}," items",[719,1946,699],{"class":812},[719,1948,1857],{"class":816},[719,1950,993],{"class":812},[719,1952,1953],{"class":816},"items",[719,1955,1415],{"class":812},[719,1957,1958],{"class":880}," total",[719,1960,699],{"class":812},[719,1962,1857],{"class":816},[719,1964,993],{"class":812},[719,1966,1967],{"class":816},"total",[719,1969,820],{"class":812},[719,1971,820],{"class":812},[719,1973,982],{"class":880},[719,1975,1976],{"class":721,"line":1513},[719,1977,856],{"emptyLinePlaceholder":855},[719,1979,1980,1982,1985,1987,1989,1992,1994,1997],{"class":721,"line":1542},[719,1981,1336],{"class":1096},[719,1983,1984],{"class":816}," result",[719,1986,1342],{"class":812},[719,1988,1862],{"class":808},[719,1990,1991],{"class":868}," chargeCard",[719,1993,871],{"class":880},[719,1995,1996],{"class":816},"body",[719,1998,982],{"class":880},[719,2000,2001],{"class":721,"line":1548},[719,2002,856],{"emptyLinePlaceholder":855},[719,2004,2005,2008,2011,2014,2017,2019,2022,2025],{"class":721,"line":1554},[719,2006,2007],{"class":808},"        if",[719,2009,2010],{"class":880}," (",[719,2012,2013],{"class":812},"!",[719,2015,2016],{"class":816},"result",[719,2018,993],{"class":812},[719,2020,2021],{"class":816},"success",[719,2023,2024],{"class":880},") ",[719,2026,874],{"class":812},[719,2028,2029,2032,2034,2036],{"class":721,"line":1559},[719,2030,2031],{"class":808},"          throw",[719,2033,1718],{"class":868},[719,2035,871],{"class":880},[719,2037,874],{"class":812},[719,2039,2041,2044,2046,2048,2051,2053],{"class":721,"line":2040},21,[719,2042,2043],{"class":880},"            message",[719,2045,699],{"class":812},[719,2047,826],{"class":812},[719,2049,2050],{"class":728},"Payment failed",[719,2052,951],{"class":812},[719,2054,901],{"class":812},[719,2056,2058,2061,2063,2066],{"class":721,"line":2057},22,[719,2059,2060],{"class":880},"            status",[719,2062,699],{"class":812},[719,2064,2065],{"class":1498}," 402",[719,2067,901],{"class":812},[719,2069,2071,2074,2076,2078,2081,2083],{"class":721,"line":2070},23,[719,2072,2073],{"class":880},"            why",[719,2075,699],{"class":812},[719,2077,826],{"class":812},[719,2079,2080],{"class":728},"Card declined by issuer",[719,2082,951],{"class":812},[719,2084,901],{"class":812},[719,2086,2088,2091,2093,2095,2098,2100],{"class":721,"line":2087},24,[719,2089,2090],{"class":880},"            fix",[719,2092,699],{"class":812},[719,2094,826],{"class":812},[719,2096,2097],{"class":728},"Try a different payment method",[719,2099,951],{"class":812},[719,2101,901],{"class":812},[719,2103,2105,2108,2110,2112,2115,2117],{"class":721,"line":2104},25,[719,2106,2107],{"class":880},"            link",[719,2109,699],{"class":812},[719,2111,826],{"class":812},[719,2113,2114],{"class":728},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[719,2116,951],{"class":812},[719,2118,901],{"class":812},[719,2120,2122,2125],{"class":721,"line":2121},26,[719,2123,2124],{"class":812},"          }",[719,2126,982],{"class":880},[719,2128,2130],{"class":721,"line":2129},27,[719,2131,2132],{"class":812},"        }\n",[719,2134,2136],{"class":721,"line":2135},28,[719,2137,856],{"emptyLinePlaceholder":855},[719,2139,2141,2143,2145,2147,2149,2151,2153,2156,2158,2160,2162,2165,2167,2169,2171,2174,2176],{"class":721,"line":2140},29,[719,2142,1516],{"class":808},[719,2144,1519],{"class":816},[719,2146,993],{"class":812},[719,2148,1524],{"class":868},[719,2150,871],{"class":880},[719,2152,1393],{"class":812},[719,2154,2155],{"class":880}," success",[719,2157,699],{"class":812},[719,2159,898],{"class":897},[719,2161,1415],{"class":812},[719,2163,2164],{"class":880}," orderId",[719,2166,699],{"class":812},[719,2168,1984],{"class":816},[719,2170,993],{"class":812},[719,2172,2173],{"class":816},"orderId",[719,2175,820],{"class":812},[719,2177,982],{"class":880},[719,2179,2181],{"class":721,"line":2180},30,[719,2182,1545],{"class":812},[719,2184,2186],{"class":721,"line":2185},31,[719,2187,1551],{"class":812},[719,2189,2191],{"class":721,"line":2190},32,[719,2192,907],{"class":812},[719,2194,2196,2198],{"class":721,"line":2195},33,[719,2197,979],{"class":812},[719,2199,982],{"class":816},[618,2201,2202],{},"The error is captured and logged with both the custom context and structured error fields:",[709,2204,2206],{"className":711,"code":2205,"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,2207,2208,2219,2241,2260,2270],{"__ignoreMap":715},[719,2209,2210,2213,2216],{"class":721,"line":722},[719,2211,2212],{"class":725},"14:58:20",[719,2214,2215],{"class":728}," ERROR",[719,2217,2218],{"class":816}," [my-app] POST \u002Fapi\u002Fcheckout 402 in 104ms\n",[719,2220,2221,2223,2226,2229,2232,2235,2238],{"class":721,"line":835},[719,2222,1588],{"class":725},[719,2224,2225],{"class":728}," error:",[719,2227,2228],{"class":728}," name=EvlogError",[719,2230,2231],{"class":728}," message=Payment",[719,2233,2234],{"class":728}," failed",[719,2236,2237],{"class":728}," status=",[719,2239,2240],{"class":1498},"402\n",[719,2242,2243,2245,2248,2251,2254,2257],{"class":721,"line":852},[719,2244,1588],{"class":725},[719,2246,2247],{"class":728}," cart:",[719,2249,2250],{"class":728}," items=",[719,2252,2253],{"class":1498},"3",[719,2255,2256],{"class":728}," total=",[719,2258,2259],{"class":1498},"9999\n",[719,2261,2262,2264,2266,2268],{"class":721,"line":859},[719,2263,1588],{"class":725},[719,2265,1620],{"class":728},[719,2267,1623],{"class":728},[719,2269,1626],{"class":728},[719,2271,2272,2274,2276],{"class":721,"line":877},[719,2273,1631],{"class":725},[719,2275,1634],{"class":728},[719,2277,2278],{"class":728}," 880a50ac-...\n",[701,2280,2282],{"id":2281},"parsing-errors-on-the-client","Parsing Errors on the Client",[618,2284,1653,2285,2288],{},[627,2286,2287],{},"parseError"," to extract the structured fields from any error response:",[709,2290,2295],{"className":2291,"code":2292,"filename":2293,"language":2294,"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,2296,2297,2316,2320,2327,2354,2370,2406,2413,2469,2481,2522],{"__ignoreMap":715},[719,2298,2299,2301,2303,2306,2308,2310,2312,2314],{"class":721,"line":722},[719,2300,809],{"class":808},[719,2302,813],{"class":812},[719,2304,2305],{"class":816}," parseError",[719,2307,820],{"class":812},[719,2309,823],{"class":808},[719,2311,826],{"class":812},[719,2313,1264],{"class":728},[719,2315,832],{"class":812},[719,2317,2318],{"class":721,"line":835},[719,2319,856],{"emptyLinePlaceholder":855},[719,2321,2322,2325],{"class":721,"line":852},[719,2323,2324],{"class":808},"try",[719,2326,886],{"class":812},[719,2328,2329,2332,2335,2337,2339,2342,2344,2346,2348,2350,2352],{"class":721,"line":859},[719,2330,2331],{"class":1096},"  const",[719,2333,2334],{"class":816}," res",[719,2336,1342],{"class":812},[719,2338,1862],{"class":808},[719,2340,2341],{"class":868}," fetch",[719,2343,871],{"class":880},[719,2345,951],{"class":812},[719,2347,1771],{"class":728},[719,2349,951],{"class":812},[719,2351,1415],{"class":812},[719,2353,886],{"class":812},[719,2355,2356,2359,2361,2363,2366,2368],{"class":721,"line":877},[719,2357,2358],{"class":880},"    method",[719,2360,699],{"class":812},[719,2362,826],{"class":812},[719,2364,2365],{"class":728},"POST",[719,2367,951],{"class":812},[719,2369,901],{"class":812},[719,2371,2372,2375,2377,2380,2382,2385,2387,2389,2392,2394,2396,2398,2400,2402,2404],{"class":721,"line":889},[719,2373,2374],{"class":880},"    body",[719,2376,699],{"class":812},[719,2378,2379],{"class":816}," JSON",[719,2381,993],{"class":812},[719,2383,2384],{"class":868},"stringify",[719,2386,871],{"class":880},[719,2388,1393],{"class":812},[719,2390,2391],{"class":880}," userId",[719,2393,699],{"class":812},[719,2395,826],{"class":812},[719,2397,1410],{"class":728},[719,2399,951],{"class":812},[719,2401,820],{"class":812},[719,2403,963],{"class":880},[719,2405,901],{"class":812},[719,2407,2408,2411],{"class":721,"line":904},[719,2409,2410],{"class":812},"  }",[719,2412,982],{"class":880},[719,2414,2415,2418,2420,2422,2425,2427,2430,2432,2435,2437,2440,2442,2444,2446,2448,2450,2452,2454,2457,2459,2461,2463,2466],{"class":721,"line":910},[719,2416,2417],{"class":808},"  if",[719,2419,2010],{"class":880},[719,2421,2013],{"class":812},[719,2423,2424],{"class":816},"res",[719,2426,993],{"class":812},[719,2428,2429],{"class":816},"ok",[719,2431,2024],{"class":880},[719,2433,2434],{"class":808},"throw",[719,2436,813],{"class":812},[719,2438,2439],{"class":880}," data",[719,2441,699],{"class":812},[719,2443,1862],{"class":808},[719,2445,2334],{"class":816},[719,2447,993],{"class":812},[719,2449,1524],{"class":868},[719,2451,1134],{"class":880},[719,2453,1415],{"class":812},[719,2455,2456],{"class":880}," status",[719,2458,699],{"class":812},[719,2460,2334],{"class":816},[719,2462,993],{"class":812},[719,2464,2465],{"class":816},"status",[719,2467,2468],{"class":812}," }\n",[719,2470,2471,2473,2476,2479],{"class":721,"line":921},[719,2472,979],{"class":812},[719,2474,2475],{"class":808}," catch",[719,2477,2478],{"class":816}," (error) ",[719,2480,874],{"class":812},[719,2482,2483,2485,2487,2490,2492,2494,2496,2499,2501,2504,2506,2509,2511,2513,2515,2517,2520],{"class":721,"line":931},[719,2484,2331],{"class":1096},[719,2486,813],{"class":812},[719,2488,2489],{"class":816}," message",[719,2491,1415],{"class":812},[719,2493,2456],{"class":816},[719,2495,1415],{"class":812},[719,2497,2498],{"class":816}," why",[719,2500,1415],{"class":812},[719,2502,2503],{"class":816}," fix",[719,2505,1415],{"class":812},[719,2507,2508],{"class":816}," link",[719,2510,820],{"class":812},[719,2512,1342],{"class":812},[719,2514,2305],{"class":868},[719,2516,871],{"class":880},[719,2518,2519],{"class":816},"error",[719,2521,982],{"class":880},[719,2523,2524],{"class":721,"line":957},[719,2525,2526],{"class":812},"}\n",[690,2528,557],{"id":2529},"configuration",[618,2531,2532,2533,2536,2537,2540],{},"See the ",[622,2534,2535],{"href":558},"Configuration reference"," for all available options (",[627,2538,2539],{},"initLogger",", middleware options, sampling, silent mode, etc.).",[690,2542,2544],{"id":2543},"route-filtering","Route Filtering",[618,2546,2547,2548,2551,2552,2555],{},"Control which routes are logged with ",[627,2549,2550],{},"include"," and ",[627,2553,2554],{},"exclude"," in the module options:",[709,2557,2559],{"className":799,"code":2558,"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,2560,2561,2579,2593,2597,2609,2626,2634,2642,2662,2683,2712,2721,2748,2774,2778,2786,2792],{"__ignoreMap":715},[719,2562,2563,2565,2567,2569,2571,2573,2575,2577],{"class":721,"line":722},[719,2564,809],{"class":808},[719,2566,813],{"class":812},[719,2568,817],{"class":816},[719,2570,820],{"class":812},[719,2572,823],{"class":808},[719,2574,826],{"class":812},[719,2576,829],{"class":728},[719,2578,832],{"class":812},[719,2580,2581,2583,2585,2587,2589,2591],{"class":721,"line":835},[719,2582,809],{"class":808},[719,2584,840],{"class":816},[719,2586,843],{"class":808},[719,2588,826],{"class":812},[719,2590,629],{"class":728},[719,2592,832],{"class":812},[719,2594,2595],{"class":721,"line":852},[719,2596,856],{"emptyLinePlaceholder":855},[719,2598,2599,2601,2603,2605,2607],{"class":721,"line":859},[719,2600,862],{"class":808},[719,2602,865],{"class":808},[719,2604,817],{"class":868},[719,2606,871],{"class":816},[719,2608,874],{"class":812},[719,2610,2611,2613,2615,2617,2620,2622,2624],{"class":721,"line":877},[719,2612,881],{"class":880},[719,2614,699],{"class":812},[719,2616,813],{"class":812},[719,2618,2619],{"class":880}," asyncContext",[719,2621,699],{"class":812},[719,2623,898],{"class":897},[719,2625,954],{"class":812},[719,2627,2628,2630,2632],{"class":721,"line":889},[719,2629,913],{"class":880},[719,2631,699],{"class":812},[719,2633,918],{"class":816},[719,2635,2636,2638,2640],{"class":721,"line":904},[719,2637,924],{"class":868},[719,2639,871],{"class":816},[719,2641,874],{"class":812},[719,2643,2644,2646,2648,2650,2652,2654,2656,2658,2660],{"class":721,"line":910},[719,2645,934],{"class":880},[719,2647,699],{"class":812},[719,2649,813],{"class":812},[719,2651,941],{"class":880},[719,2653,699],{"class":812},[719,2655,826],{"class":812},[719,2657,948],{"class":728},[719,2659,951],{"class":812},[719,2661,954],{"class":812},[719,2663,2664,2667,2669,2671,2673,2676,2678,2681],{"class":721,"line":921},[719,2665,2666],{"class":880},"      include",[719,2668,699],{"class":812},[719,2670,1128],{"class":816},[719,2672,951],{"class":812},[719,2674,2675],{"class":728},"\u002Fapi\u002F**",[719,2677,951],{"class":812},[719,2679,2680],{"class":816},"]",[719,2682,901],{"class":812},[719,2684,2685,2688,2690,2692,2694,2697,2699,2701,2703,2706,2708,2710],{"class":721,"line":931},[719,2686,2687],{"class":880},"      exclude",[719,2689,699],{"class":812},[719,2691,1128],{"class":816},[719,2693,951],{"class":812},[719,2695,2696],{"class":728},"\u002F_internal\u002F**",[719,2698,951],{"class":812},[719,2700,1415],{"class":812},[719,2702,826],{"class":812},[719,2704,2705],{"class":728},"\u002Fhealth",[719,2707,951],{"class":812},[719,2709,2680],{"class":816},[719,2711,901],{"class":812},[719,2713,2714,2717,2719],{"class":721,"line":957},[719,2715,2716],{"class":880},"      routes",[719,2718,699],{"class":812},[719,2720,886],{"class":812},[719,2722,2723,2726,2729,2731,2733,2735,2737,2739,2741,2744,2746],{"class":721,"line":968},[719,2724,2725],{"class":812},"        '",[719,2727,2728],{"class":880},"\u002Fapi\u002Fauth\u002F**",[719,2730,951],{"class":812},[719,2732,699],{"class":812},[719,2734,813],{"class":812},[719,2736,941],{"class":880},[719,2738,699],{"class":812},[719,2740,826],{"class":812},[719,2742,2743],{"class":728},"auth-service",[719,2745,951],{"class":812},[719,2747,954],{"class":812},[719,2749,2750,2752,2755,2757,2759,2761,2763,2765,2767,2770,2772],{"class":721,"line":976},[719,2751,2725],{"class":812},[719,2753,2754],{"class":880},"\u002Fapi\u002Fpayment\u002F**",[719,2756,951],{"class":812},[719,2758,699],{"class":812},[719,2760,813],{"class":812},[719,2762,941],{"class":880},[719,2764,699],{"class":812},[719,2766,826],{"class":812},[719,2768,2769],{"class":728},"payment-service",[719,2771,951],{"class":812},[719,2773,954],{"class":812},[719,2775,2776],{"class":721,"line":1464},[719,2777,1545],{"class":812},[719,2779,2780,2782,2784],{"class":721,"line":1508},[719,2781,960],{"class":812},[719,2783,963],{"class":816},[719,2785,901],{"class":812},[719,2787,2788,2790],{"class":721,"line":1513},[719,2789,971],{"class":816},[719,2791,901],{"class":812},[719,2793,2794,2796],{"class":721,"line":1542},[719,2795,979],{"class":812},[719,2797,982],{"class":816},[690,2799,2801],{"id":2800},"drain-enrichers","Drain & Enrichers",[618,2803,2804,2805,2808],{},"Since TanStack Start uses Nitro v3, configure drains and enrichers via Nitro plugins. Create a ",[627,2806,2807],{},"server\u002Fplugins\u002F"," directory and register hooks:",[709,2810,2813],{"className":799,"code":2811,"filename":2812,"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,2814,2815,2834,2854,2858,2879,2892,2896,2926],{"__ignoreMap":715},[719,2816,2817,2819,2821,2824,2826,2828,2830,2832],{"class":721,"line":722},[719,2818,809],{"class":808},[719,2820,813],{"class":812},[719,2822,2823],{"class":816}," definePlugin",[719,2825,820],{"class":812},[719,2827,823],{"class":808},[719,2829,826],{"class":812},[719,2831,829],{"class":728},[719,2833,832],{"class":812},[719,2835,2836,2838,2840,2843,2845,2847,2849,2852],{"class":721,"line":835},[719,2837,809],{"class":808},[719,2839,813],{"class":812},[719,2841,2842],{"class":816}," createAxiomDrain",[719,2844,820],{"class":812},[719,2846,823],{"class":808},[719,2848,826],{"class":812},[719,2850,2851],{"class":728},"evlog\u002Faxiom",[719,2853,832],{"class":812},[719,2855,2856],{"class":721,"line":852},[719,2857,856],{"emptyLinePlaceholder":855},[719,2859,2860,2862,2864,2866,2868,2870,2873,2875,2877],{"class":721,"line":859},[719,2861,862],{"class":808},[719,2863,865],{"class":808},[719,2865,2823],{"class":868},[719,2867,871],{"class":816},[719,2869,871],{"class":812},[719,2871,2872],{"class":1808},"nitroApp",[719,2874,963],{"class":812},[719,2876,1329],{"class":1096},[719,2878,886],{"class":812},[719,2880,2881,2883,2886,2888,2890],{"class":721,"line":877},[719,2882,2331],{"class":1096},[719,2884,2885],{"class":816}," axiom",[719,2887,1342],{"class":812},[719,2889,2842],{"class":868},[719,2891,1347],{"class":880},[719,2893,2894],{"class":721,"line":889},[719,2895,856],{"emptyLinePlaceholder":855},[719,2897,2898,2901,2903,2906,2908,2911,2913,2915,2918,2920,2922,2924],{"class":721,"line":904},[719,2899,2900],{"class":816},"  nitroApp",[719,2902,993],{"class":812},[719,2904,2905],{"class":816},"hooks",[719,2907,993],{"class":812},[719,2909,2910],{"class":868},"hook",[719,2912,871],{"class":880},[719,2914,951],{"class":812},[719,2916,2917],{"class":728},"evlog:drain",[719,2919,951],{"class":812},[719,2921,1415],{"class":812},[719,2923,2885],{"class":816},[719,2925,982],{"class":880},[719,2927,2928,2930],{"class":721,"line":910},[719,2929,979],{"class":812},[719,2931,982],{"class":816},[709,2933,2936],{"className":799,"code":2934,"filename":2935,"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,2937,2938,2956,2981,2985,3005,3028,3032,3066,3095,3101],{"__ignoreMap":715},[719,2939,2940,2942,2944,2946,2948,2950,2952,2954],{"class":721,"line":722},[719,2941,809],{"class":808},[719,2943,813],{"class":812},[719,2945,2823],{"class":816},[719,2947,820],{"class":812},[719,2949,823],{"class":808},[719,2951,826],{"class":812},[719,2953,829],{"class":728},[719,2955,832],{"class":812},[719,2957,2958,2960,2962,2965,2967,2970,2972,2974,2976,2979],{"class":721,"line":835},[719,2959,809],{"class":808},[719,2961,813],{"class":812},[719,2963,2964],{"class":816}," createUserAgentEnricher",[719,2966,1415],{"class":812},[719,2968,2969],{"class":816}," createRequestSizeEnricher",[719,2971,820],{"class":812},[719,2973,823],{"class":808},[719,2975,826],{"class":812},[719,2977,2978],{"class":728},"evlog\u002Fenrichers",[719,2980,832],{"class":812},[719,2982,2983],{"class":721,"line":852},[719,2984,856],{"emptyLinePlaceholder":855},[719,2986,2987,2989,2991,2993,2995,2997,2999,3001,3003],{"class":721,"line":859},[719,2988,862],{"class":808},[719,2990,865],{"class":808},[719,2992,2823],{"class":868},[719,2994,871],{"class":816},[719,2996,871],{"class":812},[719,2998,2872],{"class":1808},[719,3000,963],{"class":812},[719,3002,1329],{"class":1096},[719,3004,886],{"class":812},[719,3006,3007,3009,3012,3014,3016,3019,3021,3023,3025],{"class":721,"line":877},[719,3008,2331],{"class":1096},[719,3010,3011],{"class":816}," enrichers",[719,3013,1342],{"class":812},[719,3015,1128],{"class":880},[719,3017,3018],{"class":868},"createUserAgentEnricher",[719,3020,1134],{"class":880},[719,3022,1415],{"class":812},[719,3024,2969],{"class":868},[719,3026,3027],{"class":880},"()]\n",[719,3029,3030],{"class":721,"line":889},[719,3031,856],{"emptyLinePlaceholder":855},[719,3033,3034,3036,3038,3040,3042,3044,3046,3048,3051,3053,3055,3057,3060,3062,3064],{"class":721,"line":904},[719,3035,2900],{"class":816},[719,3037,993],{"class":812},[719,3039,2905],{"class":816},[719,3041,993],{"class":812},[719,3043,2910],{"class":868},[719,3045,871],{"class":880},[719,3047,951],{"class":812},[719,3049,3050],{"class":728},"evlog:enrich",[719,3052,951],{"class":812},[719,3054,1415],{"class":812},[719,3056,2010],{"class":812},[719,3058,3059],{"class":1808},"ctx",[719,3061,963],{"class":812},[719,3063,1329],{"class":1096},[719,3065,886],{"class":812},[719,3067,3068,3071,3073,3076,3079,3082,3084,3086,3089,3091,3093],{"class":721,"line":910},[719,3069,3070],{"class":808},"    for",[719,3072,2010],{"class":880},[719,3074,3075],{"class":1096},"const",[719,3077,3078],{"class":816}," enricher",[719,3080,3081],{"class":812}," of",[719,3083,3011],{"class":816},[719,3085,2024],{"class":880},[719,3087,3088],{"class":868},"enricher",[719,3090,871],{"class":880},[719,3092,3059],{"class":816},[719,3094,982],{"class":880},[719,3096,3097,3099],{"class":721,"line":921},[719,3098,2410],{"class":812},[719,3100,982],{"class":880},[719,3102,3103,3105],{"class":721,"line":931},[719,3104,979],{"class":812},[719,3106,982],{"class":816},[632,3108,2532,3109,2551,3111,3113],{"color":634,"icon":13},[622,3110,148],{"href":153},[622,3112,440],{"href":441}," docs for all available drain adapters and enrichers.",[701,3115,3117],{"id":3116},"pipeline-batching-retry","Pipeline (Batching & Retry)",[618,3119,3120,3121,3124],{},"For production, wrap your adapter with ",[627,3122,3123],{},"createDrainPipeline"," to batch events and retry on failure:",[709,3126,3128],{"className":799,"code":3127,"filename":2812,"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,3129,3130,3148,3169,3187,3207,3211,3231,3255,3284,3303,3309,3328,3332,3358],{"__ignoreMap":715},[719,3131,3132,3134,3136,3138,3140,3142,3144,3146],{"class":721,"line":722},[719,3133,809],{"class":808},[719,3135,813],{"class":812},[719,3137,2823],{"class":816},[719,3139,820],{"class":812},[719,3141,823],{"class":808},[719,3143,826],{"class":812},[719,3145,829],{"class":728},[719,3147,832],{"class":812},[719,3149,3150,3152,3154,3156,3159,3161,3163,3165,3167],{"class":721,"line":835},[719,3151,809],{"class":808},[719,3153,1250],{"class":808},[719,3155,813],{"class":812},[719,3157,3158],{"class":816}," DrainContext",[719,3160,820],{"class":812},[719,3162,823],{"class":808},[719,3164,826],{"class":812},[719,3166,1264],{"class":728},[719,3168,832],{"class":812},[719,3170,3171,3173,3175,3177,3179,3181,3183,3185],{"class":721,"line":852},[719,3172,809],{"class":808},[719,3174,813],{"class":812},[719,3176,2842],{"class":816},[719,3178,820],{"class":812},[719,3180,823],{"class":808},[719,3182,826],{"class":812},[719,3184,2851],{"class":728},[719,3186,832],{"class":812},[719,3188,3189,3191,3193,3196,3198,3200,3202,3205],{"class":721,"line":859},[719,3190,809],{"class":808},[719,3192,813],{"class":812},[719,3194,3195],{"class":816}," createDrainPipeline",[719,3197,820],{"class":812},[719,3199,823],{"class":808},[719,3201,826],{"class":812},[719,3203,3204],{"class":728},"evlog\u002Fpipeline",[719,3206,832],{"class":812},[719,3208,3209],{"class":721,"line":877},[719,3210,856],{"emptyLinePlaceholder":855},[719,3212,3213,3215,3217,3219,3221,3223,3225,3227,3229],{"class":721,"line":889},[719,3214,862],{"class":808},[719,3216,865],{"class":808},[719,3218,2823],{"class":868},[719,3220,871],{"class":816},[719,3222,871],{"class":812},[719,3224,2872],{"class":1808},[719,3226,963],{"class":812},[719,3228,1329],{"class":1096},[719,3230,886],{"class":812},[719,3232,3233,3235,3238,3240,3242,3245,3248,3251,3253],{"class":721,"line":904},[719,3234,2331],{"class":1096},[719,3236,3237],{"class":816}," pipeline",[719,3239,1342],{"class":812},[719,3241,3195],{"class":868},[719,3243,3244],{"class":812},"\u003C",[719,3246,3247],{"class":725},"DrainContext",[719,3249,3250],{"class":812},">",[719,3252,871],{"class":880},[719,3254,874],{"class":812},[719,3256,3257,3260,3262,3264,3267,3269,3272,3274,3277,3279,3282],{"class":721,"line":910},[719,3258,3259],{"class":880},"    batch",[719,3261,699],{"class":812},[719,3263,813],{"class":812},[719,3265,3266],{"class":880}," size",[719,3268,699],{"class":812},[719,3270,3271],{"class":1498}," 50",[719,3273,1415],{"class":812},[719,3275,3276],{"class":880}," intervalMs",[719,3278,699],{"class":812},[719,3280,3281],{"class":1498}," 5000",[719,3283,954],{"class":812},[719,3285,3286,3289,3291,3293,3296,3298,3301],{"class":721,"line":921},[719,3287,3288],{"class":880},"    retry",[719,3290,699],{"class":812},[719,3292,813],{"class":812},[719,3294,3295],{"class":880}," maxAttempts",[719,3297,699],{"class":812},[719,3299,3300],{"class":1498}," 3",[719,3302,954],{"class":812},[719,3304,3305,3307],{"class":721,"line":931},[719,3306,2410],{"class":812},[719,3308,982],{"class":880},[719,3310,3311,3313,3316,3318,3320,3322,3325],{"class":721,"line":957},[719,3312,2331],{"class":1096},[719,3314,3315],{"class":816}," drain",[719,3317,1342],{"class":812},[719,3319,3237],{"class":868},[719,3321,871],{"class":880},[719,3323,3324],{"class":868},"createAxiomDrain",[719,3326,3327],{"class":880},"())\n",[719,3329,3330],{"class":721,"line":968},[719,3331,856],{"emptyLinePlaceholder":855},[719,3333,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356],{"class":721,"line":976},[719,3335,2900],{"class":816},[719,3337,993],{"class":812},[719,3339,2905],{"class":816},[719,3341,993],{"class":812},[719,3343,2910],{"class":868},[719,3345,871],{"class":880},[719,3347,951],{"class":812},[719,3349,2917],{"class":728},[719,3351,951],{"class":812},[719,3353,1415],{"class":812},[719,3355,3315],{"class":816},[719,3357,982],{"class":880},[719,3359,3360,3362],{"class":721,"line":1464},[719,3361,979],{"class":812},[719,3363,982],{"class":816},[632,3365,3366,3367,3370,3371,3374],{"color":634,"icon":13},"Call ",[627,3368,3369],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[622,3372,3373],{"href":545},"Pipeline docs"," for all options.",[690,3376,3378],{"id":3377},"tail-sampling","Tail Sampling",[618,3380,3381,3382,3385],{},"Use the ",[627,3383,3384],{},"evlog:emit:keep"," hook to force-retain specific events regardless of head sampling:",[709,3387,3390],{"className":799,"code":3388,"filename":3389,"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,3391,3392,3410,3414,3434,3466,3510,3548,3554],{"__ignoreMap":715},[719,3393,3394,3396,3398,3400,3402,3404,3406,3408],{"class":721,"line":722},[719,3395,809],{"class":808},[719,3397,813],{"class":812},[719,3399,2823],{"class":816},[719,3401,820],{"class":812},[719,3403,823],{"class":808},[719,3405,826],{"class":812},[719,3407,829],{"class":728},[719,3409,832],{"class":812},[719,3411,3412],{"class":721,"line":835},[719,3413,856],{"emptyLinePlaceholder":855},[719,3415,3416,3418,3420,3422,3424,3426,3428,3430,3432],{"class":721,"line":852},[719,3417,862],{"class":808},[719,3419,865],{"class":808},[719,3421,2823],{"class":868},[719,3423,871],{"class":816},[719,3425,871],{"class":812},[719,3427,2872],{"class":1808},[719,3429,963],{"class":812},[719,3431,1329],{"class":1096},[719,3433,886],{"class":812},[719,3435,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464],{"class":721,"line":859},[719,3437,2900],{"class":816},[719,3439,993],{"class":812},[719,3441,2905],{"class":816},[719,3443,993],{"class":812},[719,3445,2910],{"class":868},[719,3447,871],{"class":880},[719,3449,951],{"class":812},[719,3451,3384],{"class":728},[719,3453,951],{"class":812},[719,3455,1415],{"class":812},[719,3457,2010],{"class":812},[719,3459,3059],{"class":1808},[719,3461,963],{"class":812},[719,3463,1329],{"class":1096},[719,3465,886],{"class":812},[719,3467,3468,3471,3473,3475,3477,3480,3483,3486,3488,3490,3493,3496,3498,3500,3502,3505,3507],{"class":721,"line":877},[719,3469,3470],{"class":808},"    if",[719,3472,2010],{"class":880},[719,3474,3059],{"class":816},[719,3476,993],{"class":812},[719,3478,3479],{"class":816},"duration",[719,3481,3482],{"class":812}," &&",[719,3484,3485],{"class":816}," ctx",[719,3487,993],{"class":812},[719,3489,3479],{"class":816},[719,3491,3492],{"class":812}," >",[719,3494,3495],{"class":1498}," 2000",[719,3497,2024],{"class":880},[719,3499,3059],{"class":816},[719,3501,993],{"class":812},[719,3503,3504],{"class":816},"shouldKeep",[719,3506,1342],{"class":812},[719,3508,3509],{"class":897}," true\n",[719,3511,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3533,3536,3538,3540,3542,3544,3546],{"class":721,"line":889},[719,3513,3470],{"class":808},[719,3515,2010],{"class":880},[719,3517,3059],{"class":816},[719,3519,993],{"class":812},[719,3521,2465],{"class":816},[719,3523,3482],{"class":812},[719,3525,3485],{"class":816},[719,3527,993],{"class":812},[719,3529,2465],{"class":816},[719,3531,3532],{"class":812}," >=",[719,3534,3535],{"class":1498}," 500",[719,3537,2024],{"class":880},[719,3539,3059],{"class":816},[719,3541,993],{"class":812},[719,3543,3504],{"class":816},[719,3545,1342],{"class":812},[719,3547,3509],{"class":897},[719,3549,3550,3552],{"class":721,"line":904},[719,3551,2410],{"class":812},[719,3553,982],{"class":880},[719,3555,3556,3558],{"class":721,"line":910},[719,3557,979],{"class":812},[719,3559,982],{"class":816},[690,3561,3563],{"id":3562},"run-locally","Run Locally",[709,3565,3568],{"className":711,"code":3566,"filename":3567,"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,3569,3570,3581,3589,3596],{"__ignoreMap":715},[719,3571,3572,3575,3578],{"class":721,"line":722},[719,3573,3574],{"class":725},"git",[719,3576,3577],{"class":728}," clone",[719,3579,3580],{"class":728}," https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog.git\n",[719,3582,3583,3586],{"class":721,"line":835},[719,3584,3585],{"class":868},"cd",[719,3587,3588],{"class":728}," evlog\u002Fexamples\u002Ftanstack-start\n",[719,3590,3591,3593],{"class":721,"line":852},[719,3592,713],{"class":725},[719,3594,3595],{"class":728}," install\n",[719,3597,3598,3600,3603],{"class":721,"line":859},[719,3599,713],{"class":725},[719,3601,3602],{"class":728}," run",[719,3604,3605],{"class":728}," dev\n",[618,3607,3608,3609,3613],{},"Open ",[622,3610,3611],{"href":3611,"rel":3612},"http:\u002F\u002Flocalhost:3000",[683]," and navigate to the evlog Demo page to test the API endpoints.",[3615,3616,3617],"card-group",{},[3618,3619,3623],"card",{"icon":3620,"title":3621,"to":3622},"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,3625,3627],{"id":3626},"next-steps","Next Steps",[618,3629,3630,3631,3633],{},"Deepen your ",[636,3632,260],{}," integration:",[655,3635,3636,3641,3646,3651],{},[658,3637,3638,3640],{},[622,3639,51],{"href":52},": Design comprehensive events with context layering",[658,3642,3643,3645],{},[622,3644,148],{"href":153},": Send logs to Axiom, Sentry, PostHog, and more",[658,3647,3648,3650],{},[622,3649,66],{"href":67},": Control log volume with head and tail sampling",[658,3652,3653,3655,3656,1008,3658,1012,3660,3662],{},[622,3654,56],{"href":57},": Throw errors with ",[627,3657,1007],{},[627,3659,1011],{},[627,3661,1015],{}," fields",[3664,3665,3666],"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":3668},[3669,3675,3676,3679,3680,3681,3684,3685,3686],{"id":692,"depth":835,"text":25,"children":3670},[3671,3672,3674],{"id":703,"depth":852,"text":704},{"id":778,"depth":852,"text":3673},"2. Add nitro.config.ts",{"id":996,"depth":852,"text":997},{"id":1185,"depth":835,"text":51},{"id":1649,"depth":835,"text":1650,"children":3677},[3678],{"id":2281,"depth":852,"text":2282},{"id":2529,"depth":835,"text":557},{"id":2543,"depth":835,"text":2544},{"id":2800,"depth":835,"text":2801,"children":3682},[3683],{"id":3116,"depth":852,"text":3117},{"id":3377,"depth":835,"text":3378},{"id":3562,"depth":835,"text":3563},{"id":3626,"depth":835,"text":3627},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.","md",[3690],{"label":3621,"icon":3620,"to":3622,"color":3691,"variant":3692},"neutral","subtle",{},{"title":260,"icon":263},{"title":260,"description":3687},"l8keU4LhWYax1YmXauvP5Te2jNwoEkbSFL6qabNncl0",[3698,3700],{"title":255,"path":256,"stem":257,"description":3699,"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":3701,"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.",1789294030927]