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