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