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