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