[{"data":1,"prerenderedAt":2763},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":75,"-getting-started-quick-start-surround":2758},[4,30,50],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"children":54,"page":29},"Adapters","/adapters","3.adapters",[55,60,65,70],{"title":56,"path":57,"stem":58,"icon":59},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":61,"path":62,"stem":63,"icon":64},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":66,"path":67,"stem":68,"icon":69},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":71,"path":72,"stem":73,"icon":74},"Custom Adapters","/adapters/custom","3.adapters/4.custom","i-lucide-code",{"id":76,"title":20,"body":77,"description":2749,"extension":2750,"links":2751,"meta":2754,"navigation":2755,"path":21,"seo":2756,"stem":22,"__hash__":2757},"docs/1.getting-started/3.quick-start.md",{"type":78,"value":79,"toc":2735},"minimark",[80,84,109,114,121,499,508,513,559,563,566,571,577,770,773,821,825,830,942,955,959,965,1227,1231,1318,1322,1328,1700,1704,1707,1860,1871,1875,1881,2272,2275,2283,2289,2293,2296,2707,2711,2731],[81,82,83],"p",{},"This guide covers the core APIs you'll use most often with evlog.",[85,86,88,89,93,94,98,99,98,102,98,105,108],"callout",{"color":87,"icon":28},"info","In Nuxt, evlog ",[90,91,92],"strong",{},"auto-imports"," all functions (",[95,96,97],"code",{},"useLogger",", ",[95,100,101],{},"log",[95,103,104],{},"createError",[95,106,107],{},"parseError","). No import statements needed.",[110,111,113],"h2",{"id":112},"uselogger-server-side","useLogger (Server-Side)",[81,115,116,117,120],{},"Use ",[95,118,119],{},"useLogger(event)"," in any Nuxt/Nitro API route to get a request-scoped logger:",[122,123,124,432],"code-group",{},[125,126,132],"pre",{"className":127,"code":128,"filename":129,"language":130,"meta":131,"style":131},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineEventHandler(async (event) => {\n  // Get the request-scoped logger (auto-imported in Nuxt)\n  const log = useLogger(event)\n\n  // Accumulate context throughout the request\n  log.set({ user: { id: 1, plan: 'pro' } })\n  log.set({ cart: { items: 3, total: 9999 } })\n\n  // Process checkout...\n  const order = await processCheckout()\n  log.set({ orderId: order.id })\n\n  // Logger auto-emits when request ends - nothing else to do!\n  return { success: true, orderId: order.id }\n})\n","server/api/checkout.post.ts","typescript","",[95,133,134,175,182,205,212,218,278,322,327,333,352,381,386,392,424],{"__ignoreMap":131},[135,136,139,143,146,150,154,158,162,166,169,172],"span",{"class":137,"line":138},"line",1,[135,140,142],{"class":141},"s7zQu","export",[135,144,145],{"class":141}," default",[135,147,149],{"class":148},"s2Zo4"," defineEventHandler",[135,151,153],{"class":152},"sTEyZ","(",[135,155,157],{"class":156},"spNyl","async",[135,159,161],{"class":160},"sMK4o"," (",[135,163,165],{"class":164},"sHdIc","event",[135,167,168],{"class":160},")",[135,170,171],{"class":156}," =>",[135,173,174],{"class":160}," {\n",[135,176,178],{"class":137,"line":177},2,[135,179,181],{"class":180},"sHwdD","  // Get the request-scoped logger (auto-imported in Nuxt)\n",[135,183,185,188,191,194,197,200,202],{"class":137,"line":184},3,[135,186,187],{"class":156},"  const",[135,189,190],{"class":152}," log",[135,192,193],{"class":160}," =",[135,195,196],{"class":148}," useLogger",[135,198,153],{"class":199},"swJcz",[135,201,165],{"class":152},[135,203,204],{"class":199},")\n",[135,206,208],{"class":137,"line":207},4,[135,209,211],{"emptyLinePlaceholder":210},true,"\n",[135,213,215],{"class":137,"line":214},5,[135,216,217],{"class":180},"  // Accumulate context throughout the request\n",[135,219,221,224,227,230,232,235,238,241,244,247,249,253,256,259,261,264,268,271,274,276],{"class":137,"line":220},6,[135,222,223],{"class":152},"  log",[135,225,226],{"class":160},".",[135,228,229],{"class":148},"set",[135,231,153],{"class":199},[135,233,234],{"class":160},"{",[135,236,237],{"class":199}," user",[135,239,240],{"class":160},":",[135,242,243],{"class":160}," {",[135,245,246],{"class":199}," id",[135,248,240],{"class":160},[135,250,252],{"class":251},"sbssI"," 1",[135,254,255],{"class":160},",",[135,257,258],{"class":199}," plan",[135,260,240],{"class":160},[135,262,263],{"class":160}," '",[135,265,267],{"class":266},"sfazB","pro",[135,269,270],{"class":160},"'",[135,272,273],{"class":160}," }",[135,275,273],{"class":160},[135,277,204],{"class":199},[135,279,281,283,285,287,289,291,294,296,298,301,303,306,308,311,313,316,318,320],{"class":137,"line":280},7,[135,282,223],{"class":152},[135,284,226],{"class":160},[135,286,229],{"class":148},[135,288,153],{"class":199},[135,290,234],{"class":160},[135,292,293],{"class":199}," cart",[135,295,240],{"class":160},[135,297,243],{"class":160},[135,299,300],{"class":199}," items",[135,302,240],{"class":160},[135,304,305],{"class":251}," 3",[135,307,255],{"class":160},[135,309,310],{"class":199}," total",[135,312,240],{"class":160},[135,314,315],{"class":251}," 9999",[135,317,273],{"class":160},[135,319,273],{"class":160},[135,321,204],{"class":199},[135,323,325],{"class":137,"line":324},8,[135,326,211],{"emptyLinePlaceholder":210},[135,328,330],{"class":137,"line":329},9,[135,331,332],{"class":180},"  // Process checkout...\n",[135,334,336,338,341,343,346,349],{"class":137,"line":335},10,[135,337,187],{"class":156},[135,339,340],{"class":152}," order",[135,342,193],{"class":160},[135,344,345],{"class":141}," await",[135,347,348],{"class":148}," processCheckout",[135,350,351],{"class":199},"()\n",[135,353,355,357,359,361,363,365,368,370,372,374,377,379],{"class":137,"line":354},11,[135,356,223],{"class":152},[135,358,226],{"class":160},[135,360,229],{"class":148},[135,362,153],{"class":199},[135,364,234],{"class":160},[135,366,367],{"class":199}," orderId",[135,369,240],{"class":160},[135,371,340],{"class":152},[135,373,226],{"class":160},[135,375,376],{"class":152},"id",[135,378,273],{"class":160},[135,380,204],{"class":199},[135,382,384],{"class":137,"line":383},12,[135,385,211],{"emptyLinePlaceholder":210},[135,387,389],{"class":137,"line":388},13,[135,390,391],{"class":180},"  // Logger auto-emits when request ends - nothing else to do!\n",[135,393,395,398,400,403,405,409,411,413,415,417,419,421],{"class":137,"line":394},14,[135,396,397],{"class":141},"  return",[135,399,243],{"class":160},[135,401,402],{"class":199}," success",[135,404,240],{"class":160},[135,406,408],{"class":407},"sfNiH"," true",[135,410,255],{"class":160},[135,412,367],{"class":199},[135,414,240],{"class":160},[135,416,340],{"class":152},[135,418,226],{"class":160},[135,420,376],{"class":152},[135,422,423],{"class":160}," }\n",[135,425,427,430],{"class":137,"line":426},15,[135,428,429],{"class":160},"}",[135,431,204],{"class":152},[125,433,438],{"className":434,"code":435,"filename":436,"language":437,"meta":131,"style":131},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","10:23:45.612 INFO [my-app] POST /api/checkout 200 in 234ms\n  ├─ user: id=1 plan=pro\n  ├─ cart: items=3 total=9999\n  └─ orderId: ord_abc123\n","Output (Pretty)","bash",[95,439,440,452,469,488],{"__ignoreMap":131},[135,441,442,446,449],{"class":137,"line":138},[135,443,445],{"class":444},"sBMFI","10:23:45.612",[135,447,448],{"class":266}," INFO",[135,450,451],{"class":152}," [my-app] POST /api/checkout 200 in 234ms\n",[135,453,454,457,460,463,466],{"class":137,"line":177},[135,455,456],{"class":444},"  ├─",[135,458,459],{"class":266}," user:",[135,461,462],{"class":266}," id=",[135,464,465],{"class":251},"1",[135,467,468],{"class":266}," plan=pro\n",[135,470,471,473,476,479,482,485],{"class":137,"line":184},[135,472,456],{"class":444},[135,474,475],{"class":266}," cart:",[135,477,478],{"class":266}," items=",[135,480,481],{"class":251},"3",[135,483,484],{"class":266}," total=",[135,486,487],{"class":251},"9999\n",[135,489,490,493,496],{"class":137,"line":207},[135,491,492],{"class":444},"  └─",[135,494,495],{"class":266}," orderId:",[135,497,498],{"class":266}," ord_abc123\n",[85,500,503,504,507],{"color":501,"icon":502},"success","i-lucide-check","The logger automatically emits when the request ends. No manual ",[95,505,506],{},"emit()"," call needed.",[509,510,512],"h3",{"id":511},"when-to-use-uselogger-vs-log","When to use useLogger vs log",[514,515,516,531],"table",{},[517,518,519],"thead",{},[520,521,522,527],"tr",{},[523,524,116,525],"th",{},[95,526,119],{},[523,528,116,529],{},[95,530,101],{},[532,533,534,543,551],"tbody",{},[520,535,536,540],{},[537,538,539],"td",{},"API routes, middleware, server plugins",[537,541,542],{},"One-off events outside request context",[520,544,545,548],{},[537,546,547],{},"When you need to accumulate context",[537,549,550],{},"Quick debugging messages",[520,552,553,556],{},[537,554,555],{},"For wide events (one log per request)",[537,557,558],{},"Client-side logging",[509,560,562],{"id":561},"service-identification","Service Identification",[81,564,565],{},"In multi-service architectures, differentiate which service a log belongs to using either route-based configuration or explicit service names.",[567,568,570],"h4",{"id":569},"route-based-configuration","Route-Based Configuration",[81,572,573,574,240],{},"Configure service names per route pattern in your ",[95,575,576],{},"nuxt.config.ts",[125,578,580],{"className":127,"code":579,"filename":576,"language":130,"meta":131,"style":131},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n\n  evlog: {\n    env: {\n      service: 'default-service', // Fallback service name\n    },\n    routes: {\n      '/api/auth/**': { service: 'auth-service' },\n      '/api/payment/**': { service: 'payment-service' },\n      '/api/booking/**': { service: 'booking-service' },\n    },\n  },\n})\n",[95,581,582,596,619,623,632,641,660,665,674,703,729,755,759,764],{"__ignoreMap":131},[135,583,584,586,588,591,593],{"class":137,"line":138},[135,585,142],{"class":141},[135,587,145],{"class":141},[135,589,590],{"class":148}," defineNuxtConfig",[135,592,153],{"class":152},[135,594,595],{"class":160},"{\n",[135,597,598,601,603,606,608,611,613,616],{"class":137,"line":177},[135,599,600],{"class":199},"  modules",[135,602,240],{"class":160},[135,604,605],{"class":152}," [",[135,607,270],{"class":160},[135,609,610],{"class":266},"evlog/nuxt",[135,612,270],{"class":160},[135,614,615],{"class":152},"]",[135,617,618],{"class":160},",\n",[135,620,621],{"class":137,"line":184},[135,622,211],{"emptyLinePlaceholder":210},[135,624,625,628,630],{"class":137,"line":207},[135,626,627],{"class":199},"  evlog",[135,629,240],{"class":160},[135,631,174],{"class":160},[135,633,634,637,639],{"class":137,"line":214},[135,635,636],{"class":199},"    env",[135,638,240],{"class":160},[135,640,174],{"class":160},[135,642,643,646,648,650,653,655,657],{"class":137,"line":220},[135,644,645],{"class":199},"      service",[135,647,240],{"class":160},[135,649,263],{"class":160},[135,651,652],{"class":266},"default-service",[135,654,270],{"class":160},[135,656,255],{"class":160},[135,658,659],{"class":180}," // Fallback service name\n",[135,661,662],{"class":137,"line":280},[135,663,664],{"class":160},"    },\n",[135,666,667,670,672],{"class":137,"line":324},[135,668,669],{"class":199},"    routes",[135,671,240],{"class":160},[135,673,174],{"class":160},[135,675,676,679,682,684,686,688,691,693,695,698,700],{"class":137,"line":329},[135,677,678],{"class":160},"      '",[135,680,681],{"class":199},"/api/auth/**",[135,683,270],{"class":160},[135,685,240],{"class":160},[135,687,243],{"class":160},[135,689,690],{"class":199}," service",[135,692,240],{"class":160},[135,694,263],{"class":160},[135,696,697],{"class":266},"auth-service",[135,699,270],{"class":160},[135,701,702],{"class":160}," },\n",[135,704,705,707,710,712,714,716,718,720,722,725,727],{"class":137,"line":335},[135,706,678],{"class":160},[135,708,709],{"class":199},"/api/payment/**",[135,711,270],{"class":160},[135,713,240],{"class":160},[135,715,243],{"class":160},[135,717,690],{"class":199},[135,719,240],{"class":160},[135,721,263],{"class":160},[135,723,724],{"class":266},"payment-service",[135,726,270],{"class":160},[135,728,702],{"class":160},[135,730,731,733,736,738,740,742,744,746,748,751,753],{"class":137,"line":354},[135,732,678],{"class":160},[135,734,735],{"class":199},"/api/booking/**",[135,737,270],{"class":160},[135,739,240],{"class":160},[135,741,243],{"class":160},[135,743,690],{"class":199},[135,745,240],{"class":160},[135,747,263],{"class":160},[135,749,750],{"class":266},"booking-service",[135,752,270],{"class":160},[135,754,702],{"class":160},[135,756,757],{"class":137,"line":383},[135,758,664],{"class":160},[135,760,761],{"class":137,"line":388},[135,762,763],{"class":160},"  },\n",[135,765,766,768],{"class":137,"line":394},[135,767,429],{"class":160},[135,769,204],{"class":152},[81,771,772],{},"Logs from routes matching these patterns will automatically include the configured service name:",[125,774,777],{"className":434,"code":775,"filename":776,"language":437,"meta":131,"style":131},"21:57:10.442 INFO [auth-service] POST /api/auth/login 200 in 1ms\n  ├─ requestId: 88ced16a-bef2-4483-86cb-2b4fb677ea52\n  ├─ user: id=user_123 email=demo@example.com\n  └─ action: login\n","Output",[95,778,779,789,799,811],{"__ignoreMap":131},[135,780,781,784,786],{"class":137,"line":138},[135,782,783],{"class":444},"21:57:10.442",[135,785,448],{"class":266},[135,787,788],{"class":152}," [auth-service] POST /api/auth/login 200 in 1ms\n",[135,790,791,793,796],{"class":137,"line":177},[135,792,456],{"class":444},[135,794,795],{"class":266}," requestId:",[135,797,798],{"class":266}," 88ced16a-bef2-4483-86cb-2b4fb677ea52\n",[135,800,801,803,805,808],{"class":137,"line":184},[135,802,456],{"class":444},[135,804,459],{"class":266},[135,806,807],{"class":266}," id=user_123",[135,809,810],{"class":266}," email=demo@example.com\n",[135,812,813,815,818],{"class":137,"line":207},[135,814,492],{"class":444},[135,816,817],{"class":266}," action:",[135,819,820],{"class":266}," login\n",[567,822,824],{"id":823},"explicit-service-parameter","Explicit Service Parameter",[81,826,827,828,240],{},"Override the service name for specific routes using the second parameter of ",[95,829,97],{},[125,831,834],{"className":127,"code":832,"filename":833,"language":130,"meta":131,"style":131},"export default defineEventHandler((event) => {\n  // 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/api/legacy/process.post.ts",[95,835,836,856,861,886,890,918,922,936],{"__ignoreMap":131},[135,837,838,840,842,844,846,848,850,852,854],{"class":137,"line":138},[135,839,142],{"class":141},[135,841,145],{"class":141},[135,843,149],{"class":148},[135,845,153],{"class":152},[135,847,153],{"class":160},[135,849,165],{"class":164},[135,851,168],{"class":160},[135,853,171],{"class":156},[135,855,174],{"class":160},[135,857,858],{"class":137,"line":177},[135,859,860],{"class":180},"  // Explicitly set service name for this handler\n",[135,862,863,865,867,869,871,873,875,877,879,882,884],{"class":137,"line":184},[135,864,187],{"class":156},[135,866,190],{"class":152},[135,868,193],{"class":160},[135,870,196],{"class":148},[135,872,153],{"class":199},[135,874,165],{"class":152},[135,876,255],{"class":160},[135,878,263],{"class":160},[135,880,881],{"class":266},"legacy-service",[135,883,270],{"class":160},[135,885,204],{"class":199},[135,887,888],{"class":137,"line":207},[135,889,211],{"emptyLinePlaceholder":210},[135,891,892,894,896,898,900,902,905,907,909,912,914,916],{"class":137,"line":214},[135,893,223],{"class":152},[135,895,226],{"class":160},[135,897,229],{"class":148},[135,899,153],{"class":199},[135,901,234],{"class":160},[135,903,904],{"class":199}," action",[135,906,240],{"class":160},[135,908,263],{"class":160},[135,910,911],{"class":266},"process_legacy_request",[135,913,270],{"class":160},[135,915,273],{"class":160},[135,917,204],{"class":199},[135,919,920],{"class":137,"line":220},[135,921,211],{"emptyLinePlaceholder":210},[135,923,924,926,928,930,932,934],{"class":137,"line":280},[135,925,397],{"class":141},[135,927,243],{"class":160},[135,929,402],{"class":199},[135,931,240],{"class":160},[135,933,408],{"class":407},[135,935,423],{"class":160},[135,937,938,940],{"class":137,"line":324},[135,939,429],{"class":160},[135,941,204],{"class":152},[85,943,944,947,948,950,951,954],{"color":87,"icon":13},[90,945,946],{},"Priority order:"," Explicit ",[95,949,97],{}," parameter > Route configuration > ",[95,952,953],{},"env.service"," > Auto-detected from environment",[110,956,958],{"id":957},"createerror-structured-errors","createError (Structured Errors)",[81,960,116,961,964],{},[95,962,963],{},"createError()"," to throw errors with actionable context:",[122,966,967,1098],{},[125,968,971],{"className":127,"code":969,"filename":970,"language":130,"meta":131,"style":131},"// server/api/checkout.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://docs.example.com/payments/declined',\n})\n","Code",[95,972,973,978,1001,1005,1016,1032,1044,1060,1076,1092],{"__ignoreMap":131},[135,974,975],{"class":137,"line":138},[135,976,977],{"class":180},"// server/api/checkout.post.ts\n",[135,979,980,983,985,988,990,993,995,998],{"class":137,"line":177},[135,981,982],{"class":141},"import",[135,984,243],{"class":160},[135,986,987],{"class":152}," createError",[135,989,273],{"class":160},[135,991,992],{"class":141}," from",[135,994,263],{"class":160},[135,996,997],{"class":266},"evlog",[135,999,1000],{"class":160},"'\n",[135,1002,1003],{"class":137,"line":184},[135,1004,211],{"emptyLinePlaceholder":210},[135,1006,1007,1010,1012,1014],{"class":137,"line":207},[135,1008,1009],{"class":141},"throw",[135,1011,987],{"class":148},[135,1013,153],{"class":152},[135,1015,595],{"class":160},[135,1017,1018,1021,1023,1025,1028,1030],{"class":137,"line":214},[135,1019,1020],{"class":199},"  message",[135,1022,240],{"class":160},[135,1024,263],{"class":160},[135,1026,1027],{"class":266},"Payment failed",[135,1029,270],{"class":160},[135,1031,618],{"class":160},[135,1033,1034,1037,1039,1042],{"class":137,"line":220},[135,1035,1036],{"class":199},"  status",[135,1038,240],{"class":160},[135,1040,1041],{"class":251}," 402",[135,1043,618],{"class":160},[135,1045,1046,1049,1051,1053,1056,1058],{"class":137,"line":280},[135,1047,1048],{"class":199},"  why",[135,1050,240],{"class":160},[135,1052,263],{"class":160},[135,1054,1055],{"class":266},"Card declined by issuer",[135,1057,270],{"class":160},[135,1059,618],{"class":160},[135,1061,1062,1065,1067,1069,1072,1074],{"class":137,"line":324},[135,1063,1064],{"class":199},"  fix",[135,1066,240],{"class":160},[135,1068,263],{"class":160},[135,1070,1071],{"class":266},"Try a different payment method",[135,1073,270],{"class":160},[135,1075,618],{"class":160},[135,1077,1078,1081,1083,1085,1088,1090],{"class":137,"line":329},[135,1079,1080],{"class":199},"  link",[135,1082,240],{"class":160},[135,1084,263],{"class":160},[135,1086,1087],{"class":266},"https://docs.example.com/payments/declined",[135,1089,270],{"class":160},[135,1091,618],{"class":160},[135,1093,1094,1096],{"class":137,"line":335},[135,1095,429],{"class":160},[135,1097,204],{"class":152},[125,1099,1104],{"className":1100,"code":1101,"filename":1102,"language":1103,"meta":131,"style":131},"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://docs.example.com/payments/declined\"\n  }\n}\n","Response","json",[95,1105,1106,1110,1127,1147,1160,1180,1199,1217,1222],{"__ignoreMap":131},[135,1107,1108],{"class":137,"line":138},[135,1109,595],{"class":160},[135,1111,1112,1115,1118,1121,1123,1125],{"class":137,"line":177},[135,1113,1114],{"class":160},"  \"",[135,1116,1117],{"class":156},"statusCode",[135,1119,1120],{"class":160},"\"",[135,1122,240],{"class":160},[135,1124,1041],{"class":251},[135,1126,618],{"class":160},[135,1128,1129,1131,1134,1136,1138,1141,1143,1145],{"class":137,"line":184},[135,1130,1114],{"class":160},[135,1132,1133],{"class":156},"message",[135,1135,1120],{"class":160},[135,1137,240],{"class":160},[135,1139,1140],{"class":160}," \"",[135,1142,1027],{"class":266},[135,1144,1120],{"class":160},[135,1146,618],{"class":160},[135,1148,1149,1151,1154,1156,1158],{"class":137,"line":207},[135,1150,1114],{"class":160},[135,1152,1153],{"class":156},"data",[135,1155,1120],{"class":160},[135,1157,240],{"class":160},[135,1159,174],{"class":160},[135,1161,1162,1165,1168,1170,1172,1174,1176,1178],{"class":137,"line":214},[135,1163,1164],{"class":160},"    \"",[135,1166,1167],{"class":444},"why",[135,1169,1120],{"class":160},[135,1171,240],{"class":160},[135,1173,1140],{"class":160},[135,1175,1055],{"class":266},[135,1177,1120],{"class":160},[135,1179,618],{"class":160},[135,1181,1182,1184,1187,1189,1191,1193,1195,1197],{"class":137,"line":220},[135,1183,1164],{"class":160},[135,1185,1186],{"class":444},"fix",[135,1188,1120],{"class":160},[135,1190,240],{"class":160},[135,1192,1140],{"class":160},[135,1194,1071],{"class":266},[135,1196,1120],{"class":160},[135,1198,618],{"class":160},[135,1200,1201,1203,1206,1208,1210,1212,1214],{"class":137,"line":280},[135,1202,1164],{"class":160},[135,1204,1205],{"class":444},"link",[135,1207,1120],{"class":160},[135,1209,240],{"class":160},[135,1211,1140],{"class":160},[135,1213,1087],{"class":266},[135,1215,1216],{"class":160},"\"\n",[135,1218,1219],{"class":137,"line":324},[135,1220,1221],{"class":160},"  }\n",[135,1223,1224],{"class":137,"line":329},[135,1225,1226],{"class":160},"}\n",[509,1228,1230],{"id":1229},"error-fields","Error Fields",[514,1232,1233,1246],{},[517,1234,1235],{},[520,1236,1237,1240,1243],{},[523,1238,1239],{},"Field",[523,1241,1242],{},"Required",[523,1244,1245],{},"Description",[532,1247,1248,1260,1273,1284,1295,1306],{},[520,1249,1250,1254,1257],{},[537,1251,1252],{},[95,1253,1133],{},[537,1255,1256],{},"Yes",[537,1258,1259],{},"What happened (user-facing)",[520,1261,1262,1267,1270],{},[537,1263,1264],{},[95,1265,1266],{},"status",[537,1268,1269],{},"No",[537,1271,1272],{},"HTTP status code (default: 500)",[520,1274,1275,1279,1281],{},[537,1276,1277],{},[95,1278,1167],{},[537,1280,1269],{},[537,1282,1283],{},"Technical reason (for debugging)",[520,1285,1286,1290,1292],{},[537,1287,1288],{},[95,1289,1186],{},[537,1291,1269],{},[537,1293,1294],{},"Actionable solution",[520,1296,1297,1301,1303],{},[537,1298,1299],{},[95,1300,1205],{},[537,1302,1269],{},[537,1304,1305],{},"Documentation URL for more info",[520,1307,1308,1313,1315],{},[537,1309,1310],{},[95,1311,1312],{},"cause",[537,1314,1269],{},[537,1316,1317],{},"Original error (if wrapping)",[509,1319,1321],{"id":1320},"frontend-integration","Frontend Integration",[81,1323,116,1324,1327],{},[95,1325,1326],{},"parseError()"," to extract all error fields on the client:",[125,1329,1332],{"className":127,"code":1330,"filename":1331,"language":130,"meta":131,"style":131},"import { parseError } from 'evlog'\n\nexport async function checkout(cart: Cart) {\n  try {\n    await $fetch('/api/checkout', { method: 'POST', body: cart })\n  } catch (err) {\n    const error = parseError(err)\n\n    // 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/useCheckout.ts",[95,1333,1334,1353,1357,1384,1391,1437,1455,1473,1477,1482,1496,1511,1526,1542,1556,1612,1621,1629,1634,1652,1684,1690,1695],{"__ignoreMap":131},[135,1335,1336,1338,1340,1343,1345,1347,1349,1351],{"class":137,"line":138},[135,1337,982],{"class":141},[135,1339,243],{"class":160},[135,1341,1342],{"class":152}," parseError",[135,1344,273],{"class":160},[135,1346,992],{"class":141},[135,1348,263],{"class":160},[135,1350,997],{"class":266},[135,1352,1000],{"class":160},[135,1354,1355],{"class":137,"line":177},[135,1356,211],{"emptyLinePlaceholder":210},[135,1358,1359,1361,1364,1367,1370,1372,1375,1377,1380,1382],{"class":137,"line":184},[135,1360,142],{"class":141},[135,1362,1363],{"class":156}," async",[135,1365,1366],{"class":156}," function",[135,1368,1369],{"class":148}," checkout",[135,1371,153],{"class":160},[135,1373,1374],{"class":164},"cart",[135,1376,240],{"class":160},[135,1378,1379],{"class":444}," Cart",[135,1381,168],{"class":160},[135,1383,174],{"class":160},[135,1385,1386,1389],{"class":137,"line":207},[135,1387,1388],{"class":141},"  try",[135,1390,174],{"class":160},[135,1392,1393,1396,1399,1401,1403,1406,1408,1410,1412,1415,1417,1419,1422,1424,1426,1429,1431,1433,1435],{"class":137,"line":214},[135,1394,1395],{"class":141},"    await",[135,1397,1398],{"class":148}," $fetch",[135,1400,153],{"class":199},[135,1402,270],{"class":160},[135,1404,1405],{"class":266},"/api/checkout",[135,1407,270],{"class":160},[135,1409,255],{"class":160},[135,1411,243],{"class":160},[135,1413,1414],{"class":199}," method",[135,1416,240],{"class":160},[135,1418,263],{"class":160},[135,1420,1421],{"class":266},"POST",[135,1423,270],{"class":160},[135,1425,255],{"class":160},[135,1427,1428],{"class":199}," body",[135,1430,240],{"class":160},[135,1432,293],{"class":152},[135,1434,273],{"class":160},[135,1436,204],{"class":199},[135,1438,1439,1442,1445,1447,1450,1453],{"class":137,"line":220},[135,1440,1441],{"class":160},"  }",[135,1443,1444],{"class":141}," catch",[135,1446,161],{"class":199},[135,1448,1449],{"class":152},"err",[135,1451,1452],{"class":199},") ",[135,1454,595],{"class":160},[135,1456,1457,1460,1463,1465,1467,1469,1471],{"class":137,"line":280},[135,1458,1459],{"class":156},"    const",[135,1461,1462],{"class":152}," error",[135,1464,193],{"class":160},[135,1466,1342],{"class":148},[135,1468,153],{"class":199},[135,1470,1449],{"class":152},[135,1472,204],{"class":199},[135,1474,1475],{"class":137,"line":324},[135,1476,211],{"emptyLinePlaceholder":210},[135,1478,1479],{"class":137,"line":329},[135,1480,1481],{"class":180},"    // Direct access to all fields\n",[135,1483,1484,1487,1489,1492,1494],{"class":137,"line":335},[135,1485,1486],{"class":152},"    toast",[135,1488,226],{"class":160},[135,1490,1491],{"class":148},"add",[135,1493,153],{"class":199},[135,1495,595],{"class":160},[135,1497,1498,1501,1503,1505,1507,1509],{"class":137,"line":354},[135,1499,1500],{"class":199},"      title",[135,1502,240],{"class":160},[135,1504,1462],{"class":152},[135,1506,226],{"class":160},[135,1508,1133],{"class":152},[135,1510,618],{"class":160},[135,1512,1513,1516,1518,1520,1522,1524],{"class":137,"line":383},[135,1514,1515],{"class":199},"      description",[135,1517,240],{"class":160},[135,1519,1462],{"class":152},[135,1521,226],{"class":160},[135,1523,1167],{"class":152},[135,1525,618],{"class":160},[135,1527,1528,1531,1533,1535,1538,1540],{"class":137,"line":388},[135,1529,1530],{"class":199},"      color",[135,1532,240],{"class":160},[135,1534,263],{"class":160},[135,1536,1537],{"class":266},"error",[135,1539,270],{"class":160},[135,1541,618],{"class":160},[135,1543,1544,1547,1549,1551,1553],{"class":137,"line":394},[135,1545,1546],{"class":199},"      actions",[135,1548,240],{"class":160},[135,1550,1462],{"class":152},[135,1552,226],{"class":160},[135,1554,1555],{"class":152},"link\n",[135,1557,1558,1561,1563,1565,1568,1570,1572,1575,1577,1579,1582,1584,1587,1589,1592,1594,1597,1599,1601,1603,1605,1607,1609],{"class":137,"line":426},[135,1559,1560],{"class":160},"        ?",[135,1562,605],{"class":199},[135,1564,234],{"class":160},[135,1566,1567],{"class":199}," label",[135,1569,240],{"class":160},[135,1571,263],{"class":160},[135,1573,1574],{"class":266},"Learn more",[135,1576,270],{"class":160},[135,1578,255],{"class":160},[135,1580,1581],{"class":148}," onClick",[135,1583,240],{"class":160},[135,1585,1586],{"class":160}," ()",[135,1588,171],{"class":156},[135,1590,1591],{"class":152}," window",[135,1593,226],{"class":160},[135,1595,1596],{"class":148},"open",[135,1598,153],{"class":199},[135,1600,1537],{"class":152},[135,1602,226],{"class":160},[135,1604,1205],{"class":152},[135,1606,1452],{"class":199},[135,1608,429],{"class":160},[135,1610,1611],{"class":199},"]\n",[135,1613,1615,1618],{"class":137,"line":1614},16,[135,1616,1617],{"class":160},"        :",[135,1619,1620],{"class":160}," undefined,\n",[135,1622,1624,1627],{"class":137,"line":1623},17,[135,1625,1626],{"class":160},"    }",[135,1628,204],{"class":199},[135,1630,1632],{"class":137,"line":1631},18,[135,1633,211],{"emptyLinePlaceholder":210},[135,1635,1637,1640,1642,1644,1646,1648,1650],{"class":137,"line":1636},19,[135,1638,1639],{"class":141},"    if",[135,1641,161],{"class":199},[135,1643,1537],{"class":152},[135,1645,226],{"class":160},[135,1647,1186],{"class":152},[135,1649,1452],{"class":199},[135,1651,595],{"class":160},[135,1653,1655,1658,1660,1662,1664,1667,1670,1673,1675,1677,1679,1682],{"class":137,"line":1654},20,[135,1656,1657],{"class":152},"      console",[135,1659,226],{"class":160},[135,1661,87],{"class":148},[135,1663,153],{"class":199},[135,1665,1666],{"class":160},"`",[135,1668,1669],{"class":266},"Fix: ",[135,1671,1672],{"class":160},"${",[135,1674,1537],{"class":152},[135,1676,226],{"class":160},[135,1678,1186],{"class":152},[135,1680,1681],{"class":160},"}`",[135,1683,204],{"class":199},[135,1685,1687],{"class":137,"line":1686},21,[135,1688,1689],{"class":160},"    }\n",[135,1691,1693],{"class":137,"line":1692},22,[135,1694,1221],{"class":160},[135,1696,1698],{"class":137,"line":1697},23,[135,1699,1226],{"class":160},[110,1701,1703],{"id":1702},"log-simple-logging","log (Simple Logging)",[81,1705,1706],{},"For quick one-off logs anywhere in your code:",[122,1708,1709,1817],{},[125,1710,1713],{"className":127,"code":1711,"filename":1712,"language":130,"meta":131,"style":131},"// server/utils/auth.ts\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined' })\nlog.warn('cache', 'Cache miss')\n","Server",[95,1714,1715,1720,1748,1788],{"__ignoreMap":131},[135,1716,1717],{"class":137,"line":138},[135,1718,1719],{"class":180},"// server/utils/auth.ts\n",[135,1721,1722,1724,1726,1728,1730,1732,1735,1737,1739,1741,1744,1746],{"class":137,"line":177},[135,1723,101],{"class":152},[135,1725,226],{"class":160},[135,1727,87],{"class":148},[135,1729,153],{"class":152},[135,1731,270],{"class":160},[135,1733,1734],{"class":266},"auth",[135,1736,270],{"class":160},[135,1738,255],{"class":160},[135,1740,263],{"class":160},[135,1742,1743],{"class":266},"User logged in",[135,1745,270],{"class":160},[135,1747,204],{"class":152},[135,1749,1750,1752,1754,1756,1758,1760,1762,1764,1766,1769,1771,1773,1775,1777,1779,1782,1784,1786],{"class":137,"line":184},[135,1751,101],{"class":152},[135,1753,226],{"class":160},[135,1755,1537],{"class":148},[135,1757,153],{"class":152},[135,1759,234],{"class":160},[135,1761,904],{"class":199},[135,1763,240],{"class":160},[135,1765,263],{"class":160},[135,1767,1768],{"class":266},"payment",[135,1770,270],{"class":160},[135,1772,255],{"class":160},[135,1774,1462],{"class":199},[135,1776,240],{"class":160},[135,1778,263],{"class":160},[135,1780,1781],{"class":266},"card_declined",[135,1783,270],{"class":160},[135,1785,273],{"class":160},[135,1787,204],{"class":152},[135,1789,1790,1792,1794,1797,1799,1801,1804,1806,1808,1810,1813,1815],{"class":137,"line":207},[135,1791,101],{"class":152},[135,1793,226],{"class":160},[135,1795,1796],{"class":148},"warn",[135,1798,153],{"class":152},[135,1800,270],{"class":160},[135,1802,1803],{"class":266},"cache",[135,1805,270],{"class":160},[135,1807,255],{"class":160},[135,1809,263],{"class":160},[135,1811,1812],{"class":266},"Cache miss",[135,1814,270],{"class":160},[135,1816,204],{"class":152},[125,1818,1820],{"className":434,"code":1819,"filename":776,"language":437,"meta":131,"style":131},"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",[95,1821,1822,1829,1852],{"__ignoreMap":131},[135,1823,1824,1826],{"class":137,"line":138},[135,1825,445],{"class":444},[135,1827,1828],{"class":152}," [auth] User logged in\n",[135,1830,1831,1834,1837,1840,1843,1845,1847,1849],{"class":137,"line":177},[135,1832,1833],{"class":444},"10:23:45.613",[135,1835,1836],{"class":266}," ERROR",[135,1838,1839],{"class":152}," [my-app] action",[135,1841,1842],{"class":160},"=",[135,1844,1768],{"class":266},[135,1846,1462],{"class":152},[135,1848,1842],{"class":160},[135,1850,1851],{"class":266},"card_declined\n",[135,1853,1854,1857],{"class":137,"line":184},[135,1855,1856],{"class":444},"10:23:45.614",[135,1858,1859],{"class":152}," [cache] Cache miss\n",[85,1861,1864,1865,1867,1868,1870],{"color":1862,"icon":1863},"warning","i-lucide-lightbulb","Prefer wide events (",[95,1866,97],{},") over simple logs when possible. Use ",[95,1869,101],{}," for truly one-off events that don't belong to a request.",[110,1872,1874],{"id":1873},"log-client-side","log (Client-Side)",[81,1876,1877,1878,1880],{},"The same ",[95,1879,101],{}," API works on the client side, outputting to the browser console:",[122,1882,1883,2111],{},[125,1884,1889],{"className":1885,"code":1886,"filename":1887,"language":1888,"meta":131,"style":131},"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('/api/checkout', { method: 'POST' })\n    log.info({ action: 'checkout', status: 'success' })\n  } catch (err) {\n    log.error({ action: 'checkout', error: 'failed' })\n  }\n}\n\u003C/script>\n","components/CheckoutButton.vue","vue",[95,1890,1891,1917,1931,1959,1963,1969,2001,2041,2055,2094,2098,2102],{"__ignoreMap":131},[135,1892,1893,1896,1899,1902,1905,1907,1909,1912,1914],{"class":137,"line":138},[135,1894,1895],{"class":160},"\u003C",[135,1897,1898],{"class":199},"script",[135,1900,1901],{"class":156}," setup",[135,1903,1904],{"class":156}," lang",[135,1906,1842],{"class":160},[135,1908,1120],{"class":160},[135,1910,1911],{"class":266},"ts",[135,1913,1120],{"class":160},[135,1915,1916],{"class":160},">\n",[135,1918,1919,1921,1923,1926,1929],{"class":137,"line":177},[135,1920,157],{"class":156},[135,1922,1366],{"class":156},[135,1924,1925],{"class":148}," handleCheckout",[135,1927,1928],{"class":160},"()",[135,1930,174],{"class":160},[135,1932,1933,1935,1937,1939,1941,1943,1946,1948,1950,1952,1955,1957],{"class":137,"line":184},[135,1934,223],{"class":152},[135,1936,226],{"class":160},[135,1938,87],{"class":148},[135,1940,153],{"class":199},[135,1942,270],{"class":160},[135,1944,1945],{"class":266},"checkout",[135,1947,270],{"class":160},[135,1949,255],{"class":160},[135,1951,263],{"class":160},[135,1953,1954],{"class":266},"User initiated checkout",[135,1956,270],{"class":160},[135,1958,204],{"class":199},[135,1960,1961],{"class":137,"line":207},[135,1962,211],{"emptyLinePlaceholder":210},[135,1964,1965,1967],{"class":137,"line":214},[135,1966,1388],{"class":141},[135,1968,174],{"class":160},[135,1970,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"class":137,"line":220},[135,1972,1395],{"class":141},[135,1974,1398],{"class":148},[135,1976,153],{"class":199},[135,1978,270],{"class":160},[135,1980,1405],{"class":266},[135,1982,270],{"class":160},[135,1984,255],{"class":160},[135,1986,243],{"class":160},[135,1988,1414],{"class":199},[135,1990,240],{"class":160},[135,1992,263],{"class":160},[135,1994,1421],{"class":266},[135,1996,270],{"class":160},[135,1998,273],{"class":160},[135,2000,204],{"class":199},[135,2002,2003,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2029,2031,2033,2035,2037,2039],{"class":137,"line":280},[135,2004,2005],{"class":152},"    log",[135,2007,226],{"class":160},[135,2009,87],{"class":148},[135,2011,153],{"class":199},[135,2013,234],{"class":160},[135,2015,904],{"class":199},[135,2017,240],{"class":160},[135,2019,263],{"class":160},[135,2021,1945],{"class":266},[135,2023,270],{"class":160},[135,2025,255],{"class":160},[135,2027,2028],{"class":199}," status",[135,2030,240],{"class":160},[135,2032,263],{"class":160},[135,2034,501],{"class":266},[135,2036,270],{"class":160},[135,2038,273],{"class":160},[135,2040,204],{"class":199},[135,2042,2043,2045,2047,2049,2051,2053],{"class":137,"line":324},[135,2044,1441],{"class":160},[135,2046,1444],{"class":141},[135,2048,161],{"class":199},[135,2050,1449],{"class":152},[135,2052,1452],{"class":199},[135,2054,595],{"class":160},[135,2056,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2088,2090,2092],{"class":137,"line":329},[135,2058,2005],{"class":152},[135,2060,226],{"class":160},[135,2062,1537],{"class":148},[135,2064,153],{"class":199},[135,2066,234],{"class":160},[135,2068,904],{"class":199},[135,2070,240],{"class":160},[135,2072,263],{"class":160},[135,2074,1945],{"class":266},[135,2076,270],{"class":160},[135,2078,255],{"class":160},[135,2080,1462],{"class":199},[135,2082,240],{"class":160},[135,2084,263],{"class":160},[135,2086,2087],{"class":266},"failed",[135,2089,270],{"class":160},[135,2091,273],{"class":160},[135,2093,204],{"class":199},[135,2095,2096],{"class":137,"line":335},[135,2097,1221],{"class":160},[135,2099,2100],{"class":137,"line":354},[135,2101,1226],{"class":160},[135,2103,2104,2107,2109],{"class":137,"line":383},[135,2105,2106],{"class":160},"\u003C/",[135,2108,1898],{"class":199},[135,2110,1916],{"class":160},[125,2112,2115],{"className":127,"code":2113,"filename":2114,"language":130,"meta":131,"style":131},"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/useAnalytics.ts",[95,2116,2117,2130,2173,2206,2218,2246,2250,2254,2258,2268],{"__ignoreMap":131},[135,2118,2119,2121,2123,2126,2128],{"class":137,"line":138},[135,2120,142],{"class":141},[135,2122,1366],{"class":156},[135,2124,2125],{"class":148}," useAnalytics",[135,2127,1928],{"class":160},[135,2129,174],{"class":160},[135,2131,2132,2135,2138,2140,2142,2144,2147,2149,2152,2155,2158,2160,2163,2165,2168,2171],{"class":137,"line":177},[135,2133,2134],{"class":156},"  function",[135,2136,2137],{"class":148}," trackEvent",[135,2139,153],{"class":160},[135,2141,165],{"class":164},[135,2143,240],{"class":160},[135,2145,2146],{"class":444}," string",[135,2148,255],{"class":160},[135,2150,2151],{"class":164}," data",[135,2153,2154],{"class":160},"?:",[135,2156,2157],{"class":444}," Record",[135,2159,1895],{"class":160},[135,2161,2162],{"class":444},"string",[135,2164,255],{"class":160},[135,2166,2167],{"class":444}," unknown",[135,2169,2170],{"class":160},">)",[135,2172,174],{"class":160},[135,2174,2175,2177,2179,2181,2183,2185,2188,2190,2192,2195,2198,2200,2202,2204],{"class":137,"line":184},[135,2176,2005],{"class":152},[135,2178,226],{"class":160},[135,2180,87],{"class":148},[135,2182,153],{"class":199},[135,2184,270],{"class":160},[135,2186,2187],{"class":266},"analytics",[135,2189,270],{"class":160},[135,2191,255],{"class":160},[135,2193,2194],{"class":160}," `",[135,2196,2197],{"class":266},"Event: ",[135,2199,1672],{"class":160},[135,2201,165],{"class":152},[135,2203,1681],{"class":160},[135,2205,204],{"class":199},[135,2207,2208,2210,2212,2214,2216],{"class":137,"line":207},[135,2209,1639],{"class":141},[135,2211,161],{"class":199},[135,2213,1153],{"class":152},[135,2215,1452],{"class":199},[135,2217,595],{"class":160},[135,2219,2220,2223,2225,2228,2230,2232,2235,2237,2240,2242,2244],{"class":137,"line":214},[135,2221,2222],{"class":152},"      log",[135,2224,226],{"class":160},[135,2226,2227],{"class":148},"debug",[135,2229,153],{"class":199},[135,2231,234],{"class":160},[135,2233,2234],{"class":152}," event",[135,2236,255],{"class":160},[135,2238,2239],{"class":160}," ...",[135,2241,1153],{"class":152},[135,2243,273],{"class":160},[135,2245,204],{"class":199},[135,2247,2248],{"class":137,"line":220},[135,2249,1689],{"class":160},[135,2251,2252],{"class":137,"line":280},[135,2253,1221],{"class":160},[135,2255,2256],{"class":137,"line":324},[135,2257,211],{"emptyLinePlaceholder":210},[135,2259,2260,2262,2264,2266],{"class":137,"line":329},[135,2261,397],{"class":141},[135,2263,243],{"class":160},[135,2265,2137],{"class":152},[135,2267,423],{"class":160},[135,2269,2270],{"class":137,"line":335},[135,2271,1226],{"class":160},[81,2273,2274],{},"In pretty mode (development), client logs appear with colored tags in the browser console:",[125,2276,2281],{"className":2277,"code":2279,"language":2280},[2278],"language-text","[my-app] info { action: 'checkout', status: 'success' }\n","text",[95,2282,2279],{"__ignoreMap":131},[85,2284,2285,2286,2288],{"color":87,"icon":13},"Client-side ",[95,2287,101],{}," is designed for debugging and development. For production analytics, use dedicated services like Plausible, PostHog, or Mixpanel.",[110,2290,2292],{"id":2291},"wide-event-fields","Wide Event Fields",[81,2294,2295],{},"Every wide event should include context from different layers:",[122,2297,2298,2517],{},[125,2299,2301],{"className":127,"code":2300,"filename":970,"language":130,"meta":131,"style":131},"// server/api/checkout.post.ts\nconst log = useLogger(event)\n\n// Request context (often auto-populated)\nlog.set({ method: 'POST', path: '/api/checkout' })\n\n// User context\nlog.set({ userId: 1, subscription: 'pro' })\n\n// Business context\nlog.set({ cart: { items: 3, total: 9999 }, coupon: 'SAVE10' })\n\n// Outcome\nlog.set({ status: 200, duration: 234 })\n",[95,2302,2303,2307,2322,2326,2331,2370,2374,2379,2415,2419,2424,2475,2479,2484],{"__ignoreMap":131},[135,2304,2305],{"class":137,"line":138},[135,2306,977],{"class":180},[135,2308,2309,2312,2315,2317,2319],{"class":137,"line":177},[135,2310,2311],{"class":156},"const",[135,2313,2314],{"class":152}," log ",[135,2316,1842],{"class":160},[135,2318,196],{"class":148},[135,2320,2321],{"class":152},"(event)\n",[135,2323,2324],{"class":137,"line":184},[135,2325,211],{"emptyLinePlaceholder":210},[135,2327,2328],{"class":137,"line":207},[135,2329,2330],{"class":180},"// Request context (often auto-populated)\n",[135,2332,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2358,2360,2362,2364,2366,2368],{"class":137,"line":214},[135,2334,101],{"class":152},[135,2336,226],{"class":160},[135,2338,229],{"class":148},[135,2340,153],{"class":152},[135,2342,234],{"class":160},[135,2344,1414],{"class":199},[135,2346,240],{"class":160},[135,2348,263],{"class":160},[135,2350,1421],{"class":266},[135,2352,270],{"class":160},[135,2354,255],{"class":160},[135,2356,2357],{"class":199}," path",[135,2359,240],{"class":160},[135,2361,263],{"class":160},[135,2363,1405],{"class":266},[135,2365,270],{"class":160},[135,2367,273],{"class":160},[135,2369,204],{"class":152},[135,2371,2372],{"class":137,"line":220},[135,2373,211],{"emptyLinePlaceholder":210},[135,2375,2376],{"class":137,"line":280},[135,2377,2378],{"class":180},"// User context\n",[135,2380,2381,2383,2385,2387,2389,2391,2394,2396,2398,2400,2403,2405,2407,2409,2411,2413],{"class":137,"line":324},[135,2382,101],{"class":152},[135,2384,226],{"class":160},[135,2386,229],{"class":148},[135,2388,153],{"class":152},[135,2390,234],{"class":160},[135,2392,2393],{"class":199}," userId",[135,2395,240],{"class":160},[135,2397,252],{"class":251},[135,2399,255],{"class":160},[135,2401,2402],{"class":199}," subscription",[135,2404,240],{"class":160},[135,2406,263],{"class":160},[135,2408,267],{"class":266},[135,2410,270],{"class":160},[135,2412,273],{"class":160},[135,2414,204],{"class":152},[135,2416,2417],{"class":137,"line":329},[135,2418,211],{"emptyLinePlaceholder":210},[135,2420,2421],{"class":137,"line":335},[135,2422,2423],{"class":180},"// Business context\n",[135,2425,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2459,2462,2464,2466,2469,2471,2473],{"class":137,"line":354},[135,2427,101],{"class":152},[135,2429,226],{"class":160},[135,2431,229],{"class":148},[135,2433,153],{"class":152},[135,2435,234],{"class":160},[135,2437,293],{"class":199},[135,2439,240],{"class":160},[135,2441,243],{"class":160},[135,2443,300],{"class":199},[135,2445,240],{"class":160},[135,2447,305],{"class":251},[135,2449,255],{"class":160},[135,2451,310],{"class":199},[135,2453,240],{"class":160},[135,2455,315],{"class":251},[135,2457,2458],{"class":160}," },",[135,2460,2461],{"class":199}," coupon",[135,2463,240],{"class":160},[135,2465,263],{"class":160},[135,2467,2468],{"class":266},"SAVE10",[135,2470,270],{"class":160},[135,2472,273],{"class":160},[135,2474,204],{"class":152},[135,2476,2477],{"class":137,"line":383},[135,2478,211],{"emptyLinePlaceholder":210},[135,2480,2481],{"class":137,"line":388},[135,2482,2483],{"class":180},"// Outcome\n",[135,2485,2486,2488,2490,2492,2494,2496,2498,2500,2503,2505,2508,2510,2513,2515],{"class":137,"line":394},[135,2487,101],{"class":152},[135,2489,226],{"class":160},[135,2491,229],{"class":148},[135,2493,153],{"class":152},[135,2495,234],{"class":160},[135,2497,2028],{"class":199},[135,2499,240],{"class":160},[135,2501,2502],{"class":251}," 200",[135,2504,255],{"class":160},[135,2506,2507],{"class":199}," duration",[135,2509,240],{"class":160},[135,2511,2512],{"class":251}," 234",[135,2514,273],{"class":160},[135,2516,204],{"class":152},[125,2518,2521],{"className":1100,"code":2519,"filename":2520,"language":1103,"meta":131,"style":131},"{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"/api/checkout\",\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)",[95,2522,2523,2527,2546,2565,2584,2599,2618,2656,2675,2689,2703],{"__ignoreMap":131},[135,2524,2525],{"class":137,"line":138},[135,2526,595],{"class":160},[135,2528,2529,2531,2534,2536,2538,2540,2542,2544],{"class":137,"line":177},[135,2530,1114],{"class":160},[135,2532,2533],{"class":156},"level",[135,2535,1120],{"class":160},[135,2537,240],{"class":160},[135,2539,1140],{"class":160},[135,2541,87],{"class":266},[135,2543,1120],{"class":160},[135,2545,618],{"class":160},[135,2547,2548,2550,2553,2555,2557,2559,2561,2563],{"class":137,"line":184},[135,2549,1114],{"class":160},[135,2551,2552],{"class":156},"method",[135,2554,1120],{"class":160},[135,2556,240],{"class":160},[135,2558,1140],{"class":160},[135,2560,1421],{"class":266},[135,2562,1120],{"class":160},[135,2564,618],{"class":160},[135,2566,2567,2569,2572,2574,2576,2578,2580,2582],{"class":137,"line":207},[135,2568,1114],{"class":160},[135,2570,2571],{"class":156},"path",[135,2573,1120],{"class":160},[135,2575,240],{"class":160},[135,2577,1140],{"class":160},[135,2579,1405],{"class":266},[135,2581,1120],{"class":160},[135,2583,618],{"class":160},[135,2585,2586,2588,2591,2593,2595,2597],{"class":137,"line":214},[135,2587,1114],{"class":160},[135,2589,2590],{"class":156},"userId",[135,2592,1120],{"class":160},[135,2594,240],{"class":160},[135,2596,252],{"class":251},[135,2598,618],{"class":160},[135,2600,2601,2603,2606,2608,2610,2612,2614,2616],{"class":137,"line":220},[135,2602,1114],{"class":160},[135,2604,2605],{"class":156},"subscription",[135,2607,1120],{"class":160},[135,2609,240],{"class":160},[135,2611,1140],{"class":160},[135,2613,267],{"class":266},[135,2615,1120],{"class":160},[135,2617,618],{"class":160},[135,2619,2620,2622,2624,2626,2628,2630,2632,2635,2637,2639,2641,2643,2645,2648,2650,2652,2654],{"class":137,"line":280},[135,2621,1114],{"class":160},[135,2623,1374],{"class":156},[135,2625,1120],{"class":160},[135,2627,240],{"class":160},[135,2629,243],{"class":160},[135,2631,1140],{"class":160},[135,2633,2634],{"class":444},"items",[135,2636,1120],{"class":160},[135,2638,240],{"class":160},[135,2640,305],{"class":251},[135,2642,255],{"class":160},[135,2644,1140],{"class":160},[135,2646,2647],{"class":444},"total",[135,2649,1120],{"class":160},[135,2651,240],{"class":160},[135,2653,315],{"class":251},[135,2655,702],{"class":160},[135,2657,2658,2660,2663,2665,2667,2669,2671,2673],{"class":137,"line":324},[135,2659,1114],{"class":160},[135,2661,2662],{"class":156},"coupon",[135,2664,1120],{"class":160},[135,2666,240],{"class":160},[135,2668,1140],{"class":160},[135,2670,2468],{"class":266},[135,2672,1120],{"class":160},[135,2674,618],{"class":160},[135,2676,2677,2679,2681,2683,2685,2687],{"class":137,"line":329},[135,2678,1114],{"class":160},[135,2680,1266],{"class":156},[135,2682,1120],{"class":160},[135,2684,240],{"class":160},[135,2686,2502],{"class":251},[135,2688,618],{"class":160},[135,2690,2691,2693,2696,2698,2700],{"class":137,"line":335},[135,2692,1114],{"class":160},[135,2694,2695],{"class":156},"duration",[135,2697,1120],{"class":160},[135,2699,240],{"class":160},[135,2701,2702],{"class":251}," 234\n",[135,2704,2705],{"class":137,"line":354},[135,2706,1226],{"class":160},[110,2708,2710],{"id":2709},"next-steps","Next Steps",[2712,2713,2714,2721,2726],"ul",{},[2715,2716,2717,2720],"li",{},[2718,2719,36],"a",{"href":37}," - Learn how to design effective wide events",[2715,2722,2723,2725],{},[2718,2724,41],{"href":42}," - Master error handling with evlog",[2715,2727,2728,2730],{},[2718,2729,46],{"href":47}," - Security guidelines and production tips",[2732,2733,2734],"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":131,"searchDepth":177,"depth":177,"links":2736},[2737,2741,2745,2746,2747,2748],{"id":112,"depth":177,"text":113,"children":2738},[2739,2740],{"id":511,"depth":184,"text":512},{"id":561,"depth":184,"text":562},{"id":957,"depth":177,"text":958,"children":2742},[2743,2744],{"id":1229,"depth":184,"text":1230},{"id":1320,"depth":184,"text":1321},{"id":1702,"depth":177,"text":1703},{"id":1873,"depth":177,"text":1874},{"id":2291,"depth":177,"text":2292},{"id":2709,"depth":177,"text":2710},"Get up and running with evlog in minutes. Learn useLogger, createError, parseError, and the log API for wide events and structured errors.","md",[2752,2753],{"label":36,"icon":39,"to":37},{"label":41,"icon":44,"to":42},{},{"icon":23},{"title":20,"description":2749},"m82_bzwh8tJzB1OX6msorV_Xh3BUpqcTX2OxpUTuYHs",[2759,2761],{"title":15,"path":16,"stem":17,"description":2760,"icon":18,"children":-1},"Install evlog in your Nuxt, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.",{"title":25,"path":26,"stem":27,"description":2762,"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.",1770243616085]