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