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