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