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