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