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