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