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