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