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