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