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