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