[{"data":1,"prerenderedAt":2992},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":277,"-getting-started-quick-start-surround":2987},[4,30,65,105,188,247,263],{"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],{"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,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,169,174,178,183],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167,"icon":168},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":170,"path":171,"stem":172,"icon":173},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":175,"path":176,"stem":177,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":179,"path":180,"stem":181,"icon":182},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":184,"path":185,"stem":186,"icon":187},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Adapters","\u002Fadapters","5.adapters",[193,197,202,207,212,217,222,227,232,237,242],{"title":36,"path":194,"stem":195,"icon":196},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":198,"path":199,"stem":200,"icon":201},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F10.pipeline","i-lucide-workflow",{"title":203,"path":204,"stem":205,"icon":206},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F11.browser","i-lucide-globe",{"title":208,"path":209,"stem":210,"icon":211},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":213,"path":214,"stem":215,"icon":216},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":218,"path":219,"stem":220,"icon":221},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":223,"path":224,"stem":225,"icon":226},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":228,"path":229,"stem":230,"icon":231},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":233,"path":234,"stem":235,"icon":236},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":238,"path":239,"stem":240,"icon":241},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":243,"path":244,"stem":245,"icon":246},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F9.custom","i-lucide-code",{"title":248,"path":249,"stem":250,"children":251,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[252,255,259],{"title":36,"path":253,"stem":254,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":256,"path":257,"stem":258,"icon":187},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":260,"path":261,"stem":262,"icon":246},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":264,"path":265,"stem":266,"children":267,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[268,272],{"title":36,"path":269,"stem":270,"icon":271},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":273,"path":274,"stem":275,"icon":276},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":278,"title":20,"body":279,"description":2977,"extension":2978,"links":2979,"meta":2983,"navigation":2984,"path":21,"seo":2985,"stem":22,"__hash__":2986},"docs\u002F1.getting-started\u002F3.quick-start.md",{"type":280,"value":281,"toc":2963},"minimark",[282,286,311,316,319,532,535,558,567,571,581,846,866,882,955,969,973,980,1309,1319,1324,1387,1391,1394,1399,1405,1595,1598,1645,1649,1654,1782,1795,1799,1805,2057,2061,2148,2152,2158,2520,2524,2530,2921,2927,2931,2959],[283,284,285],"p",{},"This guide covers the core APIs you'll use most often with evlog.",[287,288,290,291,295,296,300,301,300,304,300,307,310],"callout",{"color":289,"icon":28},"info","In Nuxt, evlog ",[292,293,294],"strong",{},"auto-imports"," all functions (",[297,298,299],"code",{},"useLogger",", ",[297,302,303],{},"log",[297,305,306],{},"createError",[297,308,309],{},"parseError","). No import statements needed.",[312,313,315],"h2",{"id":314},"log-simple-logging","log (Simple Logging)",[283,317,318],{},"The simplest way to use evlog. Fire-and-forget structured logs, anywhere in your code:",[320,321,322,484],"code-group",{},[323,324,330],"pre",{"className":325,"code":326,"filename":327,"language":328,"meta":329,"style":329},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { log } from 'evlog'\n\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined' })\nlog.warn('cache', 'Cache miss')\n","Server","typescript","",[297,331,332,365,372,407,454],{"__ignoreMap":329},[333,334,337,341,345,349,352,355,358,362],"span",{"class":335,"line":336},"line",1,[333,338,340],{"class":339},"s7zQu","import",[333,342,344],{"class":343},"sMK4o"," {",[333,346,348],{"class":347},"sTEyZ"," log",[333,350,351],{"class":343}," }",[333,353,354],{"class":339}," from",[333,356,357],{"class":343}," '",[333,359,361],{"class":360},"sfazB","evlog",[333,363,364],{"class":343},"'\n",[333,366,368],{"class":335,"line":367},2,[333,369,371],{"emptyLinePlaceholder":370},true,"\n",[333,373,375,377,380,383,386,389,392,394,397,399,402,404],{"class":335,"line":374},3,[333,376,303],{"class":347},[333,378,379],{"class":343},".",[333,381,289],{"class":382},"s2Zo4",[333,384,385],{"class":347},"(",[333,387,388],{"class":343},"'",[333,390,391],{"class":360},"auth",[333,393,388],{"class":343},[333,395,396],{"class":343},",",[333,398,357],{"class":343},[333,400,401],{"class":360},"User logged in",[333,403,388],{"class":343},[333,405,406],{"class":347},")\n",[333,408,410,412,414,417,419,422,426,429,431,434,436,438,441,443,445,448,450,452],{"class":335,"line":409},4,[333,411,303],{"class":347},[333,413,379],{"class":343},[333,415,416],{"class":382},"error",[333,418,385],{"class":347},[333,420,421],{"class":343},"{",[333,423,425],{"class":424},"swJcz"," action",[333,427,428],{"class":343},":",[333,430,357],{"class":343},[333,432,433],{"class":360},"payment",[333,435,388],{"class":343},[333,437,396],{"class":343},[333,439,440],{"class":424}," error",[333,442,428],{"class":343},[333,444,357],{"class":343},[333,446,447],{"class":360},"card_declined",[333,449,388],{"class":343},[333,451,351],{"class":343},[333,453,406],{"class":347},[333,455,457,459,461,464,466,468,471,473,475,477,480,482],{"class":335,"line":456},5,[333,458,303],{"class":347},[333,460,379],{"class":343},[333,462,463],{"class":382},"warn",[333,465,385],{"class":347},[333,467,388],{"class":343},[333,469,470],{"class":360},"cache",[333,472,388],{"class":343},[333,474,396],{"class":343},[333,476,357],{"class":343},[333,478,479],{"class":360},"Cache miss",[333,481,388],{"class":343},[333,483,406],{"class":347},[323,485,490],{"className":486,"code":487,"filename":488,"language":489,"meta":329,"style":329},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","10:23:45.612 [auth] User logged in\n10:23:45.613 ERROR [my-app] action=payment error=card_declined\n10:23:45.614 [cache] Cache miss\n","Output","bash",[297,491,492,501,524],{"__ignoreMap":329},[333,493,494,498],{"class":335,"line":336},[333,495,497],{"class":496},"sBMFI","10:23:45.612",[333,499,500],{"class":347}," [auth] User logged in\n",[333,502,503,506,509,512,515,517,519,521],{"class":335,"line":367},[333,504,505],{"class":496},"10:23:45.613",[333,507,508],{"class":360}," ERROR",[333,510,511],{"class":347}," [my-app] action",[333,513,514],{"class":343},"=",[333,516,433],{"class":360},[333,518,440],{"class":347},[333,520,514],{"class":343},[333,522,523],{"class":360},"card_declined\n",[333,525,526,529],{"class":335,"line":374},[333,527,528],{"class":496},"10:23:45.614",[333,530,531],{"class":347}," [cache] Cache miss\n",[283,533,534],{},"Two call styles:",[536,537,538,549],"ul",{},[539,540,541,544,545,548],"li",{},[292,542,543],{},"Tagged",": ",[297,546,547],{},"log.info('tag', 'message')"," for quick, readable console output",[539,550,551,544,554,557],{},[292,552,553],{},"Structured",[297,555,556],{},"log.info({ key: value })"," for rich events that flow through the drain pipeline",[287,559,562,563,566],{"color":560,"icon":561},"neutral","i-lucide-arrow-right","See the full ",[564,565,41],"a",{"href":42}," guide for all patterns and drain integration.",[312,568,570],{"id":569},"createlogger-wide-events","createLogger (Wide Events)",[283,572,573,574,577,578,428],{},"When you need to ",[292,575,576],{},"accumulate context"," across multiple steps of an operation, whether a script, background job, queue worker, or workflow, use ",[297,579,580],{},"createLogger",[320,582,583,789],{},[323,584,587],{"className":325,"code":585,"filename":586,"language":328,"meta":329,"style":329},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({ env: { service: 'sync-worker' } })\n\nconst log = createLogger({ jobId: job.id, queue: 'emails' })\n\nlog.set({ batch: { size: 50 } })\nlog.set({ batch: { processed: 50 } })\nlog.emit()\n","scripts\u002Fsync-job.ts",[297,588,589,613,617,651,655,703,708,744,776],{"__ignoreMap":329},[333,590,591,593,595,598,600,603,605,607,609,611],{"class":335,"line":336},[333,592,340],{"class":339},[333,594,344],{"class":343},[333,596,597],{"class":347}," initLogger",[333,599,396],{"class":343},[333,601,602],{"class":347}," createLogger",[333,604,351],{"class":343},[333,606,354],{"class":339},[333,608,357],{"class":343},[333,610,361],{"class":360},[333,612,364],{"class":343},[333,614,615],{"class":335,"line":367},[333,616,371],{"emptyLinePlaceholder":370},[333,618,619,622,624,626,629,631,633,636,638,640,643,645,647,649],{"class":335,"line":374},[333,620,621],{"class":382},"initLogger",[333,623,385],{"class":347},[333,625,421],{"class":343},[333,627,628],{"class":424}," env",[333,630,428],{"class":343},[333,632,344],{"class":343},[333,634,635],{"class":424}," service",[333,637,428],{"class":343},[333,639,357],{"class":343},[333,641,642],{"class":360},"sync-worker",[333,644,388],{"class":343},[333,646,351],{"class":343},[333,648,351],{"class":343},[333,650,406],{"class":347},[333,652,653],{"class":335,"line":409},[333,654,371],{"emptyLinePlaceholder":370},[333,656,657,661,664,666,668,670,672,675,677,680,682,685,687,690,692,694,697,699,701],{"class":335,"line":456},[333,658,660],{"class":659},"spNyl","const",[333,662,663],{"class":347}," log ",[333,665,514],{"class":343},[333,667,602],{"class":382},[333,669,385],{"class":347},[333,671,421],{"class":343},[333,673,674],{"class":424}," jobId",[333,676,428],{"class":343},[333,678,679],{"class":347}," job",[333,681,379],{"class":343},[333,683,684],{"class":347},"id",[333,686,396],{"class":343},[333,688,689],{"class":424}," queue",[333,691,428],{"class":343},[333,693,357],{"class":343},[333,695,696],{"class":360},"emails",[333,698,388],{"class":343},[333,700,351],{"class":343},[333,702,406],{"class":347},[333,704,706],{"class":335,"line":705},6,[333,707,371],{"emptyLinePlaceholder":370},[333,709,711,713,715,718,720,722,725,727,729,732,734,738,740,742],{"class":335,"line":710},7,[333,712,303],{"class":347},[333,714,379],{"class":343},[333,716,717],{"class":382},"set",[333,719,385],{"class":347},[333,721,421],{"class":343},[333,723,724],{"class":424}," batch",[333,726,428],{"class":343},[333,728,344],{"class":343},[333,730,731],{"class":424}," size",[333,733,428],{"class":343},[333,735,737],{"class":736},"sbssI"," 50",[333,739,351],{"class":343},[333,741,351],{"class":343},[333,743,406],{"class":347},[333,745,747,749,751,753,755,757,759,761,763,766,768,770,772,774],{"class":335,"line":746},8,[333,748,303],{"class":347},[333,750,379],{"class":343},[333,752,717],{"class":382},[333,754,385],{"class":347},[333,756,421],{"class":343},[333,758,724],{"class":424},[333,760,428],{"class":343},[333,762,344],{"class":343},[333,764,765],{"class":424}," processed",[333,767,428],{"class":343},[333,769,737],{"class":736},[333,771,351],{"class":343},[333,773,351],{"class":343},[333,775,406],{"class":347},[333,777,779,781,783,786],{"class":335,"line":778},9,[333,780,303],{"class":347},[333,782,379],{"class":343},[333,784,785],{"class":382},"emit",[333,787,788],{"class":347},"()\n",[323,790,793],{"className":486,"code":791,"filename":792,"language":489,"meta":329,"style":329},"10:23:45.612 INFO [sync-worker] in 1204ms\n  ├─ jobId: job_abc123\n  ├─ queue: emails\n  └─ batch: size=50 processed=50\n","Output (Pretty)",[297,794,795,805,816,826],{"__ignoreMap":329},[333,796,797,799,802],{"class":335,"line":336},[333,798,497],{"class":496},[333,800,801],{"class":360}," INFO",[333,803,804],{"class":347}," [sync-worker] in 1204ms\n",[333,806,807,810,813],{"class":335,"line":367},[333,808,809],{"class":496},"  ├─",[333,811,812],{"class":360}," jobId:",[333,814,815],{"class":360}," job_abc123\n",[333,817,818,820,823],{"class":335,"line":374},[333,819,809],{"class":496},[333,821,822],{"class":360}," queue:",[333,824,825],{"class":360}," emails\n",[333,827,828,831,834,837,840,843],{"class":335,"line":409},[333,829,830],{"class":496},"  └─",[333,832,833],{"class":360}," batch:",[333,835,836],{"class":360}," size=",[333,838,839],{"class":736},"50",[333,841,842],{"class":360}," processed=",[333,844,845],{"class":736},"50\n",[283,847,848,851,852,300,854,300,856,300,858,300,860,862,863,379],{},[297,849,850],{},"createLogger()"," accepts any initial context as a plain object. It returns a logger with ",[297,853,717],{},[297,855,416],{},[297,857,289],{},[297,859,463],{},[297,861,785],{},", and ",[297,864,865],{},"getContext",[283,867,868,869,872,873,300,876,862,879,428],{},"For HTTP request contexts specifically, use ",[297,870,871],{},"createRequestLogger()"," which pre-populates ",[297,874,875],{},"method",[297,877,878],{},"path",[297,880,881],{},"requestId",[323,883,886],{"className":325,"code":884,"filename":885,"language":328,"meta":329,"style":329},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\n","src\u002Fworker.ts",[297,887,888,907,911],{"__ignoreMap":329},[333,889,890,892,894,897,899,901,903,905],{"class":335,"line":336},[333,891,340],{"class":339},[333,893,344],{"class":343},[333,895,896],{"class":347}," createRequestLogger",[333,898,351],{"class":343},[333,900,354],{"class":339},[333,902,357],{"class":343},[333,904,361],{"class":360},[333,906,364],{"class":343},[333,908,909],{"class":335,"line":367},[333,910,371],{"emptyLinePlaceholder":370},[333,912,913,915,917,919,921,923,925,928,930,932,935,937,939,942,944,946,949,951,953],{"class":335,"line":374},[333,914,660],{"class":659},[333,916,663],{"class":347},[333,918,514],{"class":343},[333,920,896],{"class":382},[333,922,385],{"class":347},[333,924,421],{"class":343},[333,926,927],{"class":424}," method",[333,929,428],{"class":343},[333,931,357],{"class":343},[333,933,934],{"class":360},"POST",[333,936,388],{"class":343},[333,938,396],{"class":343},[333,940,941],{"class":424}," path",[333,943,428],{"class":343},[333,945,357],{"class":343},[333,947,948],{"class":360},"\u002Fapi\u002Fcheckout",[333,950,388],{"class":343},[333,952,351],{"class":343},[333,954,406],{"class":347},[287,956,957,958,960,961,964,965,968],{"color":289,"icon":13},"With ",[297,959,580],{}," and ",[297,962,963],{},"createRequestLogger",", you must call ",[297,966,967],{},"log.emit()"," manually. In framework integrations, this happens automatically.",[312,970,972],{"id":971},"uselogger-retrieve-the-request-logger","useLogger (Retrieve the Request Logger)",[283,974,975,976,979],{},"When using a framework integration (Nuxt, Hono, Express, etc.), the middleware automatically creates a wide event logger on request start and emits it on response end. ",[297,977,978],{},"useLogger(event)"," retrieves that logger from the request context:",[320,981,982,1250],{},[323,983,986],{"className":325,"code":984,"filename":985,"language":328,"meta":329,"style":329},"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  const order = await processCheckout()\n  log.set({ orderId: order.id })\n\n  return { success: true, orderId: order.id }\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[297,987,988,1007,1011,1043,1061,1065,1113,1156,1160,1177,1205,1210,1242],{"__ignoreMap":329},[333,989,990,992,994,997,999,1001,1003,1005],{"class":335,"line":336},[333,991,340],{"class":339},[333,993,344],{"class":343},[333,995,996],{"class":347}," useLogger",[333,998,351],{"class":343},[333,1000,354],{"class":339},[333,1002,357],{"class":343},[333,1004,361],{"class":360},[333,1006,364],{"class":343},[333,1008,1009],{"class":335,"line":367},[333,1010,371],{"emptyLinePlaceholder":370},[333,1012,1013,1016,1019,1022,1024,1027,1030,1034,1037,1040],{"class":335,"line":374},[333,1014,1015],{"class":339},"export",[333,1017,1018],{"class":339}," default",[333,1020,1021],{"class":382}," defineEventHandler",[333,1023,385],{"class":347},[333,1025,1026],{"class":659},"async",[333,1028,1029],{"class":343}," (",[333,1031,1033],{"class":1032},"sHdIc","event",[333,1035,1036],{"class":343},")",[333,1038,1039],{"class":659}," =>",[333,1041,1042],{"class":343}," {\n",[333,1044,1045,1048,1050,1053,1055,1057,1059],{"class":335,"line":409},[333,1046,1047],{"class":659},"  const",[333,1049,348],{"class":347},[333,1051,1052],{"class":343}," =",[333,1054,996],{"class":382},[333,1056,385],{"class":424},[333,1058,1033],{"class":347},[333,1060,406],{"class":424},[333,1062,1063],{"class":335,"line":456},[333,1064,371],{"emptyLinePlaceholder":370},[333,1066,1067,1070,1072,1074,1076,1078,1081,1083,1085,1088,1090,1093,1095,1098,1100,1102,1105,1107,1109,1111],{"class":335,"line":705},[333,1068,1069],{"class":347},"  log",[333,1071,379],{"class":343},[333,1073,717],{"class":382},[333,1075,385],{"class":424},[333,1077,421],{"class":343},[333,1079,1080],{"class":424}," user",[333,1082,428],{"class":343},[333,1084,344],{"class":343},[333,1086,1087],{"class":424}," id",[333,1089,428],{"class":343},[333,1091,1092],{"class":736}," 1",[333,1094,396],{"class":343},[333,1096,1097],{"class":424}," plan",[333,1099,428],{"class":343},[333,1101,357],{"class":343},[333,1103,1104],{"class":360},"pro",[333,1106,388],{"class":343},[333,1108,351],{"class":343},[333,1110,351],{"class":343},[333,1112,406],{"class":424},[333,1114,1115,1117,1119,1121,1123,1125,1128,1130,1132,1135,1137,1140,1142,1145,1147,1150,1152,1154],{"class":335,"line":710},[333,1116,1069],{"class":347},[333,1118,379],{"class":343},[333,1120,717],{"class":382},[333,1122,385],{"class":424},[333,1124,421],{"class":343},[333,1126,1127],{"class":424}," cart",[333,1129,428],{"class":343},[333,1131,344],{"class":343},[333,1133,1134],{"class":424}," items",[333,1136,428],{"class":343},[333,1138,1139],{"class":736}," 3",[333,1141,396],{"class":343},[333,1143,1144],{"class":424}," total",[333,1146,428],{"class":343},[333,1148,1149],{"class":736}," 9999",[333,1151,351],{"class":343},[333,1153,351],{"class":343},[333,1155,406],{"class":424},[333,1157,1158],{"class":335,"line":746},[333,1159,371],{"emptyLinePlaceholder":370},[333,1161,1162,1164,1167,1169,1172,1175],{"class":335,"line":778},[333,1163,1047],{"class":659},[333,1165,1166],{"class":347}," order",[333,1168,1052],{"class":343},[333,1170,1171],{"class":339}," await",[333,1173,1174],{"class":382}," processCheckout",[333,1176,788],{"class":424},[333,1178,1180,1182,1184,1186,1188,1190,1193,1195,1197,1199,1201,1203],{"class":335,"line":1179},10,[333,1181,1069],{"class":347},[333,1183,379],{"class":343},[333,1185,717],{"class":382},[333,1187,385],{"class":424},[333,1189,421],{"class":343},[333,1191,1192],{"class":424}," orderId",[333,1194,428],{"class":343},[333,1196,1166],{"class":347},[333,1198,379],{"class":343},[333,1200,684],{"class":347},[333,1202,351],{"class":343},[333,1204,406],{"class":424},[333,1206,1208],{"class":335,"line":1207},11,[333,1209,371],{"emptyLinePlaceholder":370},[333,1211,1213,1216,1218,1221,1223,1227,1229,1231,1233,1235,1237,1239],{"class":335,"line":1212},12,[333,1214,1215],{"class":339},"  return",[333,1217,344],{"class":343},[333,1219,1220],{"class":424}," success",[333,1222,428],{"class":343},[333,1224,1226],{"class":1225},"sfNiH"," true",[333,1228,396],{"class":343},[333,1230,1192],{"class":424},[333,1232,428],{"class":343},[333,1234,1166],{"class":347},[333,1236,379],{"class":343},[333,1238,684],{"class":347},[333,1240,1241],{"class":343}," }\n",[333,1243,1245,1248],{"class":335,"line":1244},13,[333,1246,1247],{"class":343},"}",[333,1249,406],{"class":347},[323,1251,1253],{"className":486,"code":1252,"filename":792,"language":489,"meta":329,"style":329},"10:23:45.612 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 234ms\n  ├─ user: id=1 plan=pro\n  ├─ cart: items=3 total=9999\n  └─ orderId: ord_abc123\n",[297,1254,1255,1264,1280,1299],{"__ignoreMap":329},[333,1256,1257,1259,1261],{"class":335,"line":336},[333,1258,497],{"class":496},[333,1260,801],{"class":360},[333,1262,1263],{"class":347}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 234ms\n",[333,1265,1266,1268,1271,1274,1277],{"class":335,"line":367},[333,1267,809],{"class":496},[333,1269,1270],{"class":360}," user:",[333,1272,1273],{"class":360}," id=",[333,1275,1276],{"class":736},"1",[333,1278,1279],{"class":360}," plan=pro\n",[333,1281,1282,1284,1287,1290,1293,1296],{"class":335,"line":374},[333,1283,809],{"class":496},[333,1285,1286],{"class":360}," cart:",[333,1288,1289],{"class":360}," items=",[333,1291,1292],{"class":736},"3",[333,1294,1295],{"class":360}," total=",[333,1297,1298],{"class":736},"9999\n",[333,1300,1301,1303,1306],{"class":335,"line":409},[333,1302,830],{"class":496},[333,1304,1305],{"class":360}," orderId:",[333,1307,1308],{"class":360}," ord_abc123\n",[287,1310,1313,1315,1316,379],{"color":1311,"icon":1312},"success","i-lucide-check",[297,1314,299],{}," doesn't create a logger, the framework middleware already did that. It just retrieves it from the event context so you can add data with ",[297,1317,1318],{},"set()",[1320,1321,1323],"h3",{"id":1322},"when-to-use-what","When to use what",[1325,1326,1327,1350],"table",{},[1328,1329,1330],"thead",{},[1331,1332,1333,1339,1346],"tr",{},[1334,1335,1336,1337],"th",{},"Use ",[297,1338,303],{},[1334,1340,1336,1341,1343,1344],{},[297,1342,850],{}," \u002F ",[297,1345,871],{},[1334,1347,1336,1348],{},[297,1349,978],{},[1351,1352,1353,1365,1376],"tbody",{},[1331,1354,1355,1359,1362],{},[1356,1357,1358],"td",{},"Quick one-off events",[1356,1360,1361],{},"Scripts, jobs, workers, queues, HTTP without a framework",[1356,1363,1364],{},"API routes with a framework integration",[1331,1366,1367,1370,1373],{},[1356,1368,1369],{},"No context accumulation needed",[1356,1371,1372],{},"Accumulate context over an operation",[1356,1374,1375],{},"Retrieve the request-scoped logger",[1331,1377,1378,1381,1384],{},[1356,1379,1380],{},"Client-side logging",[1356,1382,1383],{},"Wide events (one log per operation)",[1356,1385,1386],{},"Access the auto-managed wide event",[1320,1388,1390],{"id":1389},"service-identification","Service Identification",[283,1392,1393],{},"In multi-service architectures, differentiate which service a log belongs to using either route-based configuration or explicit service names.",[1395,1396,1398],"h4",{"id":1397},"route-based-configuration","Route-Based Configuration",[283,1400,1401,1402,428],{},"Configure service names per route pattern in your ",[297,1403,1404],{},"nuxt.config.ts",[323,1406,1408],{"className":325,"code":1407,"filename":1404,"language":328,"meta":329,"style":329},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n\n  evlog: {\n    env: {\n      service: 'default-service',\n    },\n    routes: {\n      '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n      '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      '\u002Fapi\u002Fbooking\u002F**': { service: 'booking-service' },\n    },\n  },\n})\n",[297,1409,1410,1424,1447,1451,1460,1469,1485,1490,1499,1527,1553,1579,1583,1588],{"__ignoreMap":329},[333,1411,1412,1414,1416,1419,1421],{"class":335,"line":336},[333,1413,1015],{"class":339},[333,1415,1018],{"class":339},[333,1417,1418],{"class":382}," defineNuxtConfig",[333,1420,385],{"class":347},[333,1422,1423],{"class":343},"{\n",[333,1425,1426,1429,1431,1434,1436,1439,1441,1444],{"class":335,"line":367},[333,1427,1428],{"class":424},"  modules",[333,1430,428],{"class":343},[333,1432,1433],{"class":347}," [",[333,1435,388],{"class":343},[333,1437,1438],{"class":360},"evlog\u002Fnuxt",[333,1440,388],{"class":343},[333,1442,1443],{"class":347},"]",[333,1445,1446],{"class":343},",\n",[333,1448,1449],{"class":335,"line":374},[333,1450,371],{"emptyLinePlaceholder":370},[333,1452,1453,1456,1458],{"class":335,"line":409},[333,1454,1455],{"class":424},"  evlog",[333,1457,428],{"class":343},[333,1459,1042],{"class":343},[333,1461,1462,1465,1467],{"class":335,"line":456},[333,1463,1464],{"class":424},"    env",[333,1466,428],{"class":343},[333,1468,1042],{"class":343},[333,1470,1471,1474,1476,1478,1481,1483],{"class":335,"line":705},[333,1472,1473],{"class":424},"      service",[333,1475,428],{"class":343},[333,1477,357],{"class":343},[333,1479,1480],{"class":360},"default-service",[333,1482,388],{"class":343},[333,1484,1446],{"class":343},[333,1486,1487],{"class":335,"line":710},[333,1488,1489],{"class":343},"    },\n",[333,1491,1492,1495,1497],{"class":335,"line":746},[333,1493,1494],{"class":424},"    routes",[333,1496,428],{"class":343},[333,1498,1042],{"class":343},[333,1500,1501,1504,1507,1509,1511,1513,1515,1517,1519,1522,1524],{"class":335,"line":778},[333,1502,1503],{"class":343},"      '",[333,1505,1506],{"class":424},"\u002Fapi\u002Fauth\u002F**",[333,1508,388],{"class":343},[333,1510,428],{"class":343},[333,1512,344],{"class":343},[333,1514,635],{"class":424},[333,1516,428],{"class":343},[333,1518,357],{"class":343},[333,1520,1521],{"class":360},"auth-service",[333,1523,388],{"class":343},[333,1525,1526],{"class":343}," },\n",[333,1528,1529,1531,1534,1536,1538,1540,1542,1544,1546,1549,1551],{"class":335,"line":1179},[333,1530,1503],{"class":343},[333,1532,1533],{"class":424},"\u002Fapi\u002Fpayment\u002F**",[333,1535,388],{"class":343},[333,1537,428],{"class":343},[333,1539,344],{"class":343},[333,1541,635],{"class":424},[333,1543,428],{"class":343},[333,1545,357],{"class":343},[333,1547,1548],{"class":360},"payment-service",[333,1550,388],{"class":343},[333,1552,1526],{"class":343},[333,1554,1555,1557,1560,1562,1564,1566,1568,1570,1572,1575,1577],{"class":335,"line":1207},[333,1556,1503],{"class":343},[333,1558,1559],{"class":424},"\u002Fapi\u002Fbooking\u002F**",[333,1561,388],{"class":343},[333,1563,428],{"class":343},[333,1565,344],{"class":343},[333,1567,635],{"class":424},[333,1569,428],{"class":343},[333,1571,357],{"class":343},[333,1573,1574],{"class":360},"booking-service",[333,1576,388],{"class":343},[333,1578,1526],{"class":343},[333,1580,1581],{"class":335,"line":1212},[333,1582,1489],{"class":343},[333,1584,1585],{"class":335,"line":1244},[333,1586,1587],{"class":343},"  },\n",[333,1589,1591,1593],{"class":335,"line":1590},14,[333,1592,1247],{"class":343},[333,1594,406],{"class":347},[283,1596,1597],{},"Logs from routes matching these patterns will automatically include the configured service name:",[323,1599,1601],{"className":486,"code":1600,"filename":488,"language":489,"meta":329,"style":329},"21:57:10.442 INFO [auth-service] POST \u002Fapi\u002Fauth\u002Flogin 200 in 1ms\n  ├─ requestId: 88ced16a-bef2-4483-86cb-2b4fb677ea52\n  ├─ user: id=user_123 email=demo@example.com\n  └─ action: login\n",[297,1602,1603,1613,1623,1635],{"__ignoreMap":329},[333,1604,1605,1608,1610],{"class":335,"line":336},[333,1606,1607],{"class":496},"21:57:10.442",[333,1609,801],{"class":360},[333,1611,1612],{"class":347}," [auth-service] POST \u002Fapi\u002Fauth\u002Flogin 200 in 1ms\n",[333,1614,1615,1617,1620],{"class":335,"line":367},[333,1616,809],{"class":496},[333,1618,1619],{"class":360}," requestId:",[333,1621,1622],{"class":360}," 88ced16a-bef2-4483-86cb-2b4fb677ea52\n",[333,1624,1625,1627,1629,1632],{"class":335,"line":374},[333,1626,809],{"class":496},[333,1628,1270],{"class":360},[333,1630,1631],{"class":360}," id=user_123",[333,1633,1634],{"class":360}," email=demo@example.com\n",[333,1636,1637,1639,1642],{"class":335,"line":409},[333,1638,830],{"class":496},[333,1640,1641],{"class":360}," action:",[333,1643,1644],{"class":360}," login\n",[1395,1646,1648],{"id":1647},"explicit-service-parameter","Explicit Service Parameter",[283,1650,1651,1652,428],{},"Override the service name for specific routes using the second parameter of ",[297,1653,299],{},[323,1655,1658],{"className":325,"code":1656,"filename":1657,"language":328,"meta":329,"style":329},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler((event) => {\n  const log = useLogger(event, 'legacy-service')\n\n  log.set({ action: 'process_legacy_request' })\n\n  return { success: true }\n})\n","server\u002Fapi\u002Flegacy\u002Fprocess.post.ts",[297,1659,1660,1678,1682,1702,1727,1731,1758,1762,1776],{"__ignoreMap":329},[333,1661,1662,1664,1666,1668,1670,1672,1674,1676],{"class":335,"line":336},[333,1663,340],{"class":339},[333,1665,344],{"class":343},[333,1667,996],{"class":347},[333,1669,351],{"class":343},[333,1671,354],{"class":339},[333,1673,357],{"class":343},[333,1675,361],{"class":360},[333,1677,364],{"class":343},[333,1679,1680],{"class":335,"line":367},[333,1681,371],{"emptyLinePlaceholder":370},[333,1683,1684,1686,1688,1690,1692,1694,1696,1698,1700],{"class":335,"line":374},[333,1685,1015],{"class":339},[333,1687,1018],{"class":339},[333,1689,1021],{"class":382},[333,1691,385],{"class":347},[333,1693,385],{"class":343},[333,1695,1033],{"class":1032},[333,1697,1036],{"class":343},[333,1699,1039],{"class":659},[333,1701,1042],{"class":343},[333,1703,1704,1706,1708,1710,1712,1714,1716,1718,1720,1723,1725],{"class":335,"line":409},[333,1705,1047],{"class":659},[333,1707,348],{"class":347},[333,1709,1052],{"class":343},[333,1711,996],{"class":382},[333,1713,385],{"class":424},[333,1715,1033],{"class":347},[333,1717,396],{"class":343},[333,1719,357],{"class":343},[333,1721,1722],{"class":360},"legacy-service",[333,1724,388],{"class":343},[333,1726,406],{"class":424},[333,1728,1729],{"class":335,"line":456},[333,1730,371],{"emptyLinePlaceholder":370},[333,1732,1733,1735,1737,1739,1741,1743,1745,1747,1749,1752,1754,1756],{"class":335,"line":705},[333,1734,1069],{"class":347},[333,1736,379],{"class":343},[333,1738,717],{"class":382},[333,1740,385],{"class":424},[333,1742,421],{"class":343},[333,1744,425],{"class":424},[333,1746,428],{"class":343},[333,1748,357],{"class":343},[333,1750,1751],{"class":360},"process_legacy_request",[333,1753,388],{"class":343},[333,1755,351],{"class":343},[333,1757,406],{"class":424},[333,1759,1760],{"class":335,"line":710},[333,1761,371],{"emptyLinePlaceholder":370},[333,1763,1764,1766,1768,1770,1772,1774],{"class":335,"line":746},[333,1765,1215],{"class":339},[333,1767,344],{"class":343},[333,1769,1220],{"class":424},[333,1771,428],{"class":343},[333,1773,1226],{"class":1225},[333,1775,1241],{"class":343},[333,1777,1778,1780],{"class":335,"line":778},[333,1779,1247],{"class":343},[333,1781,406],{"class":347},[287,1783,1784,1787,1788,1790,1791,1794],{"color":289,"icon":13},[292,1785,1786],{},"Priority order:"," Explicit ",[297,1789,299],{}," parameter > Route configuration > ",[297,1792,1793],{},"env.service"," > Auto-detected from environment",[312,1796,1798],{"id":1797},"createerror-structured-errors","createError (Structured Errors)",[283,1800,1336,1801,1804],{},[297,1802,1803],{},"createError()"," to throw errors with actionable context:",[320,1806,1807,1928],{},[323,1808,1810],{"className":325,"code":1809,"filename":985,"language":328,"meta":329,"style":329},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer',\n  fix: 'Try a different payment method',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[297,1811,1812,1831,1835,1846,1862,1874,1890,1906,1922],{"__ignoreMap":329},[333,1813,1814,1816,1818,1821,1823,1825,1827,1829],{"class":335,"line":336},[333,1815,340],{"class":339},[333,1817,344],{"class":343},[333,1819,1820],{"class":347}," createError",[333,1822,351],{"class":343},[333,1824,354],{"class":339},[333,1826,357],{"class":343},[333,1828,361],{"class":360},[333,1830,364],{"class":343},[333,1832,1833],{"class":335,"line":367},[333,1834,371],{"emptyLinePlaceholder":370},[333,1836,1837,1840,1842,1844],{"class":335,"line":374},[333,1838,1839],{"class":339},"throw",[333,1841,1820],{"class":382},[333,1843,385],{"class":347},[333,1845,1423],{"class":343},[333,1847,1848,1851,1853,1855,1858,1860],{"class":335,"line":409},[333,1849,1850],{"class":424},"  message",[333,1852,428],{"class":343},[333,1854,357],{"class":343},[333,1856,1857],{"class":360},"Payment failed",[333,1859,388],{"class":343},[333,1861,1446],{"class":343},[333,1863,1864,1867,1869,1872],{"class":335,"line":456},[333,1865,1866],{"class":424},"  status",[333,1868,428],{"class":343},[333,1870,1871],{"class":736}," 402",[333,1873,1446],{"class":343},[333,1875,1876,1879,1881,1883,1886,1888],{"class":335,"line":705},[333,1877,1878],{"class":424},"  why",[333,1880,428],{"class":343},[333,1882,357],{"class":343},[333,1884,1885],{"class":360},"Card declined by issuer",[333,1887,388],{"class":343},[333,1889,1446],{"class":343},[333,1891,1892,1895,1897,1899,1902,1904],{"class":335,"line":710},[333,1893,1894],{"class":424},"  fix",[333,1896,428],{"class":343},[333,1898,357],{"class":343},[333,1900,1901],{"class":360},"Try a different payment method",[333,1903,388],{"class":343},[333,1905,1446],{"class":343},[333,1907,1908,1911,1913,1915,1918,1920],{"class":335,"line":746},[333,1909,1910],{"class":424},"  link",[333,1912,428],{"class":343},[333,1914,357],{"class":343},[333,1916,1917],{"class":360},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[333,1919,388],{"class":343},[333,1921,1446],{"class":343},[333,1923,1924,1926],{"class":335,"line":778},[333,1925,1247],{"class":343},[333,1927,406],{"class":347},[323,1929,1934],{"className":1930,"code":1931,"filename":1932,"language":1933,"meta":329,"style":329},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","Response","json",[297,1935,1936,1940,1957,1977,1990,2010,2029,2047,2052],{"__ignoreMap":329},[333,1937,1938],{"class":335,"line":336},[333,1939,1423],{"class":343},[333,1941,1942,1945,1948,1951,1953,1955],{"class":335,"line":367},[333,1943,1944],{"class":343},"  \"",[333,1946,1947],{"class":659},"statusCode",[333,1949,1950],{"class":343},"\"",[333,1952,428],{"class":343},[333,1954,1871],{"class":736},[333,1956,1446],{"class":343},[333,1958,1959,1961,1964,1966,1968,1971,1973,1975],{"class":335,"line":374},[333,1960,1944],{"class":343},[333,1962,1963],{"class":659},"message",[333,1965,1950],{"class":343},[333,1967,428],{"class":343},[333,1969,1970],{"class":343}," \"",[333,1972,1857],{"class":360},[333,1974,1950],{"class":343},[333,1976,1446],{"class":343},[333,1978,1979,1981,1984,1986,1988],{"class":335,"line":409},[333,1980,1944],{"class":343},[333,1982,1983],{"class":659},"data",[333,1985,1950],{"class":343},[333,1987,428],{"class":343},[333,1989,1042],{"class":343},[333,1991,1992,1995,1998,2000,2002,2004,2006,2008],{"class":335,"line":456},[333,1993,1994],{"class":343},"    \"",[333,1996,1997],{"class":496},"why",[333,1999,1950],{"class":343},[333,2001,428],{"class":343},[333,2003,1970],{"class":343},[333,2005,1885],{"class":360},[333,2007,1950],{"class":343},[333,2009,1446],{"class":343},[333,2011,2012,2014,2017,2019,2021,2023,2025,2027],{"class":335,"line":705},[333,2013,1994],{"class":343},[333,2015,2016],{"class":496},"fix",[333,2018,1950],{"class":343},[333,2020,428],{"class":343},[333,2022,1970],{"class":343},[333,2024,1901],{"class":360},[333,2026,1950],{"class":343},[333,2028,1446],{"class":343},[333,2030,2031,2033,2036,2038,2040,2042,2044],{"class":335,"line":710},[333,2032,1994],{"class":343},[333,2034,2035],{"class":496},"link",[333,2037,1950],{"class":343},[333,2039,428],{"class":343},[333,2041,1970],{"class":343},[333,2043,1917],{"class":360},[333,2045,2046],{"class":343},"\"\n",[333,2048,2049],{"class":335,"line":746},[333,2050,2051],{"class":343},"  }\n",[333,2053,2054],{"class":335,"line":778},[333,2055,2056],{"class":343},"}\n",[1320,2058,2060],{"id":2059},"error-fields","Error Fields",[1325,2062,2063,2076],{},[1328,2064,2065],{},[1331,2066,2067,2070,2073],{},[1334,2068,2069],{},"Field",[1334,2071,2072],{},"Required",[1334,2074,2075],{},"Description",[1351,2077,2078,2090,2103,2114,2125,2136],{},[1331,2079,2080,2084,2087],{},[1356,2081,2082],{},[297,2083,1963],{},[1356,2085,2086],{},"Yes",[1356,2088,2089],{},"What happened (user-facing)",[1331,2091,2092,2097,2100],{},[1356,2093,2094],{},[297,2095,2096],{},"status",[1356,2098,2099],{},"No",[1356,2101,2102],{},"HTTP status code (default: 500)",[1331,2104,2105,2109,2111],{},[1356,2106,2107],{},[297,2108,1997],{},[1356,2110,2099],{},[1356,2112,2113],{},"Technical reason (for debugging)",[1331,2115,2116,2120,2122],{},[1356,2117,2118],{},[297,2119,2016],{},[1356,2121,2099],{},[1356,2123,2124],{},"Actionable solution",[1331,2126,2127,2131,2133],{},[1356,2128,2129],{},[297,2130,2035],{},[1356,2132,2099],{},[1356,2134,2135],{},"Documentation URL for more info",[1331,2137,2138,2143,2145],{},[1356,2139,2140],{},[297,2141,2142],{},"cause",[1356,2144,2099],{},[1356,2146,2147],{},"Original error (if wrapping)",[1320,2149,2151],{"id":2150},"frontend-integration","Frontend Integration",[283,2153,1336,2154,2157],{},[297,2155,2156],{},"parseError()"," to extract all error fields on the client:",[323,2159,2162],{"className":325,"code":2160,"filename":2161,"language":328,"meta":329,"style":329},"import { parseError } from 'evlog'\n\nexport async function checkout(cart: Cart) {\n  try {\n    await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n  } catch (err) {\n    const error = parseError(err)\n\n    toast.add({\n      title: error.message,\n      description: error.why,\n      color: 'error',\n      actions: error.link\n        ? [{ label: 'Learn more', onClick: () => window.open(error.link) }]\n        : undefined,\n    })\n\n    if (error.fix) {\n      console.info(`Fix: ${error.fix}`)\n    }\n  }\n}\n","composables\u002FuseCheckout.ts",[297,2163,2164,2183,2187,2214,2221,2264,2282,2299,2303,2317,2332,2347,2362,2376,2432,2441,2449,2454,2472,2504,2510,2515],{"__ignoreMap":329},[333,2165,2166,2168,2170,2173,2175,2177,2179,2181],{"class":335,"line":336},[333,2167,340],{"class":339},[333,2169,344],{"class":343},[333,2171,2172],{"class":347}," parseError",[333,2174,351],{"class":343},[333,2176,354],{"class":339},[333,2178,357],{"class":343},[333,2180,361],{"class":360},[333,2182,364],{"class":343},[333,2184,2185],{"class":335,"line":367},[333,2186,371],{"emptyLinePlaceholder":370},[333,2188,2189,2191,2194,2197,2200,2202,2205,2207,2210,2212],{"class":335,"line":374},[333,2190,1015],{"class":339},[333,2192,2193],{"class":659}," async",[333,2195,2196],{"class":659}," function",[333,2198,2199],{"class":382}," checkout",[333,2201,385],{"class":343},[333,2203,2204],{"class":1032},"cart",[333,2206,428],{"class":343},[333,2208,2209],{"class":496}," Cart",[333,2211,1036],{"class":343},[333,2213,1042],{"class":343},[333,2215,2216,2219],{"class":335,"line":409},[333,2217,2218],{"class":339},"  try",[333,2220,1042],{"class":343},[333,2222,2223,2226,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2256,2258,2260,2262],{"class":335,"line":456},[333,2224,2225],{"class":339},"    await",[333,2227,2228],{"class":382}," $fetch",[333,2230,385],{"class":424},[333,2232,388],{"class":343},[333,2234,948],{"class":360},[333,2236,388],{"class":343},[333,2238,396],{"class":343},[333,2240,344],{"class":343},[333,2242,927],{"class":424},[333,2244,428],{"class":343},[333,2246,357],{"class":343},[333,2248,934],{"class":360},[333,2250,388],{"class":343},[333,2252,396],{"class":343},[333,2254,2255],{"class":424}," body",[333,2257,428],{"class":343},[333,2259,1127],{"class":347},[333,2261,351],{"class":343},[333,2263,406],{"class":424},[333,2265,2266,2269,2272,2274,2277,2280],{"class":335,"line":705},[333,2267,2268],{"class":343},"  }",[333,2270,2271],{"class":339}," catch",[333,2273,1029],{"class":424},[333,2275,2276],{"class":347},"err",[333,2278,2279],{"class":424},") ",[333,2281,1423],{"class":343},[333,2283,2284,2287,2289,2291,2293,2295,2297],{"class":335,"line":710},[333,2285,2286],{"class":659},"    const",[333,2288,440],{"class":347},[333,2290,1052],{"class":343},[333,2292,2172],{"class":382},[333,2294,385],{"class":424},[333,2296,2276],{"class":347},[333,2298,406],{"class":424},[333,2300,2301],{"class":335,"line":746},[333,2302,371],{"emptyLinePlaceholder":370},[333,2304,2305,2308,2310,2313,2315],{"class":335,"line":778},[333,2306,2307],{"class":347},"    toast",[333,2309,379],{"class":343},[333,2311,2312],{"class":382},"add",[333,2314,385],{"class":424},[333,2316,1423],{"class":343},[333,2318,2319,2322,2324,2326,2328,2330],{"class":335,"line":1179},[333,2320,2321],{"class":424},"      title",[333,2323,428],{"class":343},[333,2325,440],{"class":347},[333,2327,379],{"class":343},[333,2329,1963],{"class":347},[333,2331,1446],{"class":343},[333,2333,2334,2337,2339,2341,2343,2345],{"class":335,"line":1207},[333,2335,2336],{"class":424},"      description",[333,2338,428],{"class":343},[333,2340,440],{"class":347},[333,2342,379],{"class":343},[333,2344,1997],{"class":347},[333,2346,1446],{"class":343},[333,2348,2349,2352,2354,2356,2358,2360],{"class":335,"line":1212},[333,2350,2351],{"class":424},"      color",[333,2353,428],{"class":343},[333,2355,357],{"class":343},[333,2357,416],{"class":360},[333,2359,388],{"class":343},[333,2361,1446],{"class":343},[333,2363,2364,2367,2369,2371,2373],{"class":335,"line":1244},[333,2365,2366],{"class":424},"      actions",[333,2368,428],{"class":343},[333,2370,440],{"class":347},[333,2372,379],{"class":343},[333,2374,2375],{"class":347},"link\n",[333,2377,2378,2381,2383,2385,2388,2390,2392,2395,2397,2399,2402,2404,2407,2409,2412,2414,2417,2419,2421,2423,2425,2427,2429],{"class":335,"line":1590},[333,2379,2380],{"class":343},"        ?",[333,2382,1433],{"class":424},[333,2384,421],{"class":343},[333,2386,2387],{"class":424}," label",[333,2389,428],{"class":343},[333,2391,357],{"class":343},[333,2393,2394],{"class":360},"Learn more",[333,2396,388],{"class":343},[333,2398,396],{"class":343},[333,2400,2401],{"class":382}," onClick",[333,2403,428],{"class":343},[333,2405,2406],{"class":343}," ()",[333,2408,1039],{"class":659},[333,2410,2411],{"class":347}," window",[333,2413,379],{"class":343},[333,2415,2416],{"class":382},"open",[333,2418,385],{"class":424},[333,2420,416],{"class":347},[333,2422,379],{"class":343},[333,2424,2035],{"class":347},[333,2426,2279],{"class":424},[333,2428,1247],{"class":343},[333,2430,2431],{"class":424},"]\n",[333,2433,2435,2438],{"class":335,"line":2434},15,[333,2436,2437],{"class":343},"        :",[333,2439,2440],{"class":343}," undefined,\n",[333,2442,2444,2447],{"class":335,"line":2443},16,[333,2445,2446],{"class":343},"    }",[333,2448,406],{"class":424},[333,2450,2452],{"class":335,"line":2451},17,[333,2453,371],{"emptyLinePlaceholder":370},[333,2455,2457,2460,2462,2464,2466,2468,2470],{"class":335,"line":2456},18,[333,2458,2459],{"class":339},"    if",[333,2461,1029],{"class":424},[333,2463,416],{"class":347},[333,2465,379],{"class":343},[333,2467,2016],{"class":347},[333,2469,2279],{"class":424},[333,2471,1423],{"class":343},[333,2473,2475,2478,2480,2482,2484,2487,2490,2493,2495,2497,2499,2502],{"class":335,"line":2474},19,[333,2476,2477],{"class":347},"      console",[333,2479,379],{"class":343},[333,2481,289],{"class":382},[333,2483,385],{"class":424},[333,2485,2486],{"class":343},"`",[333,2488,2489],{"class":360},"Fix: ",[333,2491,2492],{"class":343},"${",[333,2494,416],{"class":347},[333,2496,379],{"class":343},[333,2498,2016],{"class":347},[333,2500,2501],{"class":343},"}`",[333,2503,406],{"class":424},[333,2505,2507],{"class":335,"line":2506},20,[333,2508,2509],{"class":343},"    }\n",[333,2511,2513],{"class":335,"line":2512},21,[333,2514,2051],{"class":343},[333,2516,2518],{"class":335,"line":2517},22,[333,2519,2056],{"class":343},[312,2521,2523],{"id":2522},"log-client-side","log (Client-Side)",[283,2525,2526,2527,2529],{},"The same ",[297,2528,303],{}," API works on the client side, outputting to the browser console:",[320,2531,2532,2760],{},[323,2533,2538],{"className":2534,"code":2535,"filename":2536,"language":2537,"meta":329,"style":329},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nasync function handleCheckout() {\n  log.info('checkout', 'User initiated checkout')\n\n  try {\n    await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST' })\n    log.info({ action: 'checkout', status: 'success' })\n  } catch (err) {\n    log.error({ action: 'checkout', error: 'failed' })\n  }\n}\n\u003C\u002Fscript>\n","components\u002FCheckoutButton.vue","vue",[297,2539,2540,2566,2580,2608,2612,2618,2650,2690,2704,2743,2747,2751],{"__ignoreMap":329},[333,2541,2542,2545,2548,2551,2554,2556,2558,2561,2563],{"class":335,"line":336},[333,2543,2544],{"class":343},"\u003C",[333,2546,2547],{"class":424},"script",[333,2549,2550],{"class":659}," setup",[333,2552,2553],{"class":659}," lang",[333,2555,514],{"class":343},[333,2557,1950],{"class":343},[333,2559,2560],{"class":360},"ts",[333,2562,1950],{"class":343},[333,2564,2565],{"class":343},">\n",[333,2567,2568,2570,2572,2575,2578],{"class":335,"line":367},[333,2569,1026],{"class":659},[333,2571,2196],{"class":659},[333,2573,2574],{"class":382}," handleCheckout",[333,2576,2577],{"class":343},"()",[333,2579,1042],{"class":343},[333,2581,2582,2584,2586,2588,2590,2592,2595,2597,2599,2601,2604,2606],{"class":335,"line":374},[333,2583,1069],{"class":347},[333,2585,379],{"class":343},[333,2587,289],{"class":382},[333,2589,385],{"class":424},[333,2591,388],{"class":343},[333,2593,2594],{"class":360},"checkout",[333,2596,388],{"class":343},[333,2598,396],{"class":343},[333,2600,357],{"class":343},[333,2602,2603],{"class":360},"User initiated checkout",[333,2605,388],{"class":343},[333,2607,406],{"class":424},[333,2609,2610],{"class":335,"line":409},[333,2611,371],{"emptyLinePlaceholder":370},[333,2613,2614,2616],{"class":335,"line":456},[333,2615,2218],{"class":339},[333,2617,1042],{"class":343},[333,2619,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648],{"class":335,"line":705},[333,2621,2225],{"class":339},[333,2623,2228],{"class":382},[333,2625,385],{"class":424},[333,2627,388],{"class":343},[333,2629,948],{"class":360},[333,2631,388],{"class":343},[333,2633,396],{"class":343},[333,2635,344],{"class":343},[333,2637,927],{"class":424},[333,2639,428],{"class":343},[333,2641,357],{"class":343},[333,2643,934],{"class":360},[333,2645,388],{"class":343},[333,2647,351],{"class":343},[333,2649,406],{"class":424},[333,2651,2652,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2678,2680,2682,2684,2686,2688],{"class":335,"line":710},[333,2653,2654],{"class":347},"    log",[333,2656,379],{"class":343},[333,2658,289],{"class":382},[333,2660,385],{"class":424},[333,2662,421],{"class":343},[333,2664,425],{"class":424},[333,2666,428],{"class":343},[333,2668,357],{"class":343},[333,2670,2594],{"class":360},[333,2672,388],{"class":343},[333,2674,396],{"class":343},[333,2676,2677],{"class":424}," status",[333,2679,428],{"class":343},[333,2681,357],{"class":343},[333,2683,1311],{"class":360},[333,2685,388],{"class":343},[333,2687,351],{"class":343},[333,2689,406],{"class":424},[333,2691,2692,2694,2696,2698,2700,2702],{"class":335,"line":746},[333,2693,2268],{"class":343},[333,2695,2271],{"class":339},[333,2697,1029],{"class":424},[333,2699,2276],{"class":347},[333,2701,2279],{"class":424},[333,2703,1423],{"class":343},[333,2705,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2737,2739,2741],{"class":335,"line":778},[333,2707,2654],{"class":347},[333,2709,379],{"class":343},[333,2711,416],{"class":382},[333,2713,385],{"class":424},[333,2715,421],{"class":343},[333,2717,425],{"class":424},[333,2719,428],{"class":343},[333,2721,357],{"class":343},[333,2723,2594],{"class":360},[333,2725,388],{"class":343},[333,2727,396],{"class":343},[333,2729,440],{"class":424},[333,2731,428],{"class":343},[333,2733,357],{"class":343},[333,2735,2736],{"class":360},"failed",[333,2738,388],{"class":343},[333,2740,351],{"class":343},[333,2742,406],{"class":424},[333,2744,2745],{"class":335,"line":1179},[333,2746,2051],{"class":343},[333,2748,2749],{"class":335,"line":1207},[333,2750,2056],{"class":343},[333,2752,2753,2756,2758],{"class":335,"line":1212},[333,2754,2755],{"class":343},"\u003C\u002F",[333,2757,2547],{"class":424},[333,2759,2565],{"class":343},[323,2761,2764],{"className":325,"code":2762,"filename":2763,"language":328,"meta":329,"style":329},"export function useAnalytics() {\n  function trackEvent(event: string, data?: Record\u003Cstring, unknown>) {\n    log.info('analytics', `Event: ${event}`)\n    if (data) {\n      log.debug({ event, ...data })\n    }\n  }\n\n  return { trackEvent }\n}\n","composables\u002FuseAnalytics.ts",[297,2765,2766,2779,2822,2855,2867,2895,2899,2903,2907,2917],{"__ignoreMap":329},[333,2767,2768,2770,2772,2775,2777],{"class":335,"line":336},[333,2769,1015],{"class":339},[333,2771,2196],{"class":659},[333,2773,2774],{"class":382}," useAnalytics",[333,2776,2577],{"class":343},[333,2778,1042],{"class":343},[333,2780,2781,2784,2787,2789,2791,2793,2796,2798,2801,2804,2807,2809,2812,2814,2817,2820],{"class":335,"line":367},[333,2782,2783],{"class":659},"  function",[333,2785,2786],{"class":382}," trackEvent",[333,2788,385],{"class":343},[333,2790,1033],{"class":1032},[333,2792,428],{"class":343},[333,2794,2795],{"class":496}," string",[333,2797,396],{"class":343},[333,2799,2800],{"class":1032}," data",[333,2802,2803],{"class":343},"?:",[333,2805,2806],{"class":496}," Record",[333,2808,2544],{"class":343},[333,2810,2811],{"class":496},"string",[333,2813,396],{"class":343},[333,2815,2816],{"class":496}," unknown",[333,2818,2819],{"class":343},">)",[333,2821,1042],{"class":343},[333,2823,2824,2826,2828,2830,2832,2834,2837,2839,2841,2844,2847,2849,2851,2853],{"class":335,"line":374},[333,2825,2654],{"class":347},[333,2827,379],{"class":343},[333,2829,289],{"class":382},[333,2831,385],{"class":424},[333,2833,388],{"class":343},[333,2835,2836],{"class":360},"analytics",[333,2838,388],{"class":343},[333,2840,396],{"class":343},[333,2842,2843],{"class":343}," `",[333,2845,2846],{"class":360},"Event: ",[333,2848,2492],{"class":343},[333,2850,1033],{"class":347},[333,2852,2501],{"class":343},[333,2854,406],{"class":424},[333,2856,2857,2859,2861,2863,2865],{"class":335,"line":409},[333,2858,2459],{"class":339},[333,2860,1029],{"class":424},[333,2862,1983],{"class":347},[333,2864,2279],{"class":424},[333,2866,1423],{"class":343},[333,2868,2869,2872,2874,2877,2879,2881,2884,2886,2889,2891,2893],{"class":335,"line":456},[333,2870,2871],{"class":347},"      log",[333,2873,379],{"class":343},[333,2875,2876],{"class":382},"debug",[333,2878,385],{"class":424},[333,2880,421],{"class":343},[333,2882,2883],{"class":347}," event",[333,2885,396],{"class":343},[333,2887,2888],{"class":343}," ...",[333,2890,1983],{"class":347},[333,2892,351],{"class":343},[333,2894,406],{"class":424},[333,2896,2897],{"class":335,"line":705},[333,2898,2509],{"class":343},[333,2900,2901],{"class":335,"line":710},[333,2902,2051],{"class":343},[333,2904,2905],{"class":335,"line":746},[333,2906,371],{"emptyLinePlaceholder":370},[333,2908,2909,2911,2913,2915],{"class":335,"line":778},[333,2910,1215],{"class":339},[333,2912,344],{"class":343},[333,2914,2786],{"class":347},[333,2916,1241],{"class":343},[333,2918,2919],{"class":335,"line":1179},[333,2920,2056],{"class":343},[287,2922,2923,2924,2926],{"color":560,"icon":561},"See ",[564,2925,56],{"href":57}," for transport configuration, identity context, and browser drain setup.",[312,2928,2930],{"id":2929},"next-steps","Next Steps",[536,2932,2933,2939,2944,2949,2954],{},[539,2934,2935,2938],{},[564,2936,2937],{"href":37},"Logging Overview",": Understand all three logging modes",[539,2940,2941,2943],{},[564,2942,46],{"href":47},": Learn how to design effective wide events",[539,2945,2946,2948],{},[564,2947,86],{"href":87},": Add compile-time type safety to your wide events",[539,2950,2951,2953],{},[564,2952,51],{"href":52},": Master error handling with evlog",[539,2955,2956,2958],{},[564,2957,91],{"href":92},": Security guidelines and production tips",[2960,2961,2962],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":329,"searchDepth":367,"depth":367,"links":2964},[2965,2966,2967,2971,2975,2976],{"id":314,"depth":367,"text":315},{"id":569,"depth":367,"text":570},{"id":971,"depth":367,"text":972,"children":2968},[2969,2970],{"id":1322,"depth":374,"text":1323},{"id":1389,"depth":374,"text":1390},{"id":1797,"depth":367,"text":1798,"children":2972},[2973,2974],{"id":2059,"depth":374,"text":2060},{"id":2150,"depth":374,"text":2151},{"id":2522,"depth":367,"text":2523},{"id":2929,"depth":367,"text":2930},"Get up and running with evlog in minutes. Learn the log API, createLogger for wide events, useLogger for requests, and structured errors.","md",[2980,2982],{"label":2937,"icon":39,"to":37,"color":560,"variant":2981},"subtle",{"label":51,"icon":54,"to":52,"color":560,"variant":2981},{},{"icon":23},{"title":20,"description":2977},"9q6ULDDze6TcLT7b_CDZWqMhEY0IWP8PJSkccTA7aps",[2988,2990],{"title":15,"path":16,"stem":17,"description":2989,"icon":18,"children":-1},"Install evlog in your TypeScript project. Supports Nuxt, Next.js, SvelteKit, Hono, Express, Fastify, Elysia, NestJS, and standalone scripts.",{"title":25,"path":26,"stem":27,"description":2991,"icon":28,"children":-1},"AI-assisted code review and evlog adoption using Agent Skills. Let AI review your logging patterns and guide migration to wide events.",1775289530861]