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