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