[{"data":1,"prerenderedAt":4602},["ShallowReactive",2],{"navigation_docs":3,"-learn-wide-events":439,"-learn-wide-events-surround":4597},[4,30,80,245,353,408],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"children":249,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[250,254,259,288,316,348],{"title":36,"path":251,"stem":252,"icon":253},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":255,"path":256,"stem":257,"icon":258},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[265,268,273,278,283],{"title":36,"path":266,"stem":267,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":269,"path":270,"stem":271,"icon":272},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":274,"path":275,"stem":276,"icon":277},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":279,"path":280,"stem":281,"icon":282},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":284,"path":285,"stem":286,"icon":287},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[294,297,302,307,311],{"title":36,"path":295,"stem":296,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":298,"path":299,"stem":300,"icon":301},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":303,"path":304,"stem":305,"icon":306},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":308,"path":309,"stem":310,"icon":258},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":312,"path":313,"stem":314,"icon":315},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[322,325,330,335,340,344],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":331,"path":332,"stem":333,"icon":334},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":336,"path":337,"stem":338,"icon":339},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":341,"path":342,"stem":343,"icon":318},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":345,"path":346,"stem":347,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"children":357,"page":29},"Extend","\u002Fextend","5.extend",[358,362,367,372,377,381,385,389,393,398,403],{"title":36,"path":359,"stem":360,"icon":361},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":363,"path":364,"stem":365,"icon":366},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":368,"path":369,"stem":370,"icon":371},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":373,"path":374,"stem":375,"icon":376},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":378,"stem":379,"icon":380},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":382,"path":383,"stem":384,"icon":361},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":386,"path":387,"stem":388,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":390,"path":391,"stem":392,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":394,"path":395,"stem":396,"icon":397},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":399,"path":400,"stem":401,"icon":402},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":404,"path":405,"stem":406,"icon":407},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":409,"path":410,"stem":411,"children":412,"page":29},"Reference","\u002Freference","6.reference",[413,418,421,426,430,435],{"title":414,"path":415,"stem":416,"icon":417},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":419,"stem":420,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":422,"path":423,"stem":424,"icon":425},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":427,"path":428,"stem":429,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":431,"path":432,"stem":433,"icon":434},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":436,"path":437,"stem":438,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":440,"title":46,"body":441,"description":4587,"extension":4588,"links":4589,"meta":4593,"navigation":4594,"path":47,"seo":4595,"stem":48,"__hash__":4596},"docs\u002F2.learn\u002F2.wide-events.md",{"type":442,"value":443,"toc":4558},"minimark",[444,448,462,508,513,516,519,721,724,751,754,1253,1256,1260,1268,1275,1606,1613,1633,1842,1854,1861,1868,2064,2072,2076,2124,2143,2149,2178,2203,2210,2226,2384,2388,2401,2405,2408,2606,2616,2620,2623,2711,2715,2718,2885,2889,2892,3068,3071,3075,3171,3175,3334,3338,3345,3742,3746,3749,4093,4097,4121,4206,4227,4231,4234,4528,4532,4554],[445,446,447],"p",{},"Wide events are the core concept behind evlog. Instead of scattering logs throughout your codebase, you accumulate context over any unit of work, whether a request, script, job, or workflow, and emit a single, comprehensive log event.",[449,450,453,454,458,459,461],"callout",{"color":451,"icon":452},"neutral","i-lucide-globe","Not running an HTTP framework? See ",[455,456,457],"a",{"href":228},"Standalone TypeScript"," and ",[455,460,222],{"href":223}," — wide events apply just as cleanly outside of request lifecycles.",[463,464,467,470,495],"prompt",{":actions":465,"description":466,"icon":49},"[\"copy\",\"cursor\",\"windsurf\"]","Convert my request handlers to wide events",[445,468,469],{},"Convert my existing request handlers from scattered logs to evlog wide events.",[471,472,473,477,480,483,486,489,492],"ul",{},[474,475,476],"li",{},"Find handlers that call console.log\u002Flogger.info multiple times per request",[474,478,479],{},"Replace those with a single useLogger(event) (or framework equivalent) at the top",[474,481,482],{},"Use log.set({ user, cart, payment, ... }) to accumulate context as the request progresses",[474,484,485],{},"Group related fields into nested objects (user, cart, payment) instead of flat keys",[474,487,488],{},"Remove redundant info-level logs once the wide event captures the same information",[474,490,491],{},"Keep error logs that capture distinct failure cases via log.error()",[474,493,494],{},"Trust the framework integration to auto-emit one wide event per request",[445,496,497,498,503,504],{},"Docs: ",[455,499,500],{"href":500,"rel":501},"https:\u002F\u002Fwww.evlog.dev\u002Flearn\u002Fwide-events",[502],"nofollow","\nBest practices: ",[455,505,506],{"href":506,"rel":507},"https:\u002F\u002Fwww.evlog.dev\u002Freference\u002Fbest-practices",[502],[509,510,512],"h2",{"id":511},"why-wide-events","Why Wide Events?",[514,515],"wide-event-collapse",{},[445,517,518],{},"Traditional logging creates noise:",[520,521,527],"pre",{"className":522,"code":523,"filename":524,"language":525,"meta":526,"style":526},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","logger.info('Job started')\nlogger.info('User authenticated', { userId: user.id })\nlogger.info('Fetching data', { source: 'postgres' })\nlogger.info('Processing records')\nlogger.info('Processing complete')\nlogger.info('Job finished', { duration: 234 })\n","src\u002Fservice.ts","typescript","",[528,529,530,562,606,646,666,686],"code",{"__ignoreMap":526},[531,532,535,539,543,547,550,553,557,559],"span",{"class":533,"line":534},"line",1,[531,536,538],{"class":537},"sTEyZ","logger",[531,540,542],{"class":541},"sMK4o",".",[531,544,546],{"class":545},"s2Zo4","info",[531,548,549],{"class":537},"(",[531,551,552],{"class":541},"'",[531,554,556],{"class":555},"sfazB","Job started",[531,558,552],{"class":541},[531,560,561],{"class":537},")\n",[531,563,565,567,569,571,573,575,578,580,583,586,590,593,596,598,601,604],{"class":533,"line":564},2,[531,566,538],{"class":537},[531,568,542],{"class":541},[531,570,546],{"class":545},[531,572,549],{"class":537},[531,574,552],{"class":541},[531,576,577],{"class":555},"User authenticated",[531,579,552],{"class":541},[531,581,582],{"class":541},",",[531,584,585],{"class":541}," {",[531,587,589],{"class":588},"swJcz"," userId",[531,591,592],{"class":541},":",[531,594,595],{"class":537}," user",[531,597,542],{"class":541},[531,599,600],{"class":537},"id ",[531,602,603],{"class":541},"}",[531,605,561],{"class":537},[531,607,609,611,613,615,617,619,622,624,626,628,631,633,636,639,641,644],{"class":533,"line":608},3,[531,610,538],{"class":537},[531,612,542],{"class":541},[531,614,546],{"class":545},[531,616,549],{"class":537},[531,618,552],{"class":541},[531,620,621],{"class":555},"Fetching data",[531,623,552],{"class":541},[531,625,582],{"class":541},[531,627,585],{"class":541},[531,629,630],{"class":588}," source",[531,632,592],{"class":541},[531,634,635],{"class":541}," '",[531,637,638],{"class":555},"postgres",[531,640,552],{"class":541},[531,642,643],{"class":541}," }",[531,645,561],{"class":537},[531,647,649,651,653,655,657,659,662,664],{"class":533,"line":648},4,[531,650,538],{"class":537},[531,652,542],{"class":541},[531,654,546],{"class":545},[531,656,549],{"class":537},[531,658,552],{"class":541},[531,660,661],{"class":555},"Processing records",[531,663,552],{"class":541},[531,665,561],{"class":537},[531,667,669,671,673,675,677,679,682,684],{"class":533,"line":668},5,[531,670,538],{"class":537},[531,672,542],{"class":541},[531,674,546],{"class":545},[531,676,549],{"class":537},[531,678,552],{"class":541},[531,680,681],{"class":555},"Processing complete",[531,683,552],{"class":541},[531,685,561],{"class":537},[531,687,689,691,693,695,697,699,702,704,706,708,711,713,717,719],{"class":533,"line":688},6,[531,690,538],{"class":537},[531,692,542],{"class":541},[531,694,546],{"class":545},[531,696,549],{"class":537},[531,698,552],{"class":541},[531,700,701],{"class":555},"Job finished",[531,703,552],{"class":541},[531,705,582],{"class":541},[531,707,585],{"class":541},[531,709,710],{"class":588}," duration",[531,712,592],{"class":541},[531,714,716],{"class":715},"sbssI"," 234",[531,718,643],{"class":541},[531,720,561],{"class":537},[445,722,723],{},"This approach has problems:",[471,725,726,733,739,745],{},[474,727,728,732],{},[729,730,731],"strong",{},"Scattered context",": Information is spread across multiple log lines",[474,734,735,738],{},[729,736,737],{},"Hard to correlate",": Matching logs to operations requires IDs everywhere",[474,740,741,744],{},[729,742,743],{},"Noise",": 10+ log lines per operation makes finding issues harder",[474,746,747,750],{},[729,748,749],{},"Incomplete",": Some logs might be missing if errors occur",[445,752,753],{},"Wide events solve this:",[755,756,757,967,1138],"code-group",{},[520,758,761],{"className":522,"code":759,"filename":760,"language":525,"meta":526,"style":526},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\n\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.set({ cart: { id: 42, items: 3, total: 9999 } })\nlog.set({ payment: { method: 'card', status: 'success' } })\n","server\u002Fapi\u002Fcheckout.post.ts",[528,762,763,787,793,810,814,863,915],{"__ignoreMap":526},[531,764,765,769,771,774,776,779,781,784],{"class":533,"line":534},[531,766,768],{"class":767},"s7zQu","import",[531,770,585],{"class":541},[531,772,773],{"class":537}," useLogger",[531,775,643],{"class":541},[531,777,778],{"class":767}," from",[531,780,635],{"class":541},[531,782,783],{"class":555},"evlog",[531,785,786],{"class":541},"'\n",[531,788,789],{"class":533,"line":564},[531,790,792],{"emptyLinePlaceholder":791},true,"\n",[531,794,795,799,802,805,807],{"class":533,"line":608},[531,796,798],{"class":797},"spNyl","const",[531,800,801],{"class":537}," log ",[531,803,804],{"class":541},"=",[531,806,773],{"class":545},[531,808,809],{"class":537},"(event)\n",[531,811,812],{"class":533,"line":648},[531,813,792],{"emptyLinePlaceholder":791},[531,815,816,819,821,824,826,829,831,833,835,838,840,843,845,848,850,852,855,857,859,861],{"class":533,"line":668},[531,817,818],{"class":537},"log",[531,820,542],{"class":541},[531,822,823],{"class":545},"set",[531,825,549],{"class":537},[531,827,828],{"class":541},"{",[531,830,595],{"class":588},[531,832,592],{"class":541},[531,834,585],{"class":541},[531,836,837],{"class":588}," id",[531,839,592],{"class":541},[531,841,842],{"class":715}," 1",[531,844,582],{"class":541},[531,846,847],{"class":588}," plan",[531,849,592],{"class":541},[531,851,635],{"class":541},[531,853,854],{"class":555},"pro",[531,856,552],{"class":541},[531,858,643],{"class":541},[531,860,643],{"class":541},[531,862,561],{"class":537},[531,864,865,867,869,871,873,875,878,880,882,884,886,889,891,894,896,899,901,904,906,909,911,913],{"class":533,"line":688},[531,866,818],{"class":537},[531,868,542],{"class":541},[531,870,823],{"class":545},[531,872,549],{"class":537},[531,874,828],{"class":541},[531,876,877],{"class":588}," cart",[531,879,592],{"class":541},[531,881,585],{"class":541},[531,883,837],{"class":588},[531,885,592],{"class":541},[531,887,888],{"class":715}," 42",[531,890,582],{"class":541},[531,892,893],{"class":588}," items",[531,895,592],{"class":541},[531,897,898],{"class":715}," 3",[531,900,582],{"class":541},[531,902,903],{"class":588}," total",[531,905,592],{"class":541},[531,907,908],{"class":715}," 9999",[531,910,643],{"class":541},[531,912,643],{"class":541},[531,914,561],{"class":537},[531,916,918,920,922,924,926,928,931,933,935,938,940,942,945,947,949,952,954,956,959,961,963,965],{"class":533,"line":917},7,[531,919,818],{"class":537},[531,921,542],{"class":541},[531,923,823],{"class":545},[531,925,549],{"class":537},[531,927,828],{"class":541},[531,929,930],{"class":588}," payment",[531,932,592],{"class":541},[531,934,585],{"class":541},[531,936,937],{"class":588}," method",[531,939,592],{"class":541},[531,941,635],{"class":541},[531,943,944],{"class":555},"card",[531,946,552],{"class":541},[531,948,582],{"class":541},[531,950,951],{"class":588}," status",[531,953,592],{"class":541},[531,955,635],{"class":541},[531,957,958],{"class":555},"success",[531,960,552],{"class":541},[531,962,643],{"class":541},[531,964,643],{"class":541},[531,966,561],{"class":537},[520,968,971],{"className":522,"code":969,"filename":970,"language":525,"meta":526,"style":526},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'sync-001', queue: 'emails' })\n\nlog.set({ source: 'postgres', target: 's3' })\nlog.set({ records: { found: 1250, synced: 1250 } })\nlog.emit()\n","scripts\u002Fsync-data.ts",[528,972,973,992,996,1040,1044,1084,1126],{"__ignoreMap":526},[531,974,975,977,979,982,984,986,988,990],{"class":533,"line":534},[531,976,768],{"class":767},[531,978,585],{"class":541},[531,980,981],{"class":537}," createLogger",[531,983,643],{"class":541},[531,985,778],{"class":767},[531,987,635],{"class":541},[531,989,783],{"class":555},[531,991,786],{"class":541},[531,993,994],{"class":533,"line":564},[531,995,792],{"emptyLinePlaceholder":791},[531,997,998,1000,1002,1004,1006,1008,1010,1013,1015,1017,1020,1022,1024,1027,1029,1031,1034,1036,1038],{"class":533,"line":608},[531,999,798],{"class":797},[531,1001,801],{"class":537},[531,1003,804],{"class":541},[531,1005,981],{"class":545},[531,1007,549],{"class":537},[531,1009,828],{"class":541},[531,1011,1012],{"class":588}," jobId",[531,1014,592],{"class":541},[531,1016,635],{"class":541},[531,1018,1019],{"class":555},"sync-001",[531,1021,552],{"class":541},[531,1023,582],{"class":541},[531,1025,1026],{"class":588}," queue",[531,1028,592],{"class":541},[531,1030,635],{"class":541},[531,1032,1033],{"class":555},"emails",[531,1035,552],{"class":541},[531,1037,643],{"class":541},[531,1039,561],{"class":537},[531,1041,1042],{"class":533,"line":648},[531,1043,792],{"emptyLinePlaceholder":791},[531,1045,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1071,1073,1075,1078,1080,1082],{"class":533,"line":668},[531,1047,818],{"class":537},[531,1049,542],{"class":541},[531,1051,823],{"class":545},[531,1053,549],{"class":537},[531,1055,828],{"class":541},[531,1057,630],{"class":588},[531,1059,592],{"class":541},[531,1061,635],{"class":541},[531,1063,638],{"class":555},[531,1065,552],{"class":541},[531,1067,582],{"class":541},[531,1069,1070],{"class":588}," target",[531,1072,592],{"class":541},[531,1074,635],{"class":541},[531,1076,1077],{"class":555},"s3",[531,1079,552],{"class":541},[531,1081,643],{"class":541},[531,1083,561],{"class":537},[531,1085,1086,1088,1090,1092,1094,1096,1099,1101,1103,1106,1108,1111,1113,1116,1118,1120,1122,1124],{"class":533,"line":688},[531,1087,818],{"class":537},[531,1089,542],{"class":541},[531,1091,823],{"class":545},[531,1093,549],{"class":537},[531,1095,828],{"class":541},[531,1097,1098],{"class":588}," records",[531,1100,592],{"class":541},[531,1102,585],{"class":541},[531,1104,1105],{"class":588}," found",[531,1107,592],{"class":541},[531,1109,1110],{"class":715}," 1250",[531,1112,582],{"class":541},[531,1114,1115],{"class":588}," synced",[531,1117,592],{"class":541},[531,1119,1110],{"class":715},[531,1121,643],{"class":541},[531,1123,643],{"class":541},[531,1125,561],{"class":537},[531,1127,1128,1130,1132,1135],{"class":533,"line":917},[531,1129,818],{"class":537},[531,1131,542],{"class":541},[531,1133,1134],{"class":545},"emit",[531,1136,1137],{"class":537},"()\n",[520,1139,1144],{"className":1140,"code":1141,"filename":1142,"language":1143,"meta":526,"style":526},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[INFO] POST \u002Fapi\u002Fcheckout (234ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { id: 42, items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n  status: 200\n","Output","bash",[528,1145,1146,1166,1191,1216,1245],{"__ignoreMap":526},[531,1147,1148,1151,1154,1157,1160,1164],{"class":533,"line":534},[531,1149,1150],{"class":541},"[",[531,1152,1153],{"class":537},"INFO",[531,1155,1156],{"class":541},"]",[531,1158,1159],{"class":537}," POST \u002Fapi\u002Fcheckout (",[531,1161,1163],{"class":1162},"sBMFI","234ms",[531,1165,561],{"class":537},[531,1167,1168,1171,1173,1176,1179,1182,1184,1186,1188],{"class":533,"line":564},[531,1169,1170],{"class":1162},"  user:",[531,1172,585],{"class":555},[531,1174,1175],{"class":555}," id:",[531,1177,1178],{"class":555}," 1,",[531,1180,1181],{"class":555}," plan:",[531,1183,635],{"class":541},[531,1185,854],{"class":555},[531,1187,552],{"class":541},[531,1189,1190],{"class":555}," }\n",[531,1192,1193,1196,1198,1200,1203,1206,1209,1212,1214],{"class":533,"line":608},[531,1194,1195],{"class":1162},"  cart:",[531,1197,585],{"class":555},[531,1199,1175],{"class":555},[531,1201,1202],{"class":555}," 42,",[531,1204,1205],{"class":555}," items:",[531,1207,1208],{"class":555}," 3,",[531,1210,1211],{"class":555}," total:",[531,1213,908],{"class":715},[531,1215,1190],{"class":555},[531,1217,1218,1221,1223,1226,1228,1230,1232,1234,1237,1239,1241,1243],{"class":533,"line":648},[531,1219,1220],{"class":1162},"  payment:",[531,1222,585],{"class":555},[531,1224,1225],{"class":555}," method:",[531,1227,635],{"class":541},[531,1229,944],{"class":555},[531,1231,552],{"class":541},[531,1233,582],{"class":555},[531,1235,1236],{"class":555}," status:",[531,1238,635],{"class":541},[531,1240,958],{"class":555},[531,1242,552],{"class":541},[531,1244,1190],{"class":555},[531,1246,1247,1250],{"class":533,"line":668},[531,1248,1249],{"class":1162},"  status:",[531,1251,1252],{"class":715}," 200\n",[445,1254,1255],{},"One log, all context. Everything you need to understand what happened.",[509,1257,1259],{"id":1258},"creating-wide-events","Creating Wide Events",[1261,1262,1264,1267],"h3",{"id":1263},"createlogger-general-purpose",[528,1265,1266],{},"createLogger"," (General Purpose)",[445,1269,1270,1271,1274],{},"Use ",[528,1272,1273],{},"createLogger()"," for scripts, background jobs, queue workers, cron jobs, or any operation where you manage the lifecycle:",[520,1276,1279],{"className":522,"code":1277,"filename":1278,"language":525,"meta":526,"style":526},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({ env: { service: 'migrate' } })\n\nconst log = createLogger({ task: 'user-migration' })\n\nconst users = await db.query('SELECT * FROM legacy_users')\nlog.set({ found: users.length })\n\nlet migrated = 0\nfor (const user of users) {\n  await newDb.upsert({ id: user.id, email: user.email, plan: user.plan })\n  migrated++\n}\n\nlog.set({ migrated, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate-users.ts",[528,1280,1281,1304,1308,1342,1346,1376,1380,1411,1440,1445,1459,1482,1542,1551,1557,1562,1595],{"__ignoreMap":526},[531,1282,1283,1285,1287,1290,1292,1294,1296,1298,1300,1302],{"class":533,"line":534},[531,1284,768],{"class":767},[531,1286,585],{"class":541},[531,1288,1289],{"class":537}," initLogger",[531,1291,582],{"class":541},[531,1293,981],{"class":537},[531,1295,643],{"class":541},[531,1297,778],{"class":767},[531,1299,635],{"class":541},[531,1301,783],{"class":555},[531,1303,786],{"class":541},[531,1305,1306],{"class":533,"line":564},[531,1307,792],{"emptyLinePlaceholder":791},[531,1309,1310,1313,1315,1317,1320,1322,1324,1327,1329,1331,1334,1336,1338,1340],{"class":533,"line":608},[531,1311,1312],{"class":545},"initLogger",[531,1314,549],{"class":537},[531,1316,828],{"class":541},[531,1318,1319],{"class":588}," env",[531,1321,592],{"class":541},[531,1323,585],{"class":541},[531,1325,1326],{"class":588}," service",[531,1328,592],{"class":541},[531,1330,635],{"class":541},[531,1332,1333],{"class":555},"migrate",[531,1335,552],{"class":541},[531,1337,643],{"class":541},[531,1339,643],{"class":541},[531,1341,561],{"class":537},[531,1343,1344],{"class":533,"line":648},[531,1345,792],{"emptyLinePlaceholder":791},[531,1347,1348,1350,1352,1354,1356,1358,1360,1363,1365,1367,1370,1372,1374],{"class":533,"line":668},[531,1349,798],{"class":797},[531,1351,801],{"class":537},[531,1353,804],{"class":541},[531,1355,981],{"class":545},[531,1357,549],{"class":537},[531,1359,828],{"class":541},[531,1361,1362],{"class":588}," task",[531,1364,592],{"class":541},[531,1366,635],{"class":541},[531,1368,1369],{"class":555},"user-migration",[531,1371,552],{"class":541},[531,1373,643],{"class":541},[531,1375,561],{"class":537},[531,1377,1378],{"class":533,"line":688},[531,1379,792],{"emptyLinePlaceholder":791},[531,1381,1382,1384,1387,1389,1392,1395,1397,1400,1402,1404,1407,1409],{"class":533,"line":917},[531,1383,798],{"class":797},[531,1385,1386],{"class":537}," users ",[531,1388,804],{"class":541},[531,1390,1391],{"class":767}," await",[531,1393,1394],{"class":537}," db",[531,1396,542],{"class":541},[531,1398,1399],{"class":545},"query",[531,1401,549],{"class":537},[531,1403,552],{"class":541},[531,1405,1406],{"class":555},"SELECT * FROM legacy_users",[531,1408,552],{"class":541},[531,1410,561],{"class":537},[531,1412,1414,1416,1418,1420,1422,1424,1426,1428,1431,1433,1436,1438],{"class":533,"line":1413},8,[531,1415,818],{"class":537},[531,1417,542],{"class":541},[531,1419,823],{"class":545},[531,1421,549],{"class":537},[531,1423,828],{"class":541},[531,1425,1105],{"class":588},[531,1427,592],{"class":541},[531,1429,1430],{"class":537}," users",[531,1432,542],{"class":541},[531,1434,1435],{"class":537},"length ",[531,1437,603],{"class":541},[531,1439,561],{"class":537},[531,1441,1443],{"class":533,"line":1442},9,[531,1444,792],{"emptyLinePlaceholder":791},[531,1446,1448,1451,1454,1456],{"class":533,"line":1447},10,[531,1449,1450],{"class":797},"let",[531,1452,1453],{"class":537}," migrated ",[531,1455,804],{"class":541},[531,1457,1458],{"class":715}," 0\n",[531,1460,1462,1465,1468,1470,1473,1476,1479],{"class":533,"line":1461},11,[531,1463,1464],{"class":767},"for",[531,1466,1467],{"class":537}," (",[531,1469,798],{"class":797},[531,1471,1472],{"class":537}," user ",[531,1474,1475],{"class":541},"of",[531,1477,1478],{"class":537}," users) ",[531,1480,1481],{"class":541},"{\n",[531,1483,1485,1488,1491,1493,1496,1498,1500,1502,1504,1506,1508,1511,1513,1516,1518,1520,1522,1525,1527,1529,1531,1533,1535,1538,1540],{"class":533,"line":1484},12,[531,1486,1487],{"class":767},"  await",[531,1489,1490],{"class":537}," newDb",[531,1492,542],{"class":541},[531,1494,1495],{"class":545},"upsert",[531,1497,549],{"class":588},[531,1499,828],{"class":541},[531,1501,837],{"class":588},[531,1503,592],{"class":541},[531,1505,595],{"class":537},[531,1507,542],{"class":541},[531,1509,1510],{"class":537},"id",[531,1512,582],{"class":541},[531,1514,1515],{"class":588}," email",[531,1517,592],{"class":541},[531,1519,595],{"class":537},[531,1521,542],{"class":541},[531,1523,1524],{"class":537},"email",[531,1526,582],{"class":541},[531,1528,847],{"class":588},[531,1530,592],{"class":541},[531,1532,595],{"class":537},[531,1534,542],{"class":541},[531,1536,1537],{"class":537},"plan",[531,1539,643],{"class":541},[531,1541,561],{"class":588},[531,1543,1545,1548],{"class":533,"line":1544},13,[531,1546,1547],{"class":537},"  migrated",[531,1549,1550],{"class":541},"++\n",[531,1552,1554],{"class":533,"line":1553},14,[531,1555,1556],{"class":541},"}\n",[531,1558,1560],{"class":533,"line":1559},15,[531,1561,792],{"emptyLinePlaceholder":791},[531,1563,1565,1567,1569,1571,1573,1575,1578,1580,1582,1584,1586,1589,1591,1593],{"class":533,"line":1564},16,[531,1566,818],{"class":537},[531,1568,542],{"class":541},[531,1570,823],{"class":545},[531,1572,549],{"class":537},[531,1574,828],{"class":541},[531,1576,1577],{"class":537}," migrated",[531,1579,582],{"class":541},[531,1581,951],{"class":588},[531,1583,592],{"class":541},[531,1585,635],{"class":541},[531,1587,1588],{"class":555},"complete",[531,1590,552],{"class":541},[531,1592,643],{"class":541},[531,1594,561],{"class":537},[531,1596,1598,1600,1602,1604],{"class":533,"line":1597},17,[531,1599,818],{"class":537},[531,1601,542],{"class":541},[531,1603,1134],{"class":545},[531,1605,1137],{"class":537},[1261,1607,1609,1612],{"id":1608},"createrequestlogger-http-contexts",[528,1610,1611],{},"createRequestLogger"," (HTTP Contexts)",[445,1614,1270,1615,1618,1619,1621,1622,1625,1626,1629,1630,592],{},[528,1616,1617],{},"createRequestLogger()"," when working with HTTP requests outside of a framework integration. It's a thin wrapper around ",[528,1620,1266],{}," that pre-populates ",[528,1623,1624],{},"method",", ",[528,1627,1628],{},"path",", and ",[528,1631,1632],{},"requestId",[520,1634,1637],{"className":522,"code":1635,"filename":1636,"language":525,"meta":526,"style":526},"import { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({ env: { service: 'my-worker' } })\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\n\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.set({ cart: { items: 3, total: 9999 } })\n\nlog.emit()\n","src\u002Fworker.ts",[528,1638,1639,1662,1666,1697,1701,1744,1748,1790,1828,1832],{"__ignoreMap":526},[531,1640,1641,1643,1645,1647,1649,1652,1654,1656,1658,1660],{"class":533,"line":534},[531,1642,768],{"class":767},[531,1644,585],{"class":541},[531,1646,1289],{"class":537},[531,1648,582],{"class":541},[531,1650,1651],{"class":537}," createRequestLogger",[531,1653,643],{"class":541},[531,1655,778],{"class":767},[531,1657,635],{"class":541},[531,1659,783],{"class":555},[531,1661,786],{"class":541},[531,1663,1664],{"class":533,"line":564},[531,1665,792],{"emptyLinePlaceholder":791},[531,1667,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1689,1691,1693,1695],{"class":533,"line":608},[531,1669,1312],{"class":545},[531,1671,549],{"class":537},[531,1673,828],{"class":541},[531,1675,1319],{"class":588},[531,1677,592],{"class":541},[531,1679,585],{"class":541},[531,1681,1326],{"class":588},[531,1683,592],{"class":541},[531,1685,635],{"class":541},[531,1687,1688],{"class":555},"my-worker",[531,1690,552],{"class":541},[531,1692,643],{"class":541},[531,1694,643],{"class":541},[531,1696,561],{"class":537},[531,1698,1699],{"class":533,"line":648},[531,1700,792],{"emptyLinePlaceholder":791},[531,1702,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1724,1726,1728,1731,1733,1735,1738,1740,1742],{"class":533,"line":668},[531,1704,798],{"class":797},[531,1706,801],{"class":537},[531,1708,804],{"class":541},[531,1710,1651],{"class":545},[531,1712,549],{"class":537},[531,1714,828],{"class":541},[531,1716,937],{"class":588},[531,1718,592],{"class":541},[531,1720,635],{"class":541},[531,1722,1723],{"class":555},"POST",[531,1725,552],{"class":541},[531,1727,582],{"class":541},[531,1729,1730],{"class":588}," path",[531,1732,592],{"class":541},[531,1734,635],{"class":541},[531,1736,1737],{"class":555},"\u002Fapi\u002Fcheckout",[531,1739,552],{"class":541},[531,1741,643],{"class":541},[531,1743,561],{"class":537},[531,1745,1746],{"class":533,"line":688},[531,1747,792],{"emptyLinePlaceholder":791},[531,1749,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788],{"class":533,"line":917},[531,1751,818],{"class":537},[531,1753,542],{"class":541},[531,1755,823],{"class":545},[531,1757,549],{"class":537},[531,1759,828],{"class":541},[531,1761,595],{"class":588},[531,1763,592],{"class":541},[531,1765,585],{"class":541},[531,1767,837],{"class":588},[531,1769,592],{"class":541},[531,1771,842],{"class":715},[531,1773,582],{"class":541},[531,1775,847],{"class":588},[531,1777,592],{"class":541},[531,1779,635],{"class":541},[531,1781,854],{"class":555},[531,1783,552],{"class":541},[531,1785,643],{"class":541},[531,1787,643],{"class":541},[531,1789,561],{"class":537},[531,1791,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826],{"class":533,"line":1413},[531,1793,818],{"class":537},[531,1795,542],{"class":541},[531,1797,823],{"class":545},[531,1799,549],{"class":537},[531,1801,828],{"class":541},[531,1803,877],{"class":588},[531,1805,592],{"class":541},[531,1807,585],{"class":541},[531,1809,893],{"class":588},[531,1811,592],{"class":541},[531,1813,898],{"class":715},[531,1815,582],{"class":541},[531,1817,903],{"class":588},[531,1819,592],{"class":541},[531,1821,908],{"class":715},[531,1823,643],{"class":541},[531,1825,643],{"class":541},[531,1827,561],{"class":537},[531,1829,1830],{"class":533,"line":1442},[531,1831,792],{"emptyLinePlaceholder":791},[531,1833,1834,1836,1838,1840],{"class":533,"line":1447},[531,1835,818],{"class":537},[531,1837,542],{"class":541},[531,1839,1134],{"class":545},[531,1841,1137],{"class":537},[449,1843,1844,1845,458,1847,1849,1850,1853],{"color":546,"icon":13},"Both ",[528,1846,1266],{},[528,1848,1611],{}," require a manual ",[528,1851,1852],{},"log.emit()"," call. The event won't be emitted until you call it.",[1261,1855,1857,1860],{"id":1856},"uselogger-retrieving-the-request-logger",[528,1858,1859],{},"useLogger"," (Retrieving the Request Logger)",[445,1862,1863,1864,1867],{},"When using a framework integration (Nuxt, Hono, Express, etc.), the middleware creates a wide event logger automatically on each request. ",[528,1865,1866],{},"useLogger(event)"," retrieves that logger from the request context:",[520,1869,1871],{"className":522,"code":1870,"filename":760,"language":525,"meta":526,"style":526},"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  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n",[528,1872,1873,1891,1895,1926,1945,1949,1992,2030,2034,2052,2058],{"__ignoreMap":526},[531,1874,1875,1877,1879,1881,1883,1885,1887,1889],{"class":533,"line":534},[531,1876,768],{"class":767},[531,1878,585],{"class":541},[531,1880,773],{"class":537},[531,1882,643],{"class":541},[531,1884,778],{"class":767},[531,1886,635],{"class":541},[531,1888,783],{"class":555},[531,1890,786],{"class":541},[531,1892,1893],{"class":533,"line":564},[531,1894,792],{"emptyLinePlaceholder":791},[531,1896,1897,1900,1903,1906,1908,1911,1913,1917,1920,1923],{"class":533,"line":608},[531,1898,1899],{"class":767},"export",[531,1901,1902],{"class":767}," default",[531,1904,1905],{"class":545}," defineEventHandler",[531,1907,549],{"class":537},[531,1909,1910],{"class":797},"async",[531,1912,1467],{"class":541},[531,1914,1916],{"class":1915},"sHdIc","event",[531,1918,1919],{"class":541},")",[531,1921,1922],{"class":797}," =>",[531,1924,1925],{"class":541}," {\n",[531,1927,1928,1931,1934,1937,1939,1941,1943],{"class":533,"line":648},[531,1929,1930],{"class":797},"  const",[531,1932,1933],{"class":537}," log",[531,1935,1936],{"class":541}," =",[531,1938,773],{"class":545},[531,1940,549],{"class":588},[531,1942,1916],{"class":537},[531,1944,561],{"class":588},[531,1946,1947],{"class":533,"line":668},[531,1948,792],{"emptyLinePlaceholder":791},[531,1950,1951,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990],{"class":533,"line":688},[531,1952,1953],{"class":537},"  log",[531,1955,542],{"class":541},[531,1957,823],{"class":545},[531,1959,549],{"class":588},[531,1961,828],{"class":541},[531,1963,595],{"class":588},[531,1965,592],{"class":541},[531,1967,585],{"class":541},[531,1969,837],{"class":588},[531,1971,592],{"class":541},[531,1973,842],{"class":715},[531,1975,582],{"class":541},[531,1977,847],{"class":588},[531,1979,592],{"class":541},[531,1981,635],{"class":541},[531,1983,854],{"class":555},[531,1985,552],{"class":541},[531,1987,643],{"class":541},[531,1989,643],{"class":541},[531,1991,561],{"class":588},[531,1993,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028],{"class":533,"line":917},[531,1995,1953],{"class":537},[531,1997,542],{"class":541},[531,1999,823],{"class":545},[531,2001,549],{"class":588},[531,2003,828],{"class":541},[531,2005,877],{"class":588},[531,2007,592],{"class":541},[531,2009,585],{"class":541},[531,2011,893],{"class":588},[531,2013,592],{"class":541},[531,2015,898],{"class":715},[531,2017,582],{"class":541},[531,2019,903],{"class":588},[531,2021,592],{"class":541},[531,2023,908],{"class":715},[531,2025,643],{"class":541},[531,2027,643],{"class":541},[531,2029,561],{"class":588},[531,2031,2032],{"class":533,"line":1413},[531,2033,792],{"emptyLinePlaceholder":791},[531,2035,2036,2039,2041,2044,2046,2050],{"class":533,"line":1442},[531,2037,2038],{"class":767},"  return",[531,2040,585],{"class":541},[531,2042,2043],{"class":588}," success",[531,2045,592],{"class":541},[531,2047,2049],{"class":2048},"sfNiH"," true",[531,2051,1190],{"class":541},[531,2053,2054],{"class":533,"line":1447},[531,2055,2057],{"class":2056},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[531,2059,2060,2062],{"class":533,"line":1461},[531,2061,603],{"class":541},[531,2063,561],{"class":537},[449,2065,2066,2068,2069,2071],{"color":546,"icon":13},[528,2067,1859],{}," doesn't create a logger, it retrieves the one the framework middleware already attached to the event. The middleware handles creation and emission automatically. In Nuxt, ",[528,2070,1859],{}," is auto-imported.",[509,2073,2075],{"id":2074},"after-emit-sealing-and-background-work","After emit: sealing and background work",[445,2077,2078,2079,2082,2083,2085,2086,2089,2090,1625,2092,1625,2095,1629,2097,2100,2101,2104,2105,2111,2112,2115,2116,2119,2120,2123],{},"When the wide event is ",[729,2080,2081],{},"emitted"," (automatically at the end of the request, or when you call ",[528,2084,1852],{}," yourself), that logger instance is ",[729,2087,2088],{},"sealed",". Further ",[528,2091,823],{},[528,2093,2094],{},"error",[528,2096,546],{},[528,2098,2099],{},"warn"," calls do ",[729,2102,2103],{},"not"," update the event that was already sent to your drains. They are ignored and evlog prints a ",[729,2106,2107,2110],{},[528,2108,2109],{},"[evlog]"," warning"," to the console with the keys that were dropped. This also applies when ",[729,2113,2114],{},"head sampling"," discards the event (",[528,2117,2118],{},"emit()"," returned ",[528,2121,2122],{},"null","): the logger is still sealed for that unit of work.",[445,2125,2126,2127,2130,2131,2134,2135,2138,2139,2142],{},"This matters for ",[729,2128,2129],{},"async work that outlives the handler"," (fire-and-forget promises, ",[528,2132,2133],{},"setTimeout",", tasks started but not awaited). On many runtimes, ",[528,2136,2137],{},"AsyncLocalStorage"," keeps returning the same request logger, so ",[528,2140,2141],{},"useLogger()"," still succeeds even though the HTTP response — and the wide event — are already finished. Without warnings, that looks like silent data loss.",[1261,2144,2146],{"id":2145},"logforklabel-fn",[528,2147,2148],{},"log.fork(label, fn)",[445,2150,2151,2152,2155,2156,2160,2161,2164,2165,1625,2168,2170,2171,2174,2175,2177],{},"For intentional background work that should produce ",[729,2153,2154],{},"its own"," wide event, use ",[729,2157,2158],{},[528,2159,2148],{}," when your integration provides it (Express, Fastify, NestJS, SvelteKit, React Router, Next.js ",[528,2162,2163],{},"withEvlog",", Elysia). Inside ",[528,2166,2167],{},"fn",[528,2169,2141],{}," resolves to a ",[729,2172,2173],{},"child"," logger. When ",[528,2176,2167],{}," completes (or throws), the child emits an event with:",[471,2179,2180,2192],{},[474,2181,2182,2187,2188,2191],{},[729,2183,2184],{},[528,2185,2186],{},"operation",": the ",[528,2189,2190],{},"label"," you passed",[474,2193,2194,2199,2200,2202],{},[729,2195,2196],{},[528,2197,2198],{},"_parentRequestId",": the parent request’s ",[528,2201,1632],{}," (for correlation in queries and dashboards)",[445,2204,2205,2206,2209],{},"The parent wide event may be emitted ",[729,2207,2208],{},"before"," the child event; they are two separate events ordered by time.",[445,2211,2212,2215,2216,2218,2219,2222,2223,2225],{},[729,2213,2214],{},"Not available yet:"," Hono (no ",[528,2217,1859],{}," without ",[528,2220,2221],{},"c.get('log')"," + ALS) and Nitro\u002FNuxt ",[528,2224,1866],{}," — use the post-emit warnings to catch mistakes; a different API may arrive later for event-scoped forks.",[520,2227,2230],{"className":522,"code":2228,"filename":2229,"language":525,"meta":526,"style":526},"import { evlog, useLogger } from 'evlog\u002Fexpress'\n\n\u002F\u002F Inside a route after evlog middleware:\nconst log = req.log\nlog.set({ order_dispatched: true })\n\nlog.fork?.('process_order', async () => {\n  const child = useLogger()\n  child.set({ inventory_checked: true })\n})\n","server\u002Froutes\u002Fcheckout.post.ts",[528,2231,2232,2256,2260,2265,2281,2304,2308,2341,2354,2378],{"__ignoreMap":526},[531,2233,2234,2236,2238,2241,2243,2245,2247,2249,2251,2254],{"class":533,"line":534},[531,2235,768],{"class":767},[531,2237,585],{"class":541},[531,2239,2240],{"class":537}," evlog",[531,2242,582],{"class":541},[531,2244,773],{"class":537},[531,2246,643],{"class":541},[531,2248,778],{"class":767},[531,2250,635],{"class":541},[531,2252,2253],{"class":555},"evlog\u002Fexpress",[531,2255,786],{"class":541},[531,2257,2258],{"class":533,"line":564},[531,2259,792],{"emptyLinePlaceholder":791},[531,2261,2262],{"class":533,"line":608},[531,2263,2264],{"class":2056},"\u002F\u002F Inside a route after evlog middleware:\n",[531,2266,2267,2269,2271,2273,2276,2278],{"class":533,"line":648},[531,2268,798],{"class":797},[531,2270,801],{"class":537},[531,2272,804],{"class":541},[531,2274,2275],{"class":537}," req",[531,2277,542],{"class":541},[531,2279,2280],{"class":537},"log\n",[531,2282,2283,2285,2287,2289,2291,2293,2296,2298,2300,2302],{"class":533,"line":668},[531,2284,818],{"class":537},[531,2286,542],{"class":541},[531,2288,823],{"class":545},[531,2290,549],{"class":537},[531,2292,828],{"class":541},[531,2294,2295],{"class":588}," order_dispatched",[531,2297,592],{"class":541},[531,2299,2049],{"class":2048},[531,2301,643],{"class":541},[531,2303,561],{"class":537},[531,2305,2306],{"class":533,"line":688},[531,2307,792],{"emptyLinePlaceholder":791},[531,2309,2310,2312,2314,2317,2320,2322,2324,2327,2329,2331,2334,2337,2339],{"class":533,"line":917},[531,2311,818],{"class":537},[531,2313,542],{"class":541},[531,2315,2316],{"class":545},"fork",[531,2318,2319],{"class":541},"?.",[531,2321,549],{"class":537},[531,2323,552],{"class":541},[531,2325,2326],{"class":555},"process_order",[531,2328,552],{"class":541},[531,2330,582],{"class":541},[531,2332,2333],{"class":797}," async",[531,2335,2336],{"class":541}," ()",[531,2338,1922],{"class":797},[531,2340,1925],{"class":541},[531,2342,2343,2345,2348,2350,2352],{"class":533,"line":1413},[531,2344,1930],{"class":797},[531,2346,2347],{"class":537}," child",[531,2349,1936],{"class":541},[531,2351,773],{"class":545},[531,2353,1137],{"class":588},[531,2355,2356,2359,2361,2363,2365,2367,2370,2372,2374,2376],{"class":533,"line":1442},[531,2357,2358],{"class":537},"  child",[531,2360,542],{"class":541},[531,2362,823],{"class":545},[531,2364,549],{"class":588},[531,2366,828],{"class":541},[531,2368,2369],{"class":588}," inventory_checked",[531,2371,592],{"class":541},[531,2373,2049],{"class":2048},[531,2375,643],{"class":541},[531,2377,561],{"class":588},[531,2379,2380,2382],{"class":533,"line":1447},[531,2381,603],{"class":541},[531,2383,561],{"class":537},[509,2385,2387],{"id":2386},"anatomy-of-a-wide-event","Anatomy of a Wide Event",[445,2389,2390,2391,2393,2394,1625,2396,2398,2399,542],{},"A well-designed wide event contains context from multiple layers. The examples below show what to add inside your handler or script. They assume ",[528,2392,818],{}," is already created via ",[528,2395,1266],{},[528,2397,1611],{},", or ",[528,2400,1859],{},[1261,2402,2404],{"id":2403},"operation-context","Operation Context",[445,2406,2407],{},"Basic information about the operation:",[755,2409,2410,2514],{},[520,2411,2413],{"className":522,"code":2412,"filename":760,"language":525,"meta":526,"style":526},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\nlog.set({\n  method: 'POST',\n  path: '\u002Fapi\u002Fcheckout',\n  requestId: 'abc-123-def',\n})\n",[528,2414,2415,2433,2437,2449,2461,2477,2492,2508],{"__ignoreMap":526},[531,2416,2417,2419,2421,2423,2425,2427,2429,2431],{"class":533,"line":534},[531,2418,768],{"class":767},[531,2420,585],{"class":541},[531,2422,773],{"class":537},[531,2424,643],{"class":541},[531,2426,778],{"class":767},[531,2428,635],{"class":541},[531,2430,783],{"class":555},[531,2432,786],{"class":541},[531,2434,2435],{"class":533,"line":564},[531,2436,792],{"emptyLinePlaceholder":791},[531,2438,2439,2441,2443,2445,2447],{"class":533,"line":608},[531,2440,798],{"class":797},[531,2442,801],{"class":537},[531,2444,804],{"class":541},[531,2446,773],{"class":545},[531,2448,809],{"class":537},[531,2450,2451,2453,2455,2457,2459],{"class":533,"line":648},[531,2452,818],{"class":537},[531,2454,542],{"class":541},[531,2456,823],{"class":545},[531,2458,549],{"class":537},[531,2460,1481],{"class":541},[531,2462,2463,2466,2468,2470,2472,2474],{"class":533,"line":668},[531,2464,2465],{"class":588},"  method",[531,2467,592],{"class":541},[531,2469,635],{"class":541},[531,2471,1723],{"class":555},[531,2473,552],{"class":541},[531,2475,2476],{"class":541},",\n",[531,2478,2479,2482,2484,2486,2488,2490],{"class":533,"line":688},[531,2480,2481],{"class":588},"  path",[531,2483,592],{"class":541},[531,2485,635],{"class":541},[531,2487,1737],{"class":555},[531,2489,552],{"class":541},[531,2491,2476],{"class":541},[531,2493,2494,2497,2499,2501,2504,2506],{"class":533,"line":917},[531,2495,2496],{"class":588},"  requestId",[531,2498,592],{"class":541},[531,2500,635],{"class":541},[531,2502,2503],{"class":555},"abc-123-def",[531,2505,552],{"class":541},[531,2507,2476],{"class":541},[531,2509,2510,2512],{"class":533,"line":1413},[531,2511,603],{"class":541},[531,2513,561],{"class":537},[520,2515,2517],{"className":522,"code":2516,"filename":970,"language":525,"meta":526,"style":526},"import { createLogger } from 'evlog'\n\nconst log = createLogger({\n  jobId: 'sync-001',\n  queue: 'emails',\n  source: 'postgres',\n})\n",[528,2518,2519,2537,2541,2555,2570,2585,2600],{"__ignoreMap":526},[531,2520,2521,2523,2525,2527,2529,2531,2533,2535],{"class":533,"line":534},[531,2522,768],{"class":767},[531,2524,585],{"class":541},[531,2526,981],{"class":537},[531,2528,643],{"class":541},[531,2530,778],{"class":767},[531,2532,635],{"class":541},[531,2534,783],{"class":555},[531,2536,786],{"class":541},[531,2538,2539],{"class":533,"line":564},[531,2540,792],{"emptyLinePlaceholder":791},[531,2542,2543,2545,2547,2549,2551,2553],{"class":533,"line":608},[531,2544,798],{"class":797},[531,2546,801],{"class":537},[531,2548,804],{"class":541},[531,2550,981],{"class":545},[531,2552,549],{"class":537},[531,2554,1481],{"class":541},[531,2556,2557,2560,2562,2564,2566,2568],{"class":533,"line":648},[531,2558,2559],{"class":588},"  jobId",[531,2561,592],{"class":541},[531,2563,635],{"class":541},[531,2565,1019],{"class":555},[531,2567,552],{"class":541},[531,2569,2476],{"class":541},[531,2571,2572,2575,2577,2579,2581,2583],{"class":533,"line":668},[531,2573,2574],{"class":588},"  queue",[531,2576,592],{"class":541},[531,2578,635],{"class":541},[531,2580,1033],{"class":555},[531,2582,552],{"class":541},[531,2584,2476],{"class":541},[531,2586,2587,2590,2592,2594,2596,2598],{"class":533,"line":688},[531,2588,2589],{"class":588},"  source",[531,2591,592],{"class":541},[531,2593,635],{"class":541},[531,2595,638],{"class":555},[531,2597,552],{"class":541},[531,2599,2476],{"class":541},[531,2601,2602,2604],{"class":533,"line":917},[531,2603,603],{"class":541},[531,2605,561],{"class":537},[449,2607,2608,2609,1625,2611,1625,2613,2615],{"color":546,"icon":13},"In framework integrations, request context (",[528,2610,1624],{},[528,2612,1628],{},[528,2614,1632],{},") is auto-populated by the middleware. You don't need to set these fields manually.",[1261,2617,2619],{"id":2618},"user-actor-context","User \u002F Actor Context",[445,2621,2622],{},"Who triggered the operation:",[520,2624,2626],{"className":522,"code":2625,"filename":760,"language":525,"meta":526,"style":526},"log.set({\n  userId: user.id,\n  email: user.email,\n  subscription: user.plan,\n  accountAge: daysSince(user.createdAt),\n})\n",[528,2627,2628,2640,2655,2670,2685,2705],{"__ignoreMap":526},[531,2629,2630,2632,2634,2636,2638],{"class":533,"line":534},[531,2631,818],{"class":537},[531,2633,542],{"class":541},[531,2635,823],{"class":545},[531,2637,549],{"class":537},[531,2639,1481],{"class":541},[531,2641,2642,2645,2647,2649,2651,2653],{"class":533,"line":564},[531,2643,2644],{"class":588},"  userId",[531,2646,592],{"class":541},[531,2648,595],{"class":537},[531,2650,542],{"class":541},[531,2652,1510],{"class":537},[531,2654,2476],{"class":541},[531,2656,2657,2660,2662,2664,2666,2668],{"class":533,"line":608},[531,2658,2659],{"class":588},"  email",[531,2661,592],{"class":541},[531,2663,595],{"class":537},[531,2665,542],{"class":541},[531,2667,1524],{"class":537},[531,2669,2476],{"class":541},[531,2671,2672,2675,2677,2679,2681,2683],{"class":533,"line":648},[531,2673,2674],{"class":588},"  subscription",[531,2676,592],{"class":541},[531,2678,595],{"class":537},[531,2680,542],{"class":541},[531,2682,1537],{"class":537},[531,2684,2476],{"class":541},[531,2686,2687,2690,2692,2695,2698,2700,2703],{"class":533,"line":668},[531,2688,2689],{"class":588},"  accountAge",[531,2691,592],{"class":541},[531,2693,2694],{"class":545}," daysSince",[531,2696,2697],{"class":537},"(user",[531,2699,542],{"class":541},[531,2701,2702],{"class":537},"createdAt)",[531,2704,2476],{"class":541},[531,2706,2707,2709],{"class":533,"line":688},[531,2708,603],{"class":541},[531,2710,561],{"class":537},[1261,2712,2714],{"id":2713},"business-context","Business Context",[445,2716,2717],{},"Domain-specific data relevant to the operation:",[520,2719,2721],{"className":522,"code":2720,"filename":760,"language":525,"meta":526,"style":526},"log.set({\n  cart: {\n    id: cart.id,\n    items: cart.items.length,\n    total: cart.total,\n    currency: 'USD',\n  },\n  shipping: {\n    method: 'express',\n    country: address.country,\n  },\n  coupon: appliedCoupon?.code,\n})\n",[528,2722,2723,2735,2744,2759,2780,2796,2812,2817,2826,2842,2859,2863,2879],{"__ignoreMap":526},[531,2724,2725,2727,2729,2731,2733],{"class":533,"line":534},[531,2726,818],{"class":537},[531,2728,542],{"class":541},[531,2730,823],{"class":545},[531,2732,549],{"class":537},[531,2734,1481],{"class":541},[531,2736,2737,2740,2742],{"class":533,"line":564},[531,2738,2739],{"class":588},"  cart",[531,2741,592],{"class":541},[531,2743,1925],{"class":541},[531,2745,2746,2749,2751,2753,2755,2757],{"class":533,"line":608},[531,2747,2748],{"class":588},"    id",[531,2750,592],{"class":541},[531,2752,877],{"class":537},[531,2754,542],{"class":541},[531,2756,1510],{"class":537},[531,2758,2476],{"class":541},[531,2760,2761,2764,2766,2768,2770,2773,2775,2778],{"class":533,"line":648},[531,2762,2763],{"class":588},"    items",[531,2765,592],{"class":541},[531,2767,877],{"class":537},[531,2769,542],{"class":541},[531,2771,2772],{"class":537},"items",[531,2774,542],{"class":541},[531,2776,2777],{"class":537},"length",[531,2779,2476],{"class":541},[531,2781,2782,2785,2787,2789,2791,2794],{"class":533,"line":668},[531,2783,2784],{"class":588},"    total",[531,2786,592],{"class":541},[531,2788,877],{"class":537},[531,2790,542],{"class":541},[531,2792,2793],{"class":537},"total",[531,2795,2476],{"class":541},[531,2797,2798,2801,2803,2805,2808,2810],{"class":533,"line":688},[531,2799,2800],{"class":588},"    currency",[531,2802,592],{"class":541},[531,2804,635],{"class":541},[531,2806,2807],{"class":555},"USD",[531,2809,552],{"class":541},[531,2811,2476],{"class":541},[531,2813,2814],{"class":533,"line":917},[531,2815,2816],{"class":541},"  },\n",[531,2818,2819,2822,2824],{"class":533,"line":1413},[531,2820,2821],{"class":588},"  shipping",[531,2823,592],{"class":541},[531,2825,1925],{"class":541},[531,2827,2828,2831,2833,2835,2838,2840],{"class":533,"line":1442},[531,2829,2830],{"class":588},"    method",[531,2832,592],{"class":541},[531,2834,635],{"class":541},[531,2836,2837],{"class":555},"express",[531,2839,552],{"class":541},[531,2841,2476],{"class":541},[531,2843,2844,2847,2849,2852,2854,2857],{"class":533,"line":1447},[531,2845,2846],{"class":588},"    country",[531,2848,592],{"class":541},[531,2850,2851],{"class":537}," address",[531,2853,542],{"class":541},[531,2855,2856],{"class":537},"country",[531,2858,2476],{"class":541},[531,2860,2861],{"class":533,"line":1461},[531,2862,2816],{"class":541},[531,2864,2865,2868,2870,2873,2875,2877],{"class":533,"line":1484},[531,2866,2867],{"class":588},"  coupon",[531,2869,592],{"class":541},[531,2871,2872],{"class":537}," appliedCoupon",[531,2874,2319],{"class":541},[531,2876,528],{"class":537},[531,2878,2476],{"class":541},[531,2880,2881,2883],{"class":533,"line":1544},[531,2882,603],{"class":541},[531,2884,561],{"class":537},[1261,2886,2888],{"id":2887},"outcome","Outcome",[445,2890,2891],{},"The result of the operation:",[755,2893,2894,2967],{},[520,2895,2898],{"className":522,"code":2896,"filename":2897,"language":525,"meta":526,"style":526},"log.set({\n  status: 200,\n  duration: Date.now() - startTime,\n  success: true,\n})\n","Success",[528,2899,2900,2912,2924,2950,2961],{"__ignoreMap":526},[531,2901,2902,2904,2906,2908,2910],{"class":533,"line":534},[531,2903,818],{"class":537},[531,2905,542],{"class":541},[531,2907,823],{"class":545},[531,2909,549],{"class":537},[531,2911,1481],{"class":541},[531,2913,2914,2917,2919,2922],{"class":533,"line":564},[531,2915,2916],{"class":588},"  status",[531,2918,592],{"class":541},[531,2920,2921],{"class":715}," 200",[531,2923,2476],{"class":541},[531,2925,2926,2929,2931,2934,2936,2939,2942,2945,2948],{"class":533,"line":608},[531,2927,2928],{"class":588},"  duration",[531,2930,592],{"class":541},[531,2932,2933],{"class":537}," Date",[531,2935,542],{"class":541},[531,2937,2938],{"class":545},"now",[531,2940,2941],{"class":537},"() ",[531,2943,2944],{"class":541},"-",[531,2946,2947],{"class":537}," startTime",[531,2949,2476],{"class":541},[531,2951,2952,2955,2957,2959],{"class":533,"line":648},[531,2953,2954],{"class":588},"  success",[531,2956,592],{"class":541},[531,2958,2049],{"class":2048},[531,2960,2476],{"class":541},[531,2962,2963,2965],{"class":533,"line":668},[531,2964,603],{"class":541},[531,2966,561],{"class":537},[520,2968,2971],{"className":522,"code":2969,"filename":2970,"language":525,"meta":526,"style":526},"log.set({\n  status: 500,\n  error: {\n    message: err.message,\n    code: err.code,\n    type: err.constructor.name,\n  },\n})\n","Error",[528,2972,2973,2985,2996,3005,3022,3037,3058,3062],{"__ignoreMap":526},[531,2974,2975,2977,2979,2981,2983],{"class":533,"line":534},[531,2976,818],{"class":537},[531,2978,542],{"class":541},[531,2980,823],{"class":545},[531,2982,549],{"class":537},[531,2984,1481],{"class":541},[531,2986,2987,2989,2991,2994],{"class":533,"line":564},[531,2988,2916],{"class":588},[531,2990,592],{"class":541},[531,2992,2993],{"class":715}," 500",[531,2995,2476],{"class":541},[531,2997,2998,3001,3003],{"class":533,"line":608},[531,2999,3000],{"class":588},"  error",[531,3002,592],{"class":541},[531,3004,1925],{"class":541},[531,3006,3007,3010,3012,3015,3017,3020],{"class":533,"line":648},[531,3008,3009],{"class":588},"    message",[531,3011,592],{"class":541},[531,3013,3014],{"class":537}," err",[531,3016,542],{"class":541},[531,3018,3019],{"class":537},"message",[531,3021,2476],{"class":541},[531,3023,3024,3027,3029,3031,3033,3035],{"class":533,"line":668},[531,3025,3026],{"class":588},"    code",[531,3028,592],{"class":541},[531,3030,3014],{"class":537},[531,3032,542],{"class":541},[531,3034,528],{"class":537},[531,3036,2476],{"class":541},[531,3038,3039,3042,3044,3046,3048,3051,3053,3056],{"class":533,"line":688},[531,3040,3041],{"class":588},"    type",[531,3043,592],{"class":541},[531,3045,3014],{"class":537},[531,3047,542],{"class":541},[531,3049,3050],{"class":537},"constructor",[531,3052,542],{"class":541},[531,3054,3055],{"class":537},"name",[531,3057,2476],{"class":541},[531,3059,3060],{"class":533,"line":917},[531,3061,2816],{"class":541},[531,3063,3064,3066],{"class":533,"line":1413},[531,3065,603],{"class":541},[531,3067,561],{"class":537},[509,3069,427],{"id":3070},"best-practices",[1261,3072,3074],{"id":3073},"use-meaningful-keys","Use Meaningful Keys",[520,3076,3079],{"className":522,"code":3077,"filename":3078,"language":525,"meta":526,"style":526},"\u002F\u002F Avoid generic keys\nlog.set({ data: { id: 123 } })\n\n\u002F\u002F Use specific, descriptive keys\nlog.set({ order: { id: 123, status: 'pending' } })\n","server\u002Fapi\u002Forders.post.ts",[528,3080,3081,3086,3118,3122,3127],{"__ignoreMap":526},[531,3082,3083],{"class":533,"line":534},[531,3084,3085],{"class":2056},"\u002F\u002F Avoid generic keys\n",[531,3087,3088,3090,3092,3094,3096,3098,3101,3103,3105,3107,3109,3112,3114,3116],{"class":533,"line":564},[531,3089,818],{"class":537},[531,3091,542],{"class":541},[531,3093,823],{"class":545},[531,3095,549],{"class":537},[531,3097,828],{"class":541},[531,3099,3100],{"class":588}," data",[531,3102,592],{"class":541},[531,3104,585],{"class":541},[531,3106,837],{"class":588},[531,3108,592],{"class":541},[531,3110,3111],{"class":715}," 123",[531,3113,643],{"class":541},[531,3115,643],{"class":541},[531,3117,561],{"class":537},[531,3119,3120],{"class":533,"line":608},[531,3121,792],{"emptyLinePlaceholder":791},[531,3123,3124],{"class":533,"line":648},[531,3125,3126],{"class":2056},"\u002F\u002F Use specific, descriptive keys\n",[531,3128,3129,3131,3133,3135,3137,3139,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3163,3165,3167,3169],{"class":533,"line":668},[531,3130,818],{"class":537},[531,3132,542],{"class":541},[531,3134,823],{"class":545},[531,3136,549],{"class":537},[531,3138,828],{"class":541},[531,3140,3141],{"class":588}," order",[531,3143,592],{"class":541},[531,3145,585],{"class":541},[531,3147,837],{"class":588},[531,3149,592],{"class":541},[531,3151,3111],{"class":715},[531,3153,582],{"class":541},[531,3155,951],{"class":588},[531,3157,592],{"class":541},[531,3159,635],{"class":541},[531,3161,3162],{"class":555},"pending",[531,3164,552],{"class":541},[531,3166,643],{"class":541},[531,3168,643],{"class":541},[531,3170,561],{"class":537},[1261,3172,3174],{"id":3173},"group-related-data","Group Related Data",[520,3176,3178],{"className":522,"code":3177,"filename":760,"language":525,"meta":526,"style":526},"\u002F\u002F Flat structure is hard to read\nlog.set({\n  userId: 1,\n  userEmail: 'a@b.com',\n  cartId: 2,\n  cartTotal: 100,\n})\n\n\u002F\u002F Grouped structure is clearer\nlog.set({\n  user: { id: 1, email: 'a@b.com' },\n  cart: { id: 2, total: 100 },\n})\n",[528,3179,3180,3185,3197,3207,3223,3235,3247,3253,3257,3262,3274,3304,3328],{"__ignoreMap":526},[531,3181,3182],{"class":533,"line":534},[531,3183,3184],{"class":2056},"\u002F\u002F Flat structure is hard to read\n",[531,3186,3187,3189,3191,3193,3195],{"class":533,"line":564},[531,3188,818],{"class":537},[531,3190,542],{"class":541},[531,3192,823],{"class":545},[531,3194,549],{"class":537},[531,3196,1481],{"class":541},[531,3198,3199,3201,3203,3205],{"class":533,"line":608},[531,3200,2644],{"class":588},[531,3202,592],{"class":541},[531,3204,842],{"class":715},[531,3206,2476],{"class":541},[531,3208,3209,3212,3214,3216,3219,3221],{"class":533,"line":648},[531,3210,3211],{"class":588},"  userEmail",[531,3213,592],{"class":541},[531,3215,635],{"class":541},[531,3217,3218],{"class":555},"a@b.com",[531,3220,552],{"class":541},[531,3222,2476],{"class":541},[531,3224,3225,3228,3230,3233],{"class":533,"line":668},[531,3226,3227],{"class":588},"  cartId",[531,3229,592],{"class":541},[531,3231,3232],{"class":715}," 2",[531,3234,2476],{"class":541},[531,3236,3237,3240,3242,3245],{"class":533,"line":688},[531,3238,3239],{"class":588},"  cartTotal",[531,3241,592],{"class":541},[531,3243,3244],{"class":715}," 100",[531,3246,2476],{"class":541},[531,3248,3249,3251],{"class":533,"line":917},[531,3250,603],{"class":541},[531,3252,561],{"class":537},[531,3254,3255],{"class":533,"line":1413},[531,3256,792],{"emptyLinePlaceholder":791},[531,3258,3259],{"class":533,"line":1442},[531,3260,3261],{"class":2056},"\u002F\u002F Grouped structure is clearer\n",[531,3263,3264,3266,3268,3270,3272],{"class":533,"line":1447},[531,3265,818],{"class":537},[531,3267,542],{"class":541},[531,3269,823],{"class":545},[531,3271,549],{"class":537},[531,3273,1481],{"class":541},[531,3275,3276,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301],{"class":533,"line":1461},[531,3277,3278],{"class":588},"  user",[531,3280,592],{"class":541},[531,3282,585],{"class":541},[531,3284,837],{"class":588},[531,3286,592],{"class":541},[531,3288,842],{"class":715},[531,3290,582],{"class":541},[531,3292,1515],{"class":588},[531,3294,592],{"class":541},[531,3296,635],{"class":541},[531,3298,3218],{"class":555},[531,3300,552],{"class":541},[531,3302,3303],{"class":541}," },\n",[531,3305,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326],{"class":533,"line":1484},[531,3307,2739],{"class":588},[531,3309,592],{"class":541},[531,3311,585],{"class":541},[531,3313,837],{"class":588},[531,3315,592],{"class":541},[531,3317,3232],{"class":715},[531,3319,582],{"class":541},[531,3321,903],{"class":588},[531,3323,592],{"class":541},[531,3325,3244],{"class":715},[531,3327,3303],{"class":541},[531,3329,3330,3332],{"class":533,"line":1544},[531,3331,603],{"class":541},[531,3333,561],{"class":537},[1261,3335,3337],{"id":3336},"add-context-incrementally","Add Context Incrementally",[445,3339,3340,3341,3344],{},"Call ",[528,3342,3343],{},"log.set()"," as you gather information:",[755,3346,3347,3654],{},[520,3348,3350],{"className":522,"code":3349,"filename":760,"language":525,"meta":526,"style":526},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  const user = await getUser(event)\n  log.set({ user: { id: user.id, plan: user.plan } })\n\n  const cart = await getCart(user.id)\n  log.set({ cart: { items: cart.items.length, total: cart.total } })\n\n  const payment = await processPayment(cart)\n  log.set({ payment: { method: payment.method, status: payment.status } })\n\n  return { success: true }\n})\n",[528,3351,3352,3370,3374,3396,3412,3416,3435,3481,3485,3509,3559,3563,3583,3630,3634,3648],{"__ignoreMap":526},[531,3353,3354,3356,3358,3360,3362,3364,3366,3368],{"class":533,"line":534},[531,3355,768],{"class":767},[531,3357,585],{"class":541},[531,3359,773],{"class":537},[531,3361,643],{"class":541},[531,3363,778],{"class":767},[531,3365,635],{"class":541},[531,3367,783],{"class":555},[531,3369,786],{"class":541},[531,3371,3372],{"class":533,"line":564},[531,3373,792],{"emptyLinePlaceholder":791},[531,3375,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394],{"class":533,"line":608},[531,3377,1899],{"class":767},[531,3379,1902],{"class":767},[531,3381,1905],{"class":545},[531,3383,549],{"class":537},[531,3385,1910],{"class":797},[531,3387,1467],{"class":541},[531,3389,1916],{"class":1915},[531,3391,1919],{"class":541},[531,3393,1922],{"class":797},[531,3395,1925],{"class":541},[531,3397,3398,3400,3402,3404,3406,3408,3410],{"class":533,"line":648},[531,3399,1930],{"class":797},[531,3401,1933],{"class":537},[531,3403,1936],{"class":541},[531,3405,773],{"class":545},[531,3407,549],{"class":588},[531,3409,1916],{"class":537},[531,3411,561],{"class":588},[531,3413,3414],{"class":533,"line":668},[531,3415,792],{"emptyLinePlaceholder":791},[531,3417,3418,3420,3422,3424,3426,3429,3431,3433],{"class":533,"line":688},[531,3419,1930],{"class":797},[531,3421,595],{"class":537},[531,3423,1936],{"class":541},[531,3425,1391],{"class":767},[531,3427,3428],{"class":545}," getUser",[531,3430,549],{"class":588},[531,3432,1916],{"class":537},[531,3434,561],{"class":588},[531,3436,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479],{"class":533,"line":917},[531,3438,1953],{"class":537},[531,3440,542],{"class":541},[531,3442,823],{"class":545},[531,3444,549],{"class":588},[531,3446,828],{"class":541},[531,3448,595],{"class":588},[531,3450,592],{"class":541},[531,3452,585],{"class":541},[531,3454,837],{"class":588},[531,3456,592],{"class":541},[531,3458,595],{"class":537},[531,3460,542],{"class":541},[531,3462,1510],{"class":537},[531,3464,582],{"class":541},[531,3466,847],{"class":588},[531,3468,592],{"class":541},[531,3470,595],{"class":537},[531,3472,542],{"class":541},[531,3474,1537],{"class":537},[531,3476,643],{"class":541},[531,3478,643],{"class":541},[531,3480,561],{"class":588},[531,3482,3483],{"class":533,"line":1413},[531,3484,792],{"emptyLinePlaceholder":791},[531,3486,3487,3489,3491,3493,3495,3498,3500,3503,3505,3507],{"class":533,"line":1442},[531,3488,1930],{"class":797},[531,3490,877],{"class":537},[531,3492,1936],{"class":541},[531,3494,1391],{"class":767},[531,3496,3497],{"class":545}," getCart",[531,3499,549],{"class":588},[531,3501,3502],{"class":537},"user",[531,3504,542],{"class":541},[531,3506,1510],{"class":537},[531,3508,561],{"class":588},[531,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557],{"class":533,"line":1447},[531,3512,1953],{"class":537},[531,3514,542],{"class":541},[531,3516,823],{"class":545},[531,3518,549],{"class":588},[531,3520,828],{"class":541},[531,3522,877],{"class":588},[531,3524,592],{"class":541},[531,3526,585],{"class":541},[531,3528,893],{"class":588},[531,3530,592],{"class":541},[531,3532,877],{"class":537},[531,3534,542],{"class":541},[531,3536,2772],{"class":537},[531,3538,542],{"class":541},[531,3540,2777],{"class":537},[531,3542,582],{"class":541},[531,3544,903],{"class":588},[531,3546,592],{"class":541},[531,3548,877],{"class":537},[531,3550,542],{"class":541},[531,3552,2793],{"class":537},[531,3554,643],{"class":541},[531,3556,643],{"class":541},[531,3558,561],{"class":588},[531,3560,3561],{"class":533,"line":1461},[531,3562,792],{"emptyLinePlaceholder":791},[531,3564,3565,3567,3569,3571,3573,3576,3578,3581],{"class":533,"line":1484},[531,3566,1930],{"class":797},[531,3568,930],{"class":537},[531,3570,1936],{"class":541},[531,3572,1391],{"class":767},[531,3574,3575],{"class":545}," processPayment",[531,3577,549],{"class":588},[531,3579,3580],{"class":537},"cart",[531,3582,561],{"class":588},[531,3584,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3624,3626,3628],{"class":533,"line":1544},[531,3586,1953],{"class":537},[531,3588,542],{"class":541},[531,3590,823],{"class":545},[531,3592,549],{"class":588},[531,3594,828],{"class":541},[531,3596,930],{"class":588},[531,3598,592],{"class":541},[531,3600,585],{"class":541},[531,3602,937],{"class":588},[531,3604,592],{"class":541},[531,3606,930],{"class":537},[531,3608,542],{"class":541},[531,3610,1624],{"class":537},[531,3612,582],{"class":541},[531,3614,951],{"class":588},[531,3616,592],{"class":541},[531,3618,930],{"class":537},[531,3620,542],{"class":541},[531,3622,3623],{"class":537},"status",[531,3625,643],{"class":541},[531,3627,643],{"class":541},[531,3629,561],{"class":588},[531,3631,3632],{"class":533,"line":1553},[531,3633,792],{"emptyLinePlaceholder":791},[531,3635,3636,3638,3640,3642,3644,3646],{"class":533,"line":1559},[531,3637,2038],{"class":767},[531,3639,585],{"class":541},[531,3641,2043],{"class":588},[531,3643,592],{"class":541},[531,3645,2049],{"class":2048},[531,3647,1190],{"class":541},[531,3649,3650,3652],{"class":533,"line":1564},[531,3651,603],{"class":541},[531,3653,561],{"class":537},[520,3655,3657],{"className":1140,"code":3656,"filename":1142,"language":1143,"meta":526,"style":526},"[INFO] POST \u002Fapi\u002Fcheckout (456ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n  status: 200\n",[528,3658,3659,3674,3694,3710,3736],{"__ignoreMap":526},[531,3660,3661,3663,3665,3667,3669,3672],{"class":533,"line":534},[531,3662,1150],{"class":541},[531,3664,1153],{"class":537},[531,3666,1156],{"class":541},[531,3668,1159],{"class":537},[531,3670,3671],{"class":1162},"456ms",[531,3673,561],{"class":537},[531,3675,3676,3678,3680,3682,3684,3686,3688,3690,3692],{"class":533,"line":564},[531,3677,1170],{"class":1162},[531,3679,585],{"class":555},[531,3681,1175],{"class":555},[531,3683,1178],{"class":555},[531,3685,1181],{"class":555},[531,3687,635],{"class":541},[531,3689,854],{"class":555},[531,3691,552],{"class":541},[531,3693,1190],{"class":555},[531,3695,3696,3698,3700,3702,3704,3706,3708],{"class":533,"line":608},[531,3697,1195],{"class":1162},[531,3699,585],{"class":555},[531,3701,1205],{"class":555},[531,3703,1208],{"class":555},[531,3705,1211],{"class":555},[531,3707,908],{"class":715},[531,3709,1190],{"class":555},[531,3711,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734],{"class":533,"line":648},[531,3713,1220],{"class":1162},[531,3715,585],{"class":555},[531,3717,1225],{"class":555},[531,3719,635],{"class":541},[531,3721,944],{"class":555},[531,3723,552],{"class":541},[531,3725,582],{"class":555},[531,3727,1236],{"class":555},[531,3729,635],{"class":541},[531,3731,958],{"class":555},[531,3733,552],{"class":541},[531,3735,1190],{"class":555},[531,3737,3738,3740],{"class":533,"line":668},[531,3739,1249],{"class":1162},[531,3741,1252],{"class":715},[1261,3743,3745],{"id":3744},"handle-errors-gracefully","Handle Errors Gracefully",[445,3747,3748],{},"When errors occur, the wide event still emits with error context:",[755,3750,3751,3977],{},[520,3752,3754],{"className":522,"code":3753,"filename":760,"language":525,"meta":526,"style":526},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  try {\n    const result = await processPayment(cart)\n    return result\n  } catch (err) {\n    log.set({\n      error: {\n        message: err.message,\n        code: err.code,\n        type: err.constructor.name,\n      },\n    })\n    throw err\n  }\n})\n",[528,3755,3756,3774,3778,3800,3816,3820,3827,3847,3855,3873,3886,3895,3910,3925,3944,3949,3956,3964,3970],{"__ignoreMap":526},[531,3757,3758,3760,3762,3764,3766,3768,3770,3772],{"class":533,"line":534},[531,3759,768],{"class":767},[531,3761,585],{"class":541},[531,3763,773],{"class":537},[531,3765,643],{"class":541},[531,3767,778],{"class":767},[531,3769,635],{"class":541},[531,3771,783],{"class":555},[531,3773,786],{"class":541},[531,3775,3776],{"class":533,"line":564},[531,3777,792],{"emptyLinePlaceholder":791},[531,3779,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798],{"class":533,"line":608},[531,3781,1899],{"class":767},[531,3783,1902],{"class":767},[531,3785,1905],{"class":545},[531,3787,549],{"class":537},[531,3789,1910],{"class":797},[531,3791,1467],{"class":541},[531,3793,1916],{"class":1915},[531,3795,1919],{"class":541},[531,3797,1922],{"class":797},[531,3799,1925],{"class":541},[531,3801,3802,3804,3806,3808,3810,3812,3814],{"class":533,"line":648},[531,3803,1930],{"class":797},[531,3805,1933],{"class":537},[531,3807,1936],{"class":541},[531,3809,773],{"class":545},[531,3811,549],{"class":588},[531,3813,1916],{"class":537},[531,3815,561],{"class":588},[531,3817,3818],{"class":533,"line":668},[531,3819,792],{"emptyLinePlaceholder":791},[531,3821,3822,3825],{"class":533,"line":688},[531,3823,3824],{"class":767},"  try",[531,3826,1925],{"class":541},[531,3828,3829,3832,3835,3837,3839,3841,3843,3845],{"class":533,"line":917},[531,3830,3831],{"class":797},"    const",[531,3833,3834],{"class":537}," result",[531,3836,1936],{"class":541},[531,3838,1391],{"class":767},[531,3840,3575],{"class":545},[531,3842,549],{"class":588},[531,3844,3580],{"class":537},[531,3846,561],{"class":588},[531,3848,3849,3852],{"class":533,"line":1413},[531,3850,3851],{"class":767},"    return",[531,3853,3854],{"class":537}," result\n",[531,3856,3857,3860,3863,3865,3868,3871],{"class":533,"line":1442},[531,3858,3859],{"class":541},"  }",[531,3861,3862],{"class":767}," catch",[531,3864,1467],{"class":588},[531,3866,3867],{"class":537},"err",[531,3869,3870],{"class":588},") ",[531,3872,1481],{"class":541},[531,3874,3875,3878,3880,3882,3884],{"class":533,"line":1447},[531,3876,3877],{"class":537},"    log",[531,3879,542],{"class":541},[531,3881,823],{"class":545},[531,3883,549],{"class":588},[531,3885,1481],{"class":541},[531,3887,3888,3891,3893],{"class":533,"line":1461},[531,3889,3890],{"class":588},"      error",[531,3892,592],{"class":541},[531,3894,1925],{"class":541},[531,3896,3897,3900,3902,3904,3906,3908],{"class":533,"line":1484},[531,3898,3899],{"class":588},"        message",[531,3901,592],{"class":541},[531,3903,3014],{"class":537},[531,3905,542],{"class":541},[531,3907,3019],{"class":537},[531,3909,2476],{"class":541},[531,3911,3912,3915,3917,3919,3921,3923],{"class":533,"line":1544},[531,3913,3914],{"class":588},"        code",[531,3916,592],{"class":541},[531,3918,3014],{"class":537},[531,3920,542],{"class":541},[531,3922,528],{"class":537},[531,3924,2476],{"class":541},[531,3926,3927,3930,3932,3934,3936,3938,3940,3942],{"class":533,"line":1553},[531,3928,3929],{"class":588},"        type",[531,3931,592],{"class":541},[531,3933,3014],{"class":537},[531,3935,542],{"class":541},[531,3937,3050],{"class":537},[531,3939,542],{"class":541},[531,3941,3055],{"class":537},[531,3943,2476],{"class":541},[531,3945,3946],{"class":533,"line":1559},[531,3947,3948],{"class":541},"      },\n",[531,3950,3951,3954],{"class":533,"line":1564},[531,3952,3953],{"class":541},"    }",[531,3955,561],{"class":588},[531,3957,3958,3961],{"class":533,"line":1597},[531,3959,3960],{"class":767},"    throw",[531,3962,3963],{"class":537}," err\n",[531,3965,3967],{"class":533,"line":3966},18,[531,3968,3969],{"class":541},"  }\n",[531,3971,3973,3975],{"class":533,"line":3972},19,[531,3974,603],{"class":541},[531,3976,561],{"class":537},[520,3978,3980],{"className":1140,"code":3979,"filename":1142,"language":1143,"meta":526,"style":526},"[ERROR] POST \u002Fapi\u002Fcheckout (123ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { items: 3, total: 9999 }\n  error: {\n    message: 'Card declined',\n    code: 'CARD_DECLINED',\n    type: 'PaymentError'\n  }\n  status: 500\n",[528,3981,3982,3998,4018,4034,4041,4055,4069,4082,4086],{"__ignoreMap":526},[531,3983,3984,3986,3989,3991,3993,3996],{"class":533,"line":534},[531,3985,1150],{"class":541},[531,3987,3988],{"class":537},"ERROR",[531,3990,1156],{"class":541},[531,3992,1159],{"class":537},[531,3994,3995],{"class":1162},"123ms",[531,3997,561],{"class":537},[531,3999,4000,4002,4004,4006,4008,4010,4012,4014,4016],{"class":533,"line":564},[531,4001,1170],{"class":1162},[531,4003,585],{"class":555},[531,4005,1175],{"class":555},[531,4007,1178],{"class":555},[531,4009,1181],{"class":555},[531,4011,635],{"class":541},[531,4013,854],{"class":555},[531,4015,552],{"class":541},[531,4017,1190],{"class":555},[531,4019,4020,4022,4024,4026,4028,4030,4032],{"class":533,"line":608},[531,4021,1195],{"class":1162},[531,4023,585],{"class":555},[531,4025,1205],{"class":555},[531,4027,1208],{"class":555},[531,4029,1211],{"class":555},[531,4031,908],{"class":715},[531,4033,1190],{"class":555},[531,4035,4036,4039],{"class":533,"line":648},[531,4037,4038],{"class":1162},"  error:",[531,4040,1925],{"class":555},[531,4042,4043,4046,4048,4051,4053],{"class":533,"line":668},[531,4044,4045],{"class":1162},"    message:",[531,4047,635],{"class":541},[531,4049,4050],{"class":555},"Card declined",[531,4052,552],{"class":541},[531,4054,2476],{"class":555},[531,4056,4057,4060,4062,4065,4067],{"class":533,"line":688},[531,4058,4059],{"class":1162},"    code:",[531,4061,635],{"class":541},[531,4063,4064],{"class":555},"CARD_DECLINED",[531,4066,552],{"class":541},[531,4068,2476],{"class":555},[531,4070,4071,4073,4075,4077,4080],{"class":533,"line":917},[531,4072,3041],{"class":545},[531,4074,592],{"class":555},[531,4076,635],{"class":541},[531,4078,4079],{"class":555},"PaymentError",[531,4081,786],{"class":541},[531,4083,4084],{"class":533,"line":1413},[531,4085,3969],{"class":537},[531,4087,4088,4090],{"class":533,"line":1442},[531,4089,1249],{"class":1162},[531,4091,4092],{"class":715}," 500\n",[1261,4094,4096],{"id":4095},"setting-the-level-manually","Setting the Level Manually",[445,4098,4099,4102,4103,4105,4106,4109,4110,4113,4114,4116,4117,4120],{},[528,4100,4101],{},"log.error(err)"," populates the ",[528,4104,2094],{}," field with ",[528,4107,4108],{},"{ name, message, stack }"," and promotes the wide event to ",[528,4111,4112],{},"level: 'error'",". When you want to control the ",[528,4115,2094],{}," field yourself — typed error codes, no stack, or richer custom shapes — use ",[528,4118,4119],{},"log.setLevel()"," to promote the level without touching the context:",[520,4122,4124],{"className":522,"code":4123,"language":525,"meta":526,"style":526},"log.setLevel('error')\nlog.set({\n  error: {\n    code: 'PAYMENT_DECLINED',\n    reason: 'insufficient_funds',\n  },\n})\n",[528,4125,4126,4145,4157,4165,4180,4196,4200],{"__ignoreMap":526},[531,4127,4128,4130,4132,4135,4137,4139,4141,4143],{"class":533,"line":534},[531,4129,818],{"class":537},[531,4131,542],{"class":541},[531,4133,4134],{"class":545},"setLevel",[531,4136,549],{"class":537},[531,4138,552],{"class":541},[531,4140,2094],{"class":555},[531,4142,552],{"class":541},[531,4144,561],{"class":537},[531,4146,4147,4149,4151,4153,4155],{"class":533,"line":564},[531,4148,818],{"class":537},[531,4150,542],{"class":541},[531,4152,823],{"class":545},[531,4154,549],{"class":537},[531,4156,1481],{"class":541},[531,4158,4159,4161,4163],{"class":533,"line":608},[531,4160,3000],{"class":588},[531,4162,592],{"class":541},[531,4164,1925],{"class":541},[531,4166,4167,4169,4171,4173,4176,4178],{"class":533,"line":648},[531,4168,3026],{"class":588},[531,4170,592],{"class":541},[531,4172,635],{"class":541},[531,4174,4175],{"class":555},"PAYMENT_DECLINED",[531,4177,552],{"class":541},[531,4179,2476],{"class":541},[531,4181,4182,4185,4187,4189,4192,4194],{"class":533,"line":668},[531,4183,4184],{"class":588},"    reason",[531,4186,592],{"class":541},[531,4188,635],{"class":541},[531,4190,4191],{"class":555},"insufficient_funds",[531,4193,552],{"class":541},[531,4195,2476],{"class":541},[531,4197,4198],{"class":533,"line":688},[531,4199,2816],{"class":541},[531,4201,4202,4204],{"class":533,"line":917},[531,4203,603],{"class":541},[531,4205,561],{"class":537},[445,4207,4208,4211,4212,4215,4216,4219,4220,4223,4224,4226],{},[528,4209,4210],{},"setLevel()"," accepts ",[528,4213,4214],{},"'error' | 'warn' | 'info' | 'debug'"," and wins over the level computed from ",[528,4217,4218],{},".error()"," \u002F ",[528,4221,4222],{},".warn()",". Combine it with ",[528,4225,3343],{}," to keep the wide event tidy while still routing through error-level sampling and drains.",[509,4228,4230],{"id":4229},"output-formats","Output Formats",[445,4232,4233],{},"evlog automatically switches between formats based on environment: pretty in development, JSON in production. This is the default behavior, no configuration needed.",[755,4235,4236,4318],{},[520,4237,4240],{"className":1140,"code":4238,"filename":4239,"language":1143,"meta":526,"style":526},"[INFO] POST \u002Fapi\u002Fcheckout (234ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n","Development (Pretty)",[528,4241,4242,4256,4276,4292],{"__ignoreMap":526},[531,4243,4244,4246,4248,4250,4252,4254],{"class":533,"line":534},[531,4245,1150],{"class":541},[531,4247,1153],{"class":537},[531,4249,1156],{"class":541},[531,4251,1159],{"class":537},[531,4253,1163],{"class":1162},[531,4255,561],{"class":537},[531,4257,4258,4260,4262,4264,4266,4268,4270,4272,4274],{"class":533,"line":564},[531,4259,1170],{"class":1162},[531,4261,585],{"class":555},[531,4263,1175],{"class":555},[531,4265,1178],{"class":555},[531,4267,1181],{"class":555},[531,4269,635],{"class":541},[531,4271,854],{"class":555},[531,4273,552],{"class":541},[531,4275,1190],{"class":555},[531,4277,4278,4280,4282,4284,4286,4288,4290],{"class":533,"line":608},[531,4279,1195],{"class":1162},[531,4281,585],{"class":555},[531,4283,1205],{"class":555},[531,4285,1208],{"class":555},[531,4287,1211],{"class":555},[531,4289,908],{"class":715},[531,4291,1190],{"class":555},[531,4293,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316],{"class":533,"line":648},[531,4295,1220],{"class":1162},[531,4297,585],{"class":555},[531,4299,1225],{"class":555},[531,4301,635],{"class":541},[531,4303,944],{"class":555},[531,4305,552],{"class":541},[531,4307,582],{"class":555},[531,4309,1236],{"class":555},[531,4311,635],{"class":541},[531,4313,958],{"class":555},[531,4315,552],{"class":541},[531,4317,1190],{"class":555},[520,4319,4324],{"className":4320,"code":4321,"filename":4322,"language":4323,"meta":526,"style":526},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"duration\": 234,\n  \"user\": { \"id\": 1, \"plan\": \"pro\" },\n  \"cart\": { \"items\": 3, \"total\": 9999 },\n  \"payment\": { \"method\": \"card\", \"status\": \"success\" }\n}\n","Production (JSON)","json",[528,4325,4326,4330,4352,4370,4388,4403,4443,4479,4524],{"__ignoreMap":526},[531,4327,4328],{"class":533,"line":534},[531,4329,1481],{"class":541},[531,4331,4332,4335,4338,4341,4343,4346,4348,4350],{"class":533,"line":564},[531,4333,4334],{"class":541},"  \"",[531,4336,4337],{"class":797},"level",[531,4339,4340],{"class":541},"\"",[531,4342,592],{"class":541},[531,4344,4345],{"class":541}," \"",[531,4347,546],{"class":555},[531,4349,4340],{"class":541},[531,4351,2476],{"class":541},[531,4353,4354,4356,4358,4360,4362,4364,4366,4368],{"class":533,"line":608},[531,4355,4334],{"class":541},[531,4357,1624],{"class":797},[531,4359,4340],{"class":541},[531,4361,592],{"class":541},[531,4363,4345],{"class":541},[531,4365,1723],{"class":555},[531,4367,4340],{"class":541},[531,4369,2476],{"class":541},[531,4371,4372,4374,4376,4378,4380,4382,4384,4386],{"class":533,"line":648},[531,4373,4334],{"class":541},[531,4375,1628],{"class":797},[531,4377,4340],{"class":541},[531,4379,592],{"class":541},[531,4381,4345],{"class":541},[531,4383,1737],{"class":555},[531,4385,4340],{"class":541},[531,4387,2476],{"class":541},[531,4389,4390,4392,4395,4397,4399,4401],{"class":533,"line":668},[531,4391,4334],{"class":541},[531,4393,4394],{"class":797},"duration",[531,4396,4340],{"class":541},[531,4398,592],{"class":541},[531,4400,716],{"class":715},[531,4402,2476],{"class":541},[531,4404,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441],{"class":533,"line":688},[531,4406,4334],{"class":541},[531,4408,3502],{"class":797},[531,4410,4340],{"class":541},[531,4412,592],{"class":541},[531,4414,585],{"class":541},[531,4416,4345],{"class":541},[531,4418,1510],{"class":1162},[531,4420,4340],{"class":541},[531,4422,592],{"class":541},[531,4424,842],{"class":715},[531,4426,582],{"class":541},[531,4428,4345],{"class":541},[531,4430,1537],{"class":1162},[531,4432,4340],{"class":541},[531,4434,592],{"class":541},[531,4436,4345],{"class":541},[531,4438,854],{"class":555},[531,4440,4340],{"class":541},[531,4442,3303],{"class":541},[531,4444,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477],{"class":533,"line":917},[531,4446,4334],{"class":541},[531,4448,3580],{"class":797},[531,4450,4340],{"class":541},[531,4452,592],{"class":541},[531,4454,585],{"class":541},[531,4456,4345],{"class":541},[531,4458,2772],{"class":1162},[531,4460,4340],{"class":541},[531,4462,592],{"class":541},[531,4464,898],{"class":715},[531,4466,582],{"class":541},[531,4468,4345],{"class":541},[531,4470,2793],{"class":1162},[531,4472,4340],{"class":541},[531,4474,592],{"class":541},[531,4476,908],{"class":715},[531,4478,3303],{"class":541},[531,4480,4481,4483,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":533,"line":1413},[531,4482,4334],{"class":541},[531,4484,4485],{"class":797},"payment",[531,4487,4340],{"class":541},[531,4489,592],{"class":541},[531,4491,585],{"class":541},[531,4493,4345],{"class":541},[531,4495,1624],{"class":1162},[531,4497,4340],{"class":541},[531,4499,592],{"class":541},[531,4501,4345],{"class":541},[531,4503,944],{"class":555},[531,4505,4340],{"class":541},[531,4507,582],{"class":541},[531,4509,4345],{"class":541},[531,4511,3623],{"class":1162},[531,4513,4340],{"class":541},[531,4515,592],{"class":541},[531,4517,4345],{"class":541},[531,4519,958],{"class":555},[531,4521,4340],{"class":541},[531,4523,1190],{"class":541},[531,4525,4526],{"class":533,"line":1442},[531,4527,1556],{"class":541},[509,4529,4531],{"id":4530},"next-steps","Next Steps",[471,4533,4534,4539,4544,4549],{},[474,4535,4536,4538],{},[455,4537,41],{"href":42}," - Fire-and-forget logs when you don't need context accumulation",[474,4540,4541,4543],{},[455,4542,71],{"href":72}," - Add compile-time type safety to your wide events",[474,4545,4546,4548],{},[455,4547,51],{"href":52}," - Errors with actionable context",[474,4550,4551,4553],{},[455,4552,158],{"href":163}," - Auto-managed request logging per framework",[4555,4556,4557],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":526,"searchDepth":564,"depth":564,"links":4559},[4560,4561,4569,4572,4578,4585,4586],{"id":511,"depth":564,"text":512},{"id":1258,"depth":564,"text":1259,"children":4562},[4563,4565,4567],{"id":1263,"depth":608,"text":4564},"createLogger (General Purpose)",{"id":1608,"depth":608,"text":4566},"createRequestLogger (HTTP Contexts)",{"id":1856,"depth":608,"text":4568},"useLogger (Retrieving the Request Logger)",{"id":2074,"depth":564,"text":2075,"children":4570},[4571],{"id":2145,"depth":608,"text":2148},{"id":2386,"depth":564,"text":2387,"children":4573},[4574,4575,4576,4577],{"id":2403,"depth":608,"text":2404},{"id":2618,"depth":608,"text":2619},{"id":2713,"depth":608,"text":2714},{"id":2887,"depth":608,"text":2888},{"id":3070,"depth":564,"text":427,"children":4579},[4580,4581,4582,4583,4584],{"id":3073,"depth":608,"text":3074},{"id":3173,"depth":608,"text":3174},{"id":3336,"depth":608,"text":3337},{"id":3744,"depth":608,"text":3745},{"id":4095,"depth":608,"text":4096},{"id":4229,"depth":564,"text":4230},{"id":4530,"depth":564,"text":4531},"Accumulate context over any unit of work and emit a single comprehensive event. Works for HTTP requests, scripts, background jobs, queue workers, and workflows.","md",[4590,4592],{"label":51,"icon":54,"to":52,"color":451,"variant":4591},"subtle",{"label":427,"icon":318,"to":428,"color":451,"variant":4591},{},{"icon":49},{"title":46,"description":4587},"uH9MmZw12JAoXLHJK64iwchLyjTXX9foZeIW4EZNLWg",[4598,4600],{"title":41,"path":42,"stem":43,"description":4599,"icon":44,"children":-1},"evlog's general-purpose logger. A drop-in for console.log, pino, or consola, with the same level filtering, drain pipeline, redaction, and pretty\u002FJSON output as wide events.",{"title":51,"path":52,"stem":53,"description":4601,"icon":54,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",1779694501096]