[{"data":1,"prerenderedAt":3310},["ShallowReactive",2],{"navigation_docs":3,"-start-quick-start":529,"-start-quick-start-surround":3305},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":530,"title":25,"body":531,"description":3295,"extension":3296,"links":3297,"meta":3301,"navigation":3302,"path":26,"seo":3303,"stem":27,"__hash__":3304},"docs\u002F1.start\u002F4.quick-start.md",{"type":532,"value":533,"toc":3281},"minimark",[534,538,563,607,612,615,828,831,852,860,864,874,1139,1159,1175,1248,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],[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":434},"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":28},"[\"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,41],{"href":42}," 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,1250,1251,1253,1254,1257,1258,1261],{"color":541,"icon":13},"With ",[549,1252,873],{}," and ",[549,1255,1256],{},"createRequestLogger",", you must call ",[549,1259,1260],{},"log.emit()"," manually. In framework integrations, this happens automatically.",[608,1263,1265],{"id":1264},"uselogger-retrieve-the-request-logger","useLogger (Retrieve the Request Logger)",[535,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. ",[549,1270,1271],{},"useLogger(event)"," retrieves that logger from the request context:",[616,1274,1275,1543],{},[619,1276,1279],{"className":621,"code":1277,"filename":1278,"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,1280,1281,1300,1304,1336,1354,1358,1406,1449,1453,1470,1498,1503,1535],{"__ignoreMap":625},[629,1282,1283,1285,1287,1290,1292,1294,1296,1298],{"class":631,"line":632},[629,1284,636],{"class":635},[629,1286,640],{"class":639},[629,1288,1289],{"class":643}," useLogger",[629,1291,647],{"class":639},[629,1293,650],{"class":635},[629,1295,653],{"class":639},[629,1297,657],{"class":656},[629,1299,660],{"class":639},[629,1301,1302],{"class":631,"line":663},[629,1303,667],{"emptyLinePlaceholder":666},[629,1305,1306,1309,1312,1315,1317,1320,1323,1327,1330,1333],{"class":631,"line":670},[629,1307,1308],{"class":635},"export",[629,1310,1311],{"class":635}," default",[629,1313,1314],{"class":678}," defineEventHandler",[629,1316,681],{"class":643},[629,1318,1319],{"class":952},"async",[629,1321,1322],{"class":639}," (",[629,1324,1326],{"class":1325},"sHdIc","event",[629,1328,1329],{"class":639},")",[629,1331,1332],{"class":952}," =>",[629,1334,1335],{"class":639}," {\n",[629,1337,1338,1341,1343,1346,1348,1350,1352],{"class":631,"line":705},[629,1339,1340],{"class":952},"  const",[629,1342,644],{"class":643},[629,1344,1345],{"class":639}," =",[629,1347,1289],{"class":678},[629,1349,681],{"class":720},[629,1351,1326],{"class":643},[629,1353,702],{"class":720},[629,1355,1356],{"class":631,"line":752},[629,1357,667],{"emptyLinePlaceholder":666},[629,1359,1360,1363,1365,1367,1369,1371,1374,1376,1378,1381,1383,1386,1388,1391,1393,1395,1398,1400,1402,1404],{"class":631,"line":998},[629,1361,1362],{"class":643},"  log",[629,1364,675],{"class":639},[629,1366,1010],{"class":678},[629,1368,681],{"class":720},[629,1370,717],{"class":639},[629,1372,1373],{"class":720}," user",[629,1375,724],{"class":639},[629,1377,640],{"class":639},[629,1379,1380],{"class":720}," id",[629,1382,724],{"class":639},[629,1384,1385],{"class":1029}," 1",[629,1387,692],{"class":639},[629,1389,1390],{"class":720}," plan",[629,1392,724],{"class":639},[629,1394,653],{"class":639},[629,1396,1397],{"class":656},"pro",[629,1399,684],{"class":639},[629,1401,647],{"class":639},[629,1403,647],{"class":639},[629,1405,702],{"class":720},[629,1407,1408,1410,1412,1414,1416,1418,1421,1423,1425,1428,1430,1433,1435,1438,1440,1443,1445,1447],{"class":631,"line":1003},[629,1409,1362],{"class":643},[629,1411,675],{"class":639},[629,1413,1010],{"class":678},[629,1415,681],{"class":720},[629,1417,717],{"class":639},[629,1419,1420],{"class":720}," cart",[629,1422,724],{"class":639},[629,1424,640],{"class":639},[629,1426,1427],{"class":720}," items",[629,1429,724],{"class":639},[629,1431,1432],{"class":1029}," 3",[629,1434,692],{"class":639},[629,1436,1437],{"class":720}," total",[629,1439,724],{"class":639},[629,1441,1442],{"class":1029}," 9999",[629,1444,647],{"class":639},[629,1446,647],{"class":639},[629,1448,702],{"class":720},[629,1450,1451],{"class":631,"line":1039},[629,1452,667],{"emptyLinePlaceholder":666},[629,1454,1455,1457,1460,1462,1465,1468],{"class":631,"line":1071},[629,1456,1340],{"class":952},[629,1458,1459],{"class":643}," order",[629,1461,1345],{"class":639},[629,1463,1464],{"class":635}," await",[629,1466,1467],{"class":678}," processCheckout",[629,1469,1081],{"class":720},[629,1471,1473,1475,1477,1479,1481,1483,1486,1488,1490,1492,1494,1496],{"class":631,"line":1472},10,[629,1474,1362],{"class":643},[629,1476,675],{"class":639},[629,1478,1010],{"class":678},[629,1480,681],{"class":720},[629,1482,717],{"class":639},[629,1484,1485],{"class":720}," orderId",[629,1487,724],{"class":639},[629,1489,1459],{"class":643},[629,1491,675],{"class":639},[629,1493,977],{"class":643},[629,1495,647],{"class":639},[629,1497,702],{"class":720},[629,1499,1501],{"class":631,"line":1500},11,[629,1502,667],{"emptyLinePlaceholder":666},[629,1504,1506,1509,1511,1514,1516,1520,1522,1524,1526,1528,1530,1532],{"class":631,"line":1505},12,[629,1507,1508],{"class":635},"  return",[629,1510,640],{"class":639},[629,1512,1513],{"class":720}," success",[629,1515,724],{"class":639},[629,1517,1519],{"class":1518},"sfNiH"," true",[629,1521,692],{"class":639},[629,1523,1485],{"class":720},[629,1525,724],{"class":639},[629,1527,1459],{"class":643},[629,1529,675],{"class":639},[629,1531,977],{"class":643},[629,1533,1534],{"class":639}," }\n",[629,1536,1538,1541],{"class":631,"line":1537},13,[629,1539,1540],{"class":639},"}",[629,1542,702],{"class":643},[619,1544,1546],{"className":782,"code":1545,"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,1547,1548,1557,1573,1592],{"__ignoreMap":625},[629,1549,1550,1552,1554],{"class":631,"line":632},[629,1551,793],{"class":792},[629,1553,1094],{"class":656},[629,1555,1556],{"class":643}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 234ms\n",[629,1558,1559,1561,1564,1567,1570],{"class":631,"line":663},[629,1560,1102],{"class":792},[629,1562,1563],{"class":656}," user:",[629,1565,1566],{"class":656}," id=",[629,1568,1569],{"class":1029},"1",[629,1571,1572],{"class":656}," plan=pro\n",[629,1574,1575,1577,1580,1583,1586,1589],{"class":631,"line":670},[629,1576,1102],{"class":792},[629,1578,1579],{"class":656}," cart:",[629,1581,1582],{"class":656}," items=",[629,1584,1585],{"class":1029},"3",[629,1587,1588],{"class":656}," total=",[629,1590,1591],{"class":1029},"9999\n",[629,1593,1594,1596,1599],{"class":631,"line":705},[629,1595,1123],{"class":792},[629,1597,1598],{"class":656}," orderId:",[629,1600,1601],{"class":656}," ord_abc123\n",[539,1603,1606,1608,1609,675],{"color":1604,"icon":1605},"success","i-lucide-check",[549,1607,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,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 ",[549,1631,555],{},[1627,1633,1629,1634,1636,1637],{},[549,1635,1143],{}," \u002F ",[549,1638,1164],{},[1627,1640,1629,1641],{},[549,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",[535,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",[535,1693,1694,1695,724],{},"Configure service names per route pattern in your ",[549,1696,1697],{},"nuxt.config.ts",[619,1699,1701],{"className":621,"code":1700,"filename":1697,"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,1702,1703,1717,1740,1744,1753,1762,1778,1783,1792,1820,1846,1872,1876,1881],{"__ignoreMap":625},[629,1704,1705,1707,1709,1712,1714],{"class":631,"line":632},[629,1706,1308],{"class":635},[629,1708,1311],{"class":635},[629,1710,1711],{"class":678}," defineNuxtConfig",[629,1713,681],{"class":643},[629,1715,1716],{"class":639},"{\n",[629,1718,1719,1722,1724,1727,1729,1732,1734,1737],{"class":631,"line":663},[629,1720,1721],{"class":720},"  modules",[629,1723,724],{"class":639},[629,1725,1726],{"class":643}," [",[629,1728,684],{"class":639},[629,1730,1731],{"class":656},"evlog\u002Fnuxt",[629,1733,684],{"class":639},[629,1735,1736],{"class":643},"]",[629,1738,1739],{"class":639},",\n",[629,1741,1742],{"class":631,"line":670},[629,1743,667],{"emptyLinePlaceholder":666},[629,1745,1746,1749,1751],{"class":631,"line":705},[629,1747,1748],{"class":720},"  evlog",[629,1750,724],{"class":639},[629,1752,1335],{"class":639},[629,1754,1755,1758,1760],{"class":631,"line":752},[629,1756,1757],{"class":720},"    env",[629,1759,724],{"class":639},[629,1761,1335],{"class":639},[629,1763,1764,1767,1769,1771,1774,1776],{"class":631,"line":998},[629,1765,1766],{"class":720},"      service",[629,1768,724],{"class":639},[629,1770,653],{"class":639},[629,1772,1773],{"class":656},"default-service",[629,1775,684],{"class":639},[629,1777,1739],{"class":639},[629,1779,1780],{"class":631,"line":1003},[629,1781,1782],{"class":639},"    },\n",[629,1784,1785,1788,1790],{"class":631,"line":1039},[629,1786,1787],{"class":720},"    routes",[629,1789,724],{"class":639},[629,1791,1335],{"class":639},[629,1793,1794,1797,1800,1802,1804,1806,1808,1810,1812,1815,1817],{"class":631,"line":1071},[629,1795,1796],{"class":639},"      '",[629,1798,1799],{"class":720},"\u002Fapi\u002Fauth\u002F**",[629,1801,684],{"class":639},[629,1803,724],{"class":639},[629,1805,640],{"class":639},[629,1807,928],{"class":720},[629,1809,724],{"class":639},[629,1811,653],{"class":639},[629,1813,1814],{"class":656},"auth-service",[629,1816,684],{"class":639},[629,1818,1819],{"class":639}," },\n",[629,1821,1822,1824,1827,1829,1831,1833,1835,1837,1839,1842,1844],{"class":631,"line":1472},[629,1823,1796],{"class":639},[629,1825,1826],{"class":720},"\u002Fapi\u002Fpayment\u002F**",[629,1828,684],{"class":639},[629,1830,724],{"class":639},[629,1832,640],{"class":639},[629,1834,928],{"class":720},[629,1836,724],{"class":639},[629,1838,653],{"class":639},[629,1840,1841],{"class":656},"payment-service",[629,1843,684],{"class":639},[629,1845,1819],{"class":639},[629,1847,1848,1850,1853,1855,1857,1859,1861,1863,1865,1868,1870],{"class":631,"line":1500},[629,1849,1796],{"class":639},[629,1851,1852],{"class":720},"\u002Fapi\u002Fbooking\u002F**",[629,1854,684],{"class":639},[629,1856,724],{"class":639},[629,1858,640],{"class":639},[629,1860,928],{"class":720},[629,1862,724],{"class":639},[629,1864,653],{"class":639},[629,1866,1867],{"class":656},"booking-service",[629,1869,684],{"class":639},[629,1871,1819],{"class":639},[629,1873,1874],{"class":631,"line":1505},[629,1875,1782],{"class":639},[629,1877,1878],{"class":631,"line":1537},[629,1879,1880],{"class":639},"  },\n",[629,1882,1884,1886],{"class":631,"line":1883},14,[629,1885,1540],{"class":639},[629,1887,702],{"class":643},[535,1889,1890],{},"Logs from routes matching these patterns will automatically include the configured service name:",[619,1892,1894],{"className":782,"code":1893,"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,1895,1896,1906,1916,1928],{"__ignoreMap":625},[629,1897,1898,1901,1903],{"class":631,"line":632},[629,1899,1900],{"class":792},"21:57:10.442",[629,1902,1094],{"class":656},[629,1904,1905],{"class":643}," [auth-service] POST \u002Fapi\u002Fauth\u002Flogin 200 in 1ms\n",[629,1907,1908,1910,1913],{"class":631,"line":663},[629,1909,1102],{"class":792},[629,1911,1912],{"class":656}," requestId:",[629,1914,1915],{"class":656}," 88ced16a-bef2-4483-86cb-2b4fb677ea52\n",[629,1917,1918,1920,1922,1925],{"class":631,"line":670},[629,1919,1102],{"class":792},[629,1921,1563],{"class":656},[629,1923,1924],{"class":656}," id=user_123",[629,1926,1927],{"class":656}," email=demo@example.com\n",[629,1929,1930,1932,1935],{"class":631,"line":705},[629,1931,1123],{"class":792},[629,1933,1934],{"class":656}," action:",[629,1936,1937],{"class":656}," login\n",[1688,1939,1941],{"id":1940},"explicit-service-parameter","Explicit Service Parameter",[535,1943,1944,1945,724],{},"Override the service name for specific routes using the second parameter of ",[549,1946,551],{},[619,1948,1951],{"className":621,"code":1949,"filename":1950,"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,1952,1953,1971,1975,1995,2020,2024,2051,2055,2069],{"__ignoreMap":625},[629,1954,1955,1957,1959,1961,1963,1965,1967,1969],{"class":631,"line":632},[629,1956,636],{"class":635},[629,1958,640],{"class":639},[629,1960,1289],{"class":643},[629,1962,647],{"class":639},[629,1964,650],{"class":635},[629,1966,653],{"class":639},[629,1968,657],{"class":656},[629,1970,660],{"class":639},[629,1972,1973],{"class":631,"line":663},[629,1974,667],{"emptyLinePlaceholder":666},[629,1976,1977,1979,1981,1983,1985,1987,1989,1991,1993],{"class":631,"line":670},[629,1978,1308],{"class":635},[629,1980,1311],{"class":635},[629,1982,1314],{"class":678},[629,1984,681],{"class":643},[629,1986,681],{"class":639},[629,1988,1326],{"class":1325},[629,1990,1329],{"class":639},[629,1992,1332],{"class":952},[629,1994,1335],{"class":639},[629,1996,1997,1999,2001,2003,2005,2007,2009,2011,2013,2016,2018],{"class":631,"line":705},[629,1998,1340],{"class":952},[629,2000,644],{"class":643},[629,2002,1345],{"class":639},[629,2004,1289],{"class":678},[629,2006,681],{"class":720},[629,2008,1326],{"class":643},[629,2010,692],{"class":639},[629,2012,653],{"class":639},[629,2014,2015],{"class":656},"legacy-service",[629,2017,684],{"class":639},[629,2019,702],{"class":720},[629,2021,2022],{"class":631,"line":752},[629,2023,667],{"emptyLinePlaceholder":666},[629,2025,2026,2028,2030,2032,2034,2036,2038,2040,2042,2045,2047,2049],{"class":631,"line":998},[629,2027,1362],{"class":643},[629,2029,675],{"class":639},[629,2031,1010],{"class":678},[629,2033,681],{"class":720},[629,2035,717],{"class":639},[629,2037,721],{"class":720},[629,2039,724],{"class":639},[629,2041,653],{"class":639},[629,2043,2044],{"class":656},"process_legacy_request",[629,2046,684],{"class":639},[629,2048,647],{"class":639},[629,2050,702],{"class":720},[629,2052,2053],{"class":631,"line":1003},[629,2054,667],{"emptyLinePlaceholder":666},[629,2056,2057,2059,2061,2063,2065,2067],{"class":631,"line":1039},[629,2058,1508],{"class":635},[629,2060,640],{"class":639},[629,2062,1513],{"class":720},[629,2064,724],{"class":639},[629,2066,1519],{"class":1518},[629,2068,1534],{"class":639},[629,2070,2071,2073],{"class":631,"line":1071},[629,2072,1540],{"class":639},[629,2074,702],{"class":643},[539,2076,2077,2080,2081,2083,2084,2087],{"color":541,"icon":13},[544,2078,2079],{},"Priority order:"," Explicit ",[549,2082,551],{}," parameter > Route configuration > ",[549,2085,2086],{},"env.service"," > Auto-detected from environment",[608,2089,2091],{"id":2090},"createerror-structured-errors","createError (Structured Errors)",[535,2093,1629,2094,2097],{},[549,2095,2096],{},"createError()"," to throw errors with actionable context:",[616,2099,2100,2221],{},[619,2101,2103],{"className":621,"code":2102,"filename":1278,"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,2104,2105,2124,2128,2139,2155,2167,2183,2199,2215],{"__ignoreMap":625},[629,2106,2107,2109,2111,2114,2116,2118,2120,2122],{"class":631,"line":632},[629,2108,636],{"class":635},[629,2110,640],{"class":639},[629,2112,2113],{"class":643}," createError",[629,2115,647],{"class":639},[629,2117,650],{"class":635},[629,2119,653],{"class":639},[629,2121,657],{"class":656},[629,2123,660],{"class":639},[629,2125,2126],{"class":631,"line":663},[629,2127,667],{"emptyLinePlaceholder":666},[629,2129,2130,2133,2135,2137],{"class":631,"line":670},[629,2131,2132],{"class":635},"throw",[629,2134,2113],{"class":678},[629,2136,681],{"class":643},[629,2138,1716],{"class":639},[629,2140,2141,2144,2146,2148,2151,2153],{"class":631,"line":705},[629,2142,2143],{"class":720},"  message",[629,2145,724],{"class":639},[629,2147,653],{"class":639},[629,2149,2150],{"class":656},"Payment failed",[629,2152,684],{"class":639},[629,2154,1739],{"class":639},[629,2156,2157,2160,2162,2165],{"class":631,"line":752},[629,2158,2159],{"class":720},"  status",[629,2161,724],{"class":639},[629,2163,2164],{"class":1029}," 402",[629,2166,1739],{"class":639},[629,2168,2169,2172,2174,2176,2179,2181],{"class":631,"line":998},[629,2170,2171],{"class":720},"  why",[629,2173,724],{"class":639},[629,2175,653],{"class":639},[629,2177,2178],{"class":656},"Card declined by issuer",[629,2180,684],{"class":639},[629,2182,1739],{"class":639},[629,2184,2185,2188,2190,2192,2195,2197],{"class":631,"line":1003},[629,2186,2187],{"class":720},"  fix",[629,2189,724],{"class":639},[629,2191,653],{"class":639},[629,2193,2194],{"class":656},"Try a different payment method",[629,2196,684],{"class":639},[629,2198,1739],{"class":639},[629,2200,2201,2204,2206,2208,2211,2213],{"class":631,"line":1039},[629,2202,2203],{"class":720},"  link",[629,2205,724],{"class":639},[629,2207,653],{"class":639},[629,2209,2210],{"class":656},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[629,2212,684],{"class":639},[629,2214,1739],{"class":639},[629,2216,2217,2219],{"class":631,"line":1071},[629,2218,1540],{"class":639},[629,2220,702],{"class":643},[619,2222,2227],{"className":2223,"code":2224,"filename":2225,"language":2226,"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,2228,2229,2233,2250,2270,2283,2303,2322,2340,2345],{"__ignoreMap":625},[629,2230,2231],{"class":631,"line":632},[629,2232,1716],{"class":639},[629,2234,2235,2238,2241,2244,2246,2248],{"class":631,"line":663},[629,2236,2237],{"class":639},"  \"",[629,2239,2240],{"class":952},"statusCode",[629,2242,2243],{"class":639},"\"",[629,2245,724],{"class":639},[629,2247,2164],{"class":1029},[629,2249,1739],{"class":639},[629,2251,2252,2254,2257,2259,2261,2264,2266,2268],{"class":631,"line":670},[629,2253,2237],{"class":639},[629,2255,2256],{"class":952},"message",[629,2258,2243],{"class":639},[629,2260,724],{"class":639},[629,2262,2263],{"class":639}," \"",[629,2265,2150],{"class":656},[629,2267,2243],{"class":639},[629,2269,1739],{"class":639},[629,2271,2272,2274,2277,2279,2281],{"class":631,"line":705},[629,2273,2237],{"class":639},[629,2275,2276],{"class":952},"data",[629,2278,2243],{"class":639},[629,2280,724],{"class":639},[629,2282,1335],{"class":639},[629,2284,2285,2288,2291,2293,2295,2297,2299,2301],{"class":631,"line":752},[629,2286,2287],{"class":639},"    \"",[629,2289,2290],{"class":792},"why",[629,2292,2243],{"class":639},[629,2294,724],{"class":639},[629,2296,2263],{"class":639},[629,2298,2178],{"class":656},[629,2300,2243],{"class":639},[629,2302,1739],{"class":639},[629,2304,2305,2307,2310,2312,2314,2316,2318,2320],{"class":631,"line":998},[629,2306,2287],{"class":639},[629,2308,2309],{"class":792},"fix",[629,2311,2243],{"class":639},[629,2313,724],{"class":639},[629,2315,2263],{"class":639},[629,2317,2194],{"class":656},[629,2319,2243],{"class":639},[629,2321,1739],{"class":639},[629,2323,2324,2326,2329,2331,2333,2335,2337],{"class":631,"line":1003},[629,2325,2287],{"class":639},[629,2327,2328],{"class":792},"link",[629,2330,2243],{"class":639},[629,2332,724],{"class":639},[629,2334,2263],{"class":639},[629,2336,2210],{"class":656},[629,2338,2339],{"class":639},"\"\n",[629,2341,2342],{"class":631,"line":1039},[629,2343,2344],{"class":639},"  }\n",[629,2346,2347],{"class":631,"line":1071},[629,2348,2349],{"class":639},"}\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],{},[549,2376,2256],{},[1649,2378,2379],{},"Yes",[1649,2381,2382],{},"What happened (user-facing)",[1624,2384,2385,2390,2393],{},[1649,2386,2387],{},[549,2388,2389],{},"status",[1649,2391,2392],{},"No",[1649,2394,2395],{},"HTTP status code (default: 500)",[1624,2397,2398,2402,2404],{},[1649,2399,2400],{},[549,2401,2290],{},[1649,2403,2392],{},[1649,2405,2406],{},"Technical reason (for debugging)",[1624,2408,2409,2413,2415],{},[1649,2410,2411],{},[549,2412,2309],{},[1649,2414,2392],{},[1649,2416,2417],{},"Actionable solution",[1624,2419,2420,2424,2426],{},[1649,2421,2422],{},[549,2423,2328],{},[1649,2425,2392],{},[1649,2427,2428],{},"Documentation URL for more info",[1624,2430,2431,2436,2438],{},[1649,2432,2433],{},[549,2434,2435],{},"cause",[1649,2437,2392],{},[1649,2439,2440],{},"Original error (if wrapping)",[1624,2442,2443,2448,2450],{},[1649,2444,2445],{},[549,2446,2447],{},"internal",[1649,2449,2392],{},[1649,2451,2452,2453],{},"Backend-only fields for logs and wide events — never included in HTTP JSON or ",[549,2454,2455],{},"parseError()",[1613,2457,2459],{"id":2458},"frontend-integration","Frontend Integration",[535,2461,1629,2462,2464],{},[549,2463,2455],{}," to extract all error fields on the client:",[619,2466,2469],{"className":621,"code":2467,"filename":2468,"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,2470,2471,2490,2494,2521,2528,2571,2589,2606,2610,2624,2639,2654,2669,2683,2739,2748,2756,2761,2779,2811,2817,2822],{"__ignoreMap":625},[629,2472,2473,2475,2477,2480,2482,2484,2486,2488],{"class":631,"line":632},[629,2474,636],{"class":635},[629,2476,640],{"class":639},[629,2478,2479],{"class":643}," parseError",[629,2481,647],{"class":639},[629,2483,650],{"class":635},[629,2485,653],{"class":639},[629,2487,657],{"class":656},[629,2489,660],{"class":639},[629,2491,2492],{"class":631,"line":663},[629,2493,667],{"emptyLinePlaceholder":666},[629,2495,2496,2498,2501,2504,2507,2509,2512,2514,2517,2519],{"class":631,"line":670},[629,2497,1308],{"class":635},[629,2499,2500],{"class":952}," async",[629,2502,2503],{"class":952}," function",[629,2505,2506],{"class":678}," checkout",[629,2508,681],{"class":639},[629,2510,2511],{"class":1325},"cart",[629,2513,724],{"class":639},[629,2515,2516],{"class":792}," Cart",[629,2518,1329],{"class":639},[629,2520,1335],{"class":639},[629,2522,2523,2526],{"class":631,"line":705},[629,2524,2525],{"class":635},"  try",[629,2527,1335],{"class":639},[629,2529,2530,2533,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2563,2565,2567,2569],{"class":631,"line":752},[629,2531,2532],{"class":635},"    await",[629,2534,2535],{"class":678}," $fetch",[629,2537,681],{"class":720},[629,2539,684],{"class":639},[629,2541,1241],{"class":656},[629,2543,684],{"class":639},[629,2545,692],{"class":639},[629,2547,640],{"class":639},[629,2549,1220],{"class":720},[629,2551,724],{"class":639},[629,2553,653],{"class":639},[629,2555,1227],{"class":656},[629,2557,684],{"class":639},[629,2559,692],{"class":639},[629,2561,2562],{"class":720}," body",[629,2564,724],{"class":639},[629,2566,1420],{"class":643},[629,2568,647],{"class":639},[629,2570,702],{"class":720},[629,2572,2573,2576,2579,2581,2584,2587],{"class":631,"line":998},[629,2574,2575],{"class":639},"  }",[629,2577,2578],{"class":635}," catch",[629,2580,1322],{"class":720},[629,2582,2583],{"class":643},"err",[629,2585,2586],{"class":720},") ",[629,2588,1716],{"class":639},[629,2590,2591,2594,2596,2598,2600,2602,2604],{"class":631,"line":1003},[629,2592,2593],{"class":952},"    const",[629,2595,736],{"class":643},[629,2597,1345],{"class":639},[629,2599,2479],{"class":678},[629,2601,681],{"class":720},[629,2603,2583],{"class":643},[629,2605,702],{"class":720},[629,2607,2608],{"class":631,"line":1039},[629,2609,667],{"emptyLinePlaceholder":666},[629,2611,2612,2615,2617,2620,2622],{"class":631,"line":1071},[629,2613,2614],{"class":643},"    toast",[629,2616,675],{"class":639},[629,2618,2619],{"class":678},"add",[629,2621,681],{"class":720},[629,2623,1716],{"class":639},[629,2625,2626,2629,2631,2633,2635,2637],{"class":631,"line":1472},[629,2627,2628],{"class":720},"      title",[629,2630,724],{"class":639},[629,2632,736],{"class":643},[629,2634,675],{"class":639},[629,2636,2256],{"class":643},[629,2638,1739],{"class":639},[629,2640,2641,2644,2646,2648,2650,2652],{"class":631,"line":1500},[629,2642,2643],{"class":720},"      description",[629,2645,724],{"class":639},[629,2647,736],{"class":643},[629,2649,675],{"class":639},[629,2651,2290],{"class":643},[629,2653,1739],{"class":639},[629,2655,2656,2659,2661,2663,2665,2667],{"class":631,"line":1505},[629,2657,2658],{"class":720},"      color",[629,2660,724],{"class":639},[629,2662,653],{"class":639},[629,2664,712],{"class":656},[629,2666,684],{"class":639},[629,2668,1739],{"class":639},[629,2670,2671,2674,2676,2678,2680],{"class":631,"line":1537},[629,2672,2673],{"class":720},"      actions",[629,2675,724],{"class":639},[629,2677,736],{"class":643},[629,2679,675],{"class":639},[629,2681,2682],{"class":643},"link\n",[629,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":631,"line":1883},[629,2686,2687],{"class":639},"        ?",[629,2689,1726],{"class":720},[629,2691,717],{"class":639},[629,2693,2694],{"class":720}," label",[629,2696,724],{"class":639},[629,2698,653],{"class":639},[629,2700,2701],{"class":656},"Learn more",[629,2703,684],{"class":639},[629,2705,692],{"class":639},[629,2707,2708],{"class":678}," onClick",[629,2710,724],{"class":639},[629,2712,2713],{"class":639}," ()",[629,2715,1332],{"class":952},[629,2717,2718],{"class":643}," window",[629,2720,675],{"class":639},[629,2722,2723],{"class":678},"open",[629,2725,681],{"class":720},[629,2727,712],{"class":643},[629,2729,675],{"class":639},[629,2731,2328],{"class":643},[629,2733,2586],{"class":720},[629,2735,1540],{"class":639},[629,2737,2738],{"class":720},"]\n",[629,2740,2742,2745],{"class":631,"line":2741},15,[629,2743,2744],{"class":639},"        :",[629,2746,2747],{"class":639}," undefined,\n",[629,2749,2751,2754],{"class":631,"line":2750},16,[629,2752,2753],{"class":639},"    }",[629,2755,702],{"class":720},[629,2757,2759],{"class":631,"line":2758},17,[629,2760,667],{"emptyLinePlaceholder":666},[629,2762,2764,2767,2769,2771,2773,2775,2777],{"class":631,"line":2763},18,[629,2765,2766],{"class":635},"    if",[629,2768,1322],{"class":720},[629,2770,712],{"class":643},[629,2772,675],{"class":639},[629,2774,2309],{"class":643},[629,2776,2586],{"class":720},[629,2778,1716],{"class":639},[629,2780,2782,2785,2787,2789,2791,2794,2797,2800,2802,2804,2806,2809],{"class":631,"line":2781},19,[629,2783,2784],{"class":643},"      console",[629,2786,675],{"class":639},[629,2788,541],{"class":678},[629,2790,681],{"class":720},[629,2792,2793],{"class":639},"`",[629,2795,2796],{"class":656},"Fix: ",[629,2798,2799],{"class":639},"${",[629,2801,712],{"class":643},[629,2803,675],{"class":639},[629,2805,2309],{"class":643},[629,2807,2808],{"class":639},"}`",[629,2810,702],{"class":720},[629,2812,2814],{"class":631,"line":2813},20,[629,2815,2816],{"class":639},"    }\n",[629,2818,2820],{"class":631,"line":2819},21,[629,2821,2344],{"class":639},[629,2823,2825],{"class":631,"line":2824},22,[629,2826,2349],{"class":639},[608,2828,2830],{"id":2829},"log-client-side","log (Client-Side)",[535,2832,2833,2834,2836],{},"The same ",[549,2835,555],{}," API works on the client side, outputting to the browser console:",[616,2838,2839,3067],{},[619,2840,2845],{"className":2841,"code":2842,"filename":2843,"language":2844,"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,2846,2847,2873,2887,2915,2919,2925,2957,2997,3011,3050,3054,3058],{"__ignoreMap":625},[629,2848,2849,2852,2855,2858,2861,2863,2865,2868,2870],{"class":631,"line":632},[629,2850,2851],{"class":639},"\u003C",[629,2853,2854],{"class":720},"script",[629,2856,2857],{"class":952}," setup",[629,2859,2860],{"class":952}," lang",[629,2862,810],{"class":639},[629,2864,2243],{"class":639},[629,2866,2867],{"class":656},"ts",[629,2869,2243],{"class":639},[629,2871,2872],{"class":639},">\n",[629,2874,2875,2877,2879,2882,2885],{"class":631,"line":663},[629,2876,1319],{"class":952},[629,2878,2503],{"class":952},[629,2880,2881],{"class":678}," handleCheckout",[629,2883,2884],{"class":639},"()",[629,2886,1335],{"class":639},[629,2888,2889,2891,2893,2895,2897,2899,2902,2904,2906,2908,2911,2913],{"class":631,"line":670},[629,2890,1362],{"class":643},[629,2892,675],{"class":639},[629,2894,541],{"class":678},[629,2896,681],{"class":720},[629,2898,684],{"class":639},[629,2900,2901],{"class":656},"checkout",[629,2903,684],{"class":639},[629,2905,692],{"class":639},[629,2907,653],{"class":639},[629,2909,2910],{"class":656},"User initiated checkout",[629,2912,684],{"class":639},[629,2914,702],{"class":720},[629,2916,2917],{"class":631,"line":705},[629,2918,667],{"emptyLinePlaceholder":666},[629,2920,2921,2923],{"class":631,"line":752},[629,2922,2525],{"class":635},[629,2924,1335],{"class":639},[629,2926,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955],{"class":631,"line":998},[629,2928,2532],{"class":635},[629,2930,2535],{"class":678},[629,2932,681],{"class":720},[629,2934,684],{"class":639},[629,2936,1241],{"class":656},[629,2938,684],{"class":639},[629,2940,692],{"class":639},[629,2942,640],{"class":639},[629,2944,1220],{"class":720},[629,2946,724],{"class":639},[629,2948,653],{"class":639},[629,2950,1227],{"class":656},[629,2952,684],{"class":639},[629,2954,647],{"class":639},[629,2956,702],{"class":720},[629,2958,2959,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2985,2987,2989,2991,2993,2995],{"class":631,"line":1003},[629,2960,2961],{"class":643},"    log",[629,2963,675],{"class":639},[629,2965,541],{"class":678},[629,2967,681],{"class":720},[629,2969,717],{"class":639},[629,2971,721],{"class":720},[629,2973,724],{"class":639},[629,2975,653],{"class":639},[629,2977,2901],{"class":656},[629,2979,684],{"class":639},[629,2981,692],{"class":639},[629,2983,2984],{"class":720}," status",[629,2986,724],{"class":639},[629,2988,653],{"class":639},[629,2990,1604],{"class":656},[629,2992,684],{"class":639},[629,2994,647],{"class":639},[629,2996,702],{"class":720},[629,2998,2999,3001,3003,3005,3007,3009],{"class":631,"line":1039},[629,3000,2575],{"class":639},[629,3002,2578],{"class":635},[629,3004,1322],{"class":720},[629,3006,2583],{"class":643},[629,3008,2586],{"class":720},[629,3010,1716],{"class":639},[629,3012,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3044,3046,3048],{"class":631,"line":1071},[629,3014,2961],{"class":643},[629,3016,675],{"class":639},[629,3018,712],{"class":678},[629,3020,681],{"class":720},[629,3022,717],{"class":639},[629,3024,721],{"class":720},[629,3026,724],{"class":639},[629,3028,653],{"class":639},[629,3030,2901],{"class":656},[629,3032,684],{"class":639},[629,3034,692],{"class":639},[629,3036,736],{"class":720},[629,3038,724],{"class":639},[629,3040,653],{"class":639},[629,3042,3043],{"class":656},"failed",[629,3045,684],{"class":639},[629,3047,647],{"class":639},[629,3049,702],{"class":720},[629,3051,3052],{"class":631,"line":1472},[629,3053,2344],{"class":639},[629,3055,3056],{"class":631,"line":1500},[629,3057,2349],{"class":639},[629,3059,3060,3063,3065],{"class":631,"line":1505},[629,3061,3062],{"class":639},"\u003C\u002F",[629,3064,2854],{"class":720},[629,3066,2872],{"class":639},[619,3068,3071],{"className":621,"code":3069,"filename":3070,"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,3072,3073,3086,3129,3162,3174,3202,3206,3210,3214,3224],{"__ignoreMap":625},[629,3074,3075,3077,3079,3082,3084],{"class":631,"line":632},[629,3076,1308],{"class":635},[629,3078,2503],{"class":952},[629,3080,3081],{"class":678}," useAnalytics",[629,3083,2884],{"class":639},[629,3085,1335],{"class":639},[629,3087,3088,3091,3094,3096,3098,3100,3103,3105,3108,3111,3114,3116,3119,3121,3124,3127],{"class":631,"line":663},[629,3089,3090],{"class":952},"  function",[629,3092,3093],{"class":678}," trackEvent",[629,3095,681],{"class":639},[629,3097,1326],{"class":1325},[629,3099,724],{"class":639},[629,3101,3102],{"class":792}," string",[629,3104,692],{"class":639},[629,3106,3107],{"class":1325}," data",[629,3109,3110],{"class":639},"?:",[629,3112,3113],{"class":792}," Record",[629,3115,2851],{"class":639},[629,3117,3118],{"class":792},"string",[629,3120,692],{"class":639},[629,3122,3123],{"class":792}," unknown",[629,3125,3126],{"class":639},">)",[629,3128,1335],{"class":639},[629,3130,3131,3133,3135,3137,3139,3141,3144,3146,3148,3151,3154,3156,3158,3160],{"class":631,"line":670},[629,3132,2961],{"class":643},[629,3134,675],{"class":639},[629,3136,541],{"class":678},[629,3138,681],{"class":720},[629,3140,684],{"class":639},[629,3142,3143],{"class":656},"analytics",[629,3145,684],{"class":639},[629,3147,692],{"class":639},[629,3149,3150],{"class":639}," `",[629,3152,3153],{"class":656},"Event: ",[629,3155,2799],{"class":639},[629,3157,1326],{"class":643},[629,3159,2808],{"class":639},[629,3161,702],{"class":720},[629,3163,3164,3166,3168,3170,3172],{"class":631,"line":705},[629,3165,2766],{"class":635},[629,3167,1322],{"class":720},[629,3169,2276],{"class":643},[629,3171,2586],{"class":720},[629,3173,1716],{"class":639},[629,3175,3176,3179,3181,3184,3186,3188,3191,3193,3196,3198,3200],{"class":631,"line":752},[629,3177,3178],{"class":643},"      log",[629,3180,675],{"class":639},[629,3182,3183],{"class":678},"debug",[629,3185,681],{"class":720},[629,3187,717],{"class":639},[629,3189,3190],{"class":643}," event",[629,3192,692],{"class":639},[629,3194,3195],{"class":639}," ...",[629,3197,2276],{"class":643},[629,3199,647],{"class":639},[629,3201,702],{"class":720},[629,3203,3204],{"class":631,"line":998},[629,3205,2816],{"class":639},[629,3207,3208],{"class":631,"line":1003},[629,3209,2344],{"class":639},[629,3211,3212],{"class":631,"line":1039},[629,3213,667],{"emptyLinePlaceholder":666},[629,3215,3216,3218,3220,3222],{"class":631,"line":1071},[629,3217,1508],{"class":635},[629,3219,640],{"class":639},[629,3221,3093],{"class":643},[629,3223,1534],{"class":639},[629,3225,3226],{"class":631,"line":1472},[629,3227,2349],{"class":639},[539,3229,3230,3231,3233],{"color":854,"icon":855},"See ",[597,3232,317],{"href":318}," for transport configuration, identity context, and browser drain setup.",[608,3235,3237],{"id":3236},"next-steps","Next Steps",[572,3239,3240,3251,3257,3262,3267,3272],{},[575,3241,3242,3247,3248,1329],{},[597,3243,3244],{"href":95},[549,3245,3246],{},"evlog map",": See what you just unlocked — score coverage and find entry points that are still dark (",[549,3249,3250],{},"npx @evlog\u002Fcli map",[575,3252,3253,3256],{},[597,3254,3255],{"href":37},"Logging Overview",": Understand all three logging modes",[575,3258,3259,3261],{},[597,3260,46],{"href":47},": Learn how to design effective wide events",[575,3263,3264,3266],{},[597,3265,71],{"href":72},": Add compile-time type safety to your wide events",[575,3268,3269,3271],{},[597,3270,51],{"href":52},": Master error handling with evlog",[575,3273,3274,3276],{},[597,3275,517],{"href":518},": 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":625,"searchDepth":663,"depth":663,"links":3282},[3283,3284,3285,3289,3293,3294],{"id":610,"depth":663,"text":611},{"id":862,"depth":663,"text":863},{"id":1264,"depth":663,"text":1265,"children":3286},[3287,3288],{"id":1615,"depth":670,"text":1616},{"id":1682,"depth":670,"text":1683},{"id":2090,"depth":663,"text":2091,"children":3290},[3291,3292],{"id":2352,"depth":670,"text":2353},{"id":2458,"depth":670,"text":2459},{"id":2829,"depth":663,"text":2830},{"id":3236,"depth":663,"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":39,"to":37,"color":854,"variant":3299},"subtle",{"label":51,"icon":54,"to":52,"color":854,"variant":3299},{},{"icon":28},{"title":25,"description":3295},"BG3nd-Pt9LBCj_WTgUKVw5pfM7PmyDMaU9nQH4Jy5hM",[3306,3308],{"title":20,"path":21,"stem":22,"description":3307,"icon":23,"children":-1},"Install evlog in your TypeScript project. Supports Nuxt, Next.js, SvelteKit, Hono, Express, Fastify, Elysia, NestJS, and standalone scripts.",{"title":36,"path":37,"stem":38,"description":3309,"icon":39,"children":-1},"The mental model — three logging modes, the wide event lifecycle, sampling, typed fields, and redaction. Read this section in order if you're new; pick what you need if you're not.",1786049826263]