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