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