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