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