[{"data":1,"prerenderedAt":3006},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":277,"-getting-started-quick-start-surround":3001},[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":2991,"extension":2992,"links":2993,"meta":2997,"navigation":2998,"path":21,"seo":2999,"stem":22,"__hash__":3000},"docs\u002F1.getting-started\u002F3.quick-start.md",{"type":280,"value":281,"toc":2977},"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,2163,2167,2172,2534,2538,2544,2935,2941,2945,2973],[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,2148],{},[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)",[1331,2149,2150,2155,2157],{},[1356,2151,2152],{},[297,2153,2154],{},"internal",[1356,2156,2099],{},[1356,2158,2159,2160],{},"Backend-only fields for logs and wide events — never included in HTTP JSON or ",[297,2161,2162],{},"parseError()",[1320,2164,2166],{"id":2165},"frontend-integration","Frontend Integration",[283,2168,1336,2169,2171],{},[297,2170,2162],{}," to extract all error fields on the client:",[323,2173,2176],{"className":325,"code":2174,"filename":2175,"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,2177,2178,2197,2201,2228,2235,2278,2296,2313,2317,2331,2346,2361,2376,2390,2446,2455,2463,2468,2486,2518,2524,2529],{"__ignoreMap":329},[333,2179,2180,2182,2184,2187,2189,2191,2193,2195],{"class":335,"line":336},[333,2181,340],{"class":339},[333,2183,344],{"class":343},[333,2185,2186],{"class":347}," parseError",[333,2188,351],{"class":343},[333,2190,354],{"class":339},[333,2192,357],{"class":343},[333,2194,361],{"class":360},[333,2196,364],{"class":343},[333,2198,2199],{"class":335,"line":367},[333,2200,371],{"emptyLinePlaceholder":370},[333,2202,2203,2205,2208,2211,2214,2216,2219,2221,2224,2226],{"class":335,"line":374},[333,2204,1015],{"class":339},[333,2206,2207],{"class":659}," async",[333,2209,2210],{"class":659}," function",[333,2212,2213],{"class":382}," checkout",[333,2215,385],{"class":343},[333,2217,2218],{"class":1032},"cart",[333,2220,428],{"class":343},[333,2222,2223],{"class":496}," Cart",[333,2225,1036],{"class":343},[333,2227,1042],{"class":343},[333,2229,2230,2233],{"class":335,"line":409},[333,2231,2232],{"class":339},"  try",[333,2234,1042],{"class":343},[333,2236,2237,2240,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2270,2272,2274,2276],{"class":335,"line":456},[333,2238,2239],{"class":339},"    await",[333,2241,2242],{"class":382}," $fetch",[333,2244,385],{"class":424},[333,2246,388],{"class":343},[333,2248,948],{"class":360},[333,2250,388],{"class":343},[333,2252,396],{"class":343},[333,2254,344],{"class":343},[333,2256,927],{"class":424},[333,2258,428],{"class":343},[333,2260,357],{"class":343},[333,2262,934],{"class":360},[333,2264,388],{"class":343},[333,2266,396],{"class":343},[333,2268,2269],{"class":424}," body",[333,2271,428],{"class":343},[333,2273,1127],{"class":347},[333,2275,351],{"class":343},[333,2277,406],{"class":424},[333,2279,2280,2283,2286,2288,2291,2294],{"class":335,"line":705},[333,2281,2282],{"class":343},"  }",[333,2284,2285],{"class":339}," catch",[333,2287,1029],{"class":424},[333,2289,2290],{"class":347},"err",[333,2292,2293],{"class":424},") ",[333,2295,1423],{"class":343},[333,2297,2298,2301,2303,2305,2307,2309,2311],{"class":335,"line":710},[333,2299,2300],{"class":659},"    const",[333,2302,440],{"class":347},[333,2304,1052],{"class":343},[333,2306,2186],{"class":382},[333,2308,385],{"class":424},[333,2310,2290],{"class":347},[333,2312,406],{"class":424},[333,2314,2315],{"class":335,"line":746},[333,2316,371],{"emptyLinePlaceholder":370},[333,2318,2319,2322,2324,2327,2329],{"class":335,"line":778},[333,2320,2321],{"class":347},"    toast",[333,2323,379],{"class":343},[333,2325,2326],{"class":382},"add",[333,2328,385],{"class":424},[333,2330,1423],{"class":343},[333,2332,2333,2336,2338,2340,2342,2344],{"class":335,"line":1179},[333,2334,2335],{"class":424},"      title",[333,2337,428],{"class":343},[333,2339,440],{"class":347},[333,2341,379],{"class":343},[333,2343,1963],{"class":347},[333,2345,1446],{"class":343},[333,2347,2348,2351,2353,2355,2357,2359],{"class":335,"line":1207},[333,2349,2350],{"class":424},"      description",[333,2352,428],{"class":343},[333,2354,440],{"class":347},[333,2356,379],{"class":343},[333,2358,1997],{"class":347},[333,2360,1446],{"class":343},[333,2362,2363,2366,2368,2370,2372,2374],{"class":335,"line":1212},[333,2364,2365],{"class":424},"      color",[333,2367,428],{"class":343},[333,2369,357],{"class":343},[333,2371,416],{"class":360},[333,2373,388],{"class":343},[333,2375,1446],{"class":343},[333,2377,2378,2381,2383,2385,2387],{"class":335,"line":1244},[333,2379,2380],{"class":424},"      actions",[333,2382,428],{"class":343},[333,2384,440],{"class":347},[333,2386,379],{"class":343},[333,2388,2389],{"class":347},"link\n",[333,2391,2392,2395,2397,2399,2402,2404,2406,2409,2411,2413,2416,2418,2421,2423,2426,2428,2431,2433,2435,2437,2439,2441,2443],{"class":335,"line":1590},[333,2393,2394],{"class":343},"        ?",[333,2396,1433],{"class":424},[333,2398,421],{"class":343},[333,2400,2401],{"class":424}," label",[333,2403,428],{"class":343},[333,2405,357],{"class":343},[333,2407,2408],{"class":360},"Learn more",[333,2410,388],{"class":343},[333,2412,396],{"class":343},[333,2414,2415],{"class":382}," onClick",[333,2417,428],{"class":343},[333,2419,2420],{"class":343}," ()",[333,2422,1039],{"class":659},[333,2424,2425],{"class":347}," window",[333,2427,379],{"class":343},[333,2429,2430],{"class":382},"open",[333,2432,385],{"class":424},[333,2434,416],{"class":347},[333,2436,379],{"class":343},[333,2438,2035],{"class":347},[333,2440,2293],{"class":424},[333,2442,1247],{"class":343},[333,2444,2445],{"class":424},"]\n",[333,2447,2449,2452],{"class":335,"line":2448},15,[333,2450,2451],{"class":343},"        :",[333,2453,2454],{"class":343}," undefined,\n",[333,2456,2458,2461],{"class":335,"line":2457},16,[333,2459,2460],{"class":343},"    }",[333,2462,406],{"class":424},[333,2464,2466],{"class":335,"line":2465},17,[333,2467,371],{"emptyLinePlaceholder":370},[333,2469,2471,2474,2476,2478,2480,2482,2484],{"class":335,"line":2470},18,[333,2472,2473],{"class":339},"    if",[333,2475,1029],{"class":424},[333,2477,416],{"class":347},[333,2479,379],{"class":343},[333,2481,2016],{"class":347},[333,2483,2293],{"class":424},[333,2485,1423],{"class":343},[333,2487,2489,2492,2494,2496,2498,2501,2504,2507,2509,2511,2513,2516],{"class":335,"line":2488},19,[333,2490,2491],{"class":347},"      console",[333,2493,379],{"class":343},[333,2495,289],{"class":382},[333,2497,385],{"class":424},[333,2499,2500],{"class":343},"`",[333,2502,2503],{"class":360},"Fix: ",[333,2505,2506],{"class":343},"${",[333,2508,416],{"class":347},[333,2510,379],{"class":343},[333,2512,2016],{"class":347},[333,2514,2515],{"class":343},"}`",[333,2517,406],{"class":424},[333,2519,2521],{"class":335,"line":2520},20,[333,2522,2523],{"class":343},"    }\n",[333,2525,2527],{"class":335,"line":2526},21,[333,2528,2051],{"class":343},[333,2530,2532],{"class":335,"line":2531},22,[333,2533,2056],{"class":343},[312,2535,2537],{"id":2536},"log-client-side","log (Client-Side)",[283,2539,2540,2541,2543],{},"The same ",[297,2542,303],{}," API works on the client side, outputting to the browser console:",[320,2545,2546,2774],{},[323,2547,2552],{"className":2548,"code":2549,"filename":2550,"language":2551,"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,2553,2554,2580,2594,2622,2626,2632,2664,2704,2718,2757,2761,2765],{"__ignoreMap":329},[333,2555,2556,2559,2562,2565,2568,2570,2572,2575,2577],{"class":335,"line":336},[333,2557,2558],{"class":343},"\u003C",[333,2560,2561],{"class":424},"script",[333,2563,2564],{"class":659}," setup",[333,2566,2567],{"class":659}," lang",[333,2569,514],{"class":343},[333,2571,1950],{"class":343},[333,2573,2574],{"class":360},"ts",[333,2576,1950],{"class":343},[333,2578,2579],{"class":343},">\n",[333,2581,2582,2584,2586,2589,2592],{"class":335,"line":367},[333,2583,1026],{"class":659},[333,2585,2210],{"class":659},[333,2587,2588],{"class":382}," handleCheckout",[333,2590,2591],{"class":343},"()",[333,2593,1042],{"class":343},[333,2595,2596,2598,2600,2602,2604,2606,2609,2611,2613,2615,2618,2620],{"class":335,"line":374},[333,2597,1069],{"class":347},[333,2599,379],{"class":343},[333,2601,289],{"class":382},[333,2603,385],{"class":424},[333,2605,388],{"class":343},[333,2607,2608],{"class":360},"checkout",[333,2610,388],{"class":343},[333,2612,396],{"class":343},[333,2614,357],{"class":343},[333,2616,2617],{"class":360},"User initiated checkout",[333,2619,388],{"class":343},[333,2621,406],{"class":424},[333,2623,2624],{"class":335,"line":409},[333,2625,371],{"emptyLinePlaceholder":370},[333,2627,2628,2630],{"class":335,"line":456},[333,2629,2232],{"class":339},[333,2631,1042],{"class":343},[333,2633,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662],{"class":335,"line":705},[333,2635,2239],{"class":339},[333,2637,2242],{"class":382},[333,2639,385],{"class":424},[333,2641,388],{"class":343},[333,2643,948],{"class":360},[333,2645,388],{"class":343},[333,2647,396],{"class":343},[333,2649,344],{"class":343},[333,2651,927],{"class":424},[333,2653,428],{"class":343},[333,2655,357],{"class":343},[333,2657,934],{"class":360},[333,2659,388],{"class":343},[333,2661,351],{"class":343},[333,2663,406],{"class":424},[333,2665,2666,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2692,2694,2696,2698,2700,2702],{"class":335,"line":710},[333,2667,2668],{"class":347},"    log",[333,2670,379],{"class":343},[333,2672,289],{"class":382},[333,2674,385],{"class":424},[333,2676,421],{"class":343},[333,2678,425],{"class":424},[333,2680,428],{"class":343},[333,2682,357],{"class":343},[333,2684,2608],{"class":360},[333,2686,388],{"class":343},[333,2688,396],{"class":343},[333,2690,2691],{"class":424}," status",[333,2693,428],{"class":343},[333,2695,357],{"class":343},[333,2697,1311],{"class":360},[333,2699,388],{"class":343},[333,2701,351],{"class":343},[333,2703,406],{"class":424},[333,2705,2706,2708,2710,2712,2714,2716],{"class":335,"line":746},[333,2707,2282],{"class":343},[333,2709,2285],{"class":339},[333,2711,1029],{"class":424},[333,2713,2290],{"class":347},[333,2715,2293],{"class":424},[333,2717,1423],{"class":343},[333,2719,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2751,2753,2755],{"class":335,"line":778},[333,2721,2668],{"class":347},[333,2723,379],{"class":343},[333,2725,416],{"class":382},[333,2727,385],{"class":424},[333,2729,421],{"class":343},[333,2731,425],{"class":424},[333,2733,428],{"class":343},[333,2735,357],{"class":343},[333,2737,2608],{"class":360},[333,2739,388],{"class":343},[333,2741,396],{"class":343},[333,2743,440],{"class":424},[333,2745,428],{"class":343},[333,2747,357],{"class":343},[333,2749,2750],{"class":360},"failed",[333,2752,388],{"class":343},[333,2754,351],{"class":343},[333,2756,406],{"class":424},[333,2758,2759],{"class":335,"line":1179},[333,2760,2051],{"class":343},[333,2762,2763],{"class":335,"line":1207},[333,2764,2056],{"class":343},[333,2766,2767,2770,2772],{"class":335,"line":1212},[333,2768,2769],{"class":343},"\u003C\u002F",[333,2771,2561],{"class":424},[333,2773,2579],{"class":343},[323,2775,2778],{"className":325,"code":2776,"filename":2777,"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,2779,2780,2793,2836,2869,2881,2909,2913,2917,2921,2931],{"__ignoreMap":329},[333,2781,2782,2784,2786,2789,2791],{"class":335,"line":336},[333,2783,1015],{"class":339},[333,2785,2210],{"class":659},[333,2787,2788],{"class":382}," useAnalytics",[333,2790,2591],{"class":343},[333,2792,1042],{"class":343},[333,2794,2795,2798,2801,2803,2805,2807,2810,2812,2815,2818,2821,2823,2826,2828,2831,2834],{"class":335,"line":367},[333,2796,2797],{"class":659},"  function",[333,2799,2800],{"class":382}," trackEvent",[333,2802,385],{"class":343},[333,2804,1033],{"class":1032},[333,2806,428],{"class":343},[333,2808,2809],{"class":496}," string",[333,2811,396],{"class":343},[333,2813,2814],{"class":1032}," data",[333,2816,2817],{"class":343},"?:",[333,2819,2820],{"class":496}," Record",[333,2822,2558],{"class":343},[333,2824,2825],{"class":496},"string",[333,2827,396],{"class":343},[333,2829,2830],{"class":496}," unknown",[333,2832,2833],{"class":343},">)",[333,2835,1042],{"class":343},[333,2837,2838,2840,2842,2844,2846,2848,2851,2853,2855,2858,2861,2863,2865,2867],{"class":335,"line":374},[333,2839,2668],{"class":347},[333,2841,379],{"class":343},[333,2843,289],{"class":382},[333,2845,385],{"class":424},[333,2847,388],{"class":343},[333,2849,2850],{"class":360},"analytics",[333,2852,388],{"class":343},[333,2854,396],{"class":343},[333,2856,2857],{"class":343}," `",[333,2859,2860],{"class":360},"Event: ",[333,2862,2506],{"class":343},[333,2864,1033],{"class":347},[333,2866,2515],{"class":343},[333,2868,406],{"class":424},[333,2870,2871,2873,2875,2877,2879],{"class":335,"line":409},[333,2872,2473],{"class":339},[333,2874,1029],{"class":424},[333,2876,1983],{"class":347},[333,2878,2293],{"class":424},[333,2880,1423],{"class":343},[333,2882,2883,2886,2888,2891,2893,2895,2898,2900,2903,2905,2907],{"class":335,"line":456},[333,2884,2885],{"class":347},"      log",[333,2887,379],{"class":343},[333,2889,2890],{"class":382},"debug",[333,2892,385],{"class":424},[333,2894,421],{"class":343},[333,2896,2897],{"class":347}," event",[333,2899,396],{"class":343},[333,2901,2902],{"class":343}," ...",[333,2904,1983],{"class":347},[333,2906,351],{"class":343},[333,2908,406],{"class":424},[333,2910,2911],{"class":335,"line":705},[333,2912,2523],{"class":343},[333,2914,2915],{"class":335,"line":710},[333,2916,2051],{"class":343},[333,2918,2919],{"class":335,"line":746},[333,2920,371],{"emptyLinePlaceholder":370},[333,2922,2923,2925,2927,2929],{"class":335,"line":778},[333,2924,1215],{"class":339},[333,2926,344],{"class":343},[333,2928,2800],{"class":347},[333,2930,1241],{"class":343},[333,2932,2933],{"class":335,"line":1179},[333,2934,2056],{"class":343},[287,2936,2937,2938,2940],{"color":560,"icon":561},"See ",[564,2939,56],{"href":57}," for transport configuration, identity context, and browser drain setup.",[312,2942,2944],{"id":2943},"next-steps","Next Steps",[536,2946,2947,2953,2958,2963,2968],{},[539,2948,2949,2952],{},[564,2950,2951],{"href":37},"Logging Overview",": Understand all three logging modes",[539,2954,2955,2957],{},[564,2956,46],{"href":47},": Learn how to design effective wide events",[539,2959,2960,2962],{},[564,2961,86],{"href":87},": Add compile-time type safety to your wide events",[539,2964,2965,2967],{},[564,2966,51],{"href":52},": Master error handling with evlog",[539,2969,2970,2972],{},[564,2971,91],{"href":92},": Security guidelines and production tips",[2974,2975,2976],"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":2978},[2979,2980,2981,2985,2989,2990],{"id":314,"depth":367,"text":315},{"id":569,"depth":367,"text":570},{"id":971,"depth":367,"text":972,"children":2982},[2983,2984],{"id":1322,"depth":374,"text":1323},{"id":1389,"depth":374,"text":1390},{"id":1797,"depth":367,"text":1798,"children":2986},[2987,2988],{"id":2059,"depth":374,"text":2060},{"id":2165,"depth":374,"text":2166},{"id":2536,"depth":367,"text":2537},{"id":2943,"depth":367,"text":2944},"Get up and running with evlog in minutes. Learn the log API, createLogger for wide events, useLogger for requests, and structured errors.","md",[2994,2996],{"label":2951,"icon":39,"to":37,"color":560,"variant":2995},"subtle",{"label":51,"icon":54,"to":52,"color":560,"variant":2995},{},{"icon":23},{"title":20,"description":2991},"nSKePPMhwkymFB3ojIEHJfZoPLd1HIJfUZFEpzFTetE",[3002,3004],{"title":15,"path":16,"stem":17,"description":3003,"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":3005,"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.",1775317214541]