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