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