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