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