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