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