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