[{"data":1,"prerenderedAt":1010},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-introduction":49,"-getting-started-introduction-surround":1007},[4,27],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting Started","i-lucide-rocket","/getting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction",{"title":15,"path":16,"stem":17},"Installation","/getting-started/installation","1.getting-started/2.installation",{"title":19,"path":20,"stem":21},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start",{"title":23,"path":24,"stem":25},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills",false,{"title":28,"icon":29,"items":30,"path":40,"stem":41,"children":42,"page":26},"Core Concepts","i-lucide-book-open",[31,34,37],{"title":32,"path":33},"Wide Events","/core-concepts/wide-events",{"title":35,"path":36},"Structured Errors","/core-concepts/structured-errors",{"title":38,"path":39},"Best Practices","/core-concepts/best-practices","/core-concepts","2.core-concepts",[43,45,47],{"title":32,"path":33,"stem":44},"2.core-concepts/1.wide-events",{"title":35,"path":36,"stem":46},"2.core-concepts/2.structured-errors",{"title":38,"path":39,"stem":48},"2.core-concepts/3.best-practices",{"id":50,"title":11,"body":51,"description":1001,"extension":1002,"links":1003,"meta":1004,"navigation":345,"path":12,"seo":1005,"stem":13,"__hash__":1006},"docs/1.getting-started/1.introduction.md",{"type":52,"value":53,"toc":994},"minimark",[54,62,79,84,87,92,114,118,121,305,308,640,643,646,649,676,679,915,927,931,938,963,974,978,990],[55,56,57,61],"p",{},[58,59,60],"strong",{},"evlog"," is a TypeScript logging library that replaces scattered log lines with comprehensive wide events and structured errors.",[55,63,64,65,72,73,78],{},"Inspired by ",[66,67,71],"a",{"href":68,"rel":69},"https://loggingsucks.com/",[70],"nofollow","Logging Sucks"," by ",[66,74,77],{"href":75,"rel":76},"https://x.com/boristane",[70],"Boris Tane",".",[80,81,83],"h2",{"id":82},"philosophy","Philosophy",[55,85,86],{},"Traditional logging is broken. Your logs are scattered across dozens of files, each request generates 10+ log lines, and when something goes wrong, you're left grep-ing through noise hoping to find signal.",[55,88,89,91],{},[58,90,60],{}," takes a different approach:",[93,94,95,100,104,109],"card-group",{},[96,97,99],"card",{"icon":98,"title":32},"i-lucide-layers","One comprehensive log event per request, containing all the context you need.",[96,101,103],{"icon":102,"title":35},"i-lucide-shield-alert","Errors that explain why they occurred and how to fix them.",[96,105,108],{"icon":106,"title":107},"i-lucide-git-branch","Request Scoping","Accumulate context throughout the request lifecycle, emit once at the end.",[96,110,113],{"icon":111,"title":112},"i-lucide-palette","Pretty for Dev","Human-readable in development, machine-parseable JSON in production.",[80,115,117],{"id":116},"what-are-wide-events","What are Wide Events?",[55,119,120],{},"Instead of scattering logs throughout your code:",[122,123,129],"pre",{"className":124,"code":125,"filename":126,"language":127,"meta":128,"style":128},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","logger.info('Request started')\nlogger.info('User authenticated', { userId: user.id })\nlogger.info('Fetching cart', { cartId: cart.id })\nlogger.info('Processing payment')\nlogger.info('Payment successful')\nlogger.info('Request completed')\n","Traditional logging","typescript","",[130,131,132,163,207,245,265,285],"code",{"__ignoreMap":128},[133,134,137,141,144,148,151,154,158,160],"span",{"class":135,"line":136},"line",1,[133,138,140],{"class":139},"sTEyZ","logger",[133,142,78],{"class":143},"sMK4o",[133,145,147],{"class":146},"s2Zo4","info",[133,149,150],{"class":139},"(",[133,152,153],{"class":143},"'",[133,155,157],{"class":156},"sfazB","Request started",[133,159,153],{"class":143},[133,161,162],{"class":139},")\n",[133,164,166,168,170,172,174,176,179,181,184,187,191,194,197,199,202,205],{"class":135,"line":165},2,[133,167,140],{"class":139},[133,169,78],{"class":143},[133,171,147],{"class":146},[133,173,150],{"class":139},[133,175,153],{"class":143},[133,177,178],{"class":156},"User authenticated",[133,180,153],{"class":143},[133,182,183],{"class":143},",",[133,185,186],{"class":143}," {",[133,188,190],{"class":189},"swJcz"," userId",[133,192,193],{"class":143},":",[133,195,196],{"class":139}," user",[133,198,78],{"class":143},[133,200,201],{"class":139},"id ",[133,203,204],{"class":143},"}",[133,206,162],{"class":139},[133,208,210,212,214,216,218,220,223,225,227,229,232,234,237,239,241,243],{"class":135,"line":209},3,[133,211,140],{"class":139},[133,213,78],{"class":143},[133,215,147],{"class":146},[133,217,150],{"class":139},[133,219,153],{"class":143},[133,221,222],{"class":156},"Fetching cart",[133,224,153],{"class":143},[133,226,183],{"class":143},[133,228,186],{"class":143},[133,230,231],{"class":189}," cartId",[133,233,193],{"class":143},[133,235,236],{"class":139}," cart",[133,238,78],{"class":143},[133,240,201],{"class":139},[133,242,204],{"class":143},[133,244,162],{"class":139},[133,246,248,250,252,254,256,258,261,263],{"class":135,"line":247},4,[133,249,140],{"class":139},[133,251,78],{"class":143},[133,253,147],{"class":146},[133,255,150],{"class":139},[133,257,153],{"class":143},[133,259,260],{"class":156},"Processing payment",[133,262,153],{"class":143},[133,264,162],{"class":139},[133,266,268,270,272,274,276,278,281,283],{"class":135,"line":267},5,[133,269,140],{"class":139},[133,271,78],{"class":143},[133,273,147],{"class":146},[133,275,150],{"class":139},[133,277,153],{"class":143},[133,279,280],{"class":156},"Payment successful",[133,282,153],{"class":143},[133,284,162],{"class":139},[133,286,288,290,292,294,296,298,301,303],{"class":135,"line":287},6,[133,289,140],{"class":139},[133,291,78],{"class":143},[133,293,147],{"class":146},[133,295,150],{"class":139},[133,297,153],{"class":143},[133,299,300],{"class":156},"Request completed",[133,302,153],{"class":143},[133,304,162],{"class":139},[55,306,307],{},"You accumulate context and emit once:",[309,310,311,526],"code-group",{},[122,312,315],{"className":124,"code":313,"filename":314,"language":127,"meta":128,"style":128},"// server/api/checkout.post.ts\nconst log = useLogger(event)\n\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.set({ cart: { id: 42, items: 3, total: 9999 } })\nlog.set({ payment: { method: 'card', status: 'success' } })\n\nreturn { success: true }\n","Code",[130,316,317,323,341,347,399,450,500,505],{"__ignoreMap":128},[133,318,319],{"class":135,"line":136},[133,320,322],{"class":321},"sHwdD","// server/api/checkout.post.ts\n",[133,324,325,329,332,335,338],{"class":135,"line":165},[133,326,328],{"class":327},"spNyl","const",[133,330,331],{"class":139}," log ",[133,333,334],{"class":143},"=",[133,336,337],{"class":146}," useLogger",[133,339,340],{"class":139},"(event)\n",[133,342,343],{"class":135,"line":209},[133,344,346],{"emptyLinePlaceholder":345},true,"\n",[133,348,349,352,354,357,359,362,364,366,368,371,373,377,379,382,384,387,390,392,395,397],{"class":135,"line":247},[133,350,351],{"class":139},"log",[133,353,78],{"class":143},[133,355,356],{"class":146},"set",[133,358,150],{"class":139},[133,360,361],{"class":143},"{",[133,363,196],{"class":189},[133,365,193],{"class":143},[133,367,186],{"class":143},[133,369,370],{"class":189}," id",[133,372,193],{"class":143},[133,374,376],{"class":375},"sbssI"," 1",[133,378,183],{"class":143},[133,380,381],{"class":189}," plan",[133,383,193],{"class":143},[133,385,386],{"class":143}," '",[133,388,389],{"class":156},"pro",[133,391,153],{"class":143},[133,393,394],{"class":143}," }",[133,396,394],{"class":143},[133,398,162],{"class":139},[133,400,401,403,405,407,409,411,413,415,417,419,421,424,426,429,431,434,436,439,441,444,446,448],{"class":135,"line":267},[133,402,351],{"class":139},[133,404,78],{"class":143},[133,406,356],{"class":146},[133,408,150],{"class":139},[133,410,361],{"class":143},[133,412,236],{"class":189},[133,414,193],{"class":143},[133,416,186],{"class":143},[133,418,370],{"class":189},[133,420,193],{"class":143},[133,422,423],{"class":375}," 42",[133,425,183],{"class":143},[133,427,428],{"class":189}," items",[133,430,193],{"class":143},[133,432,433],{"class":375}," 3",[133,435,183],{"class":143},[133,437,438],{"class":189}," total",[133,440,193],{"class":143},[133,442,443],{"class":375}," 9999",[133,445,394],{"class":143},[133,447,394],{"class":143},[133,449,162],{"class":139},[133,451,452,454,456,458,460,462,465,467,469,472,474,476,478,480,482,485,487,489,492,494,496,498],{"class":135,"line":287},[133,453,351],{"class":139},[133,455,78],{"class":143},[133,457,356],{"class":146},[133,459,150],{"class":139},[133,461,361],{"class":143},[133,463,464],{"class":189}," payment",[133,466,193],{"class":143},[133,468,186],{"class":143},[133,470,471],{"class":189}," method",[133,473,193],{"class":143},[133,475,386],{"class":143},[133,477,96],{"class":156},[133,479,153],{"class":143},[133,481,183],{"class":143},[133,483,484],{"class":189}," status",[133,486,193],{"class":143},[133,488,386],{"class":143},[133,490,491],{"class":156},"success",[133,493,153],{"class":143},[133,495,394],{"class":143},[133,497,394],{"class":143},[133,499,162],{"class":139},[133,501,503],{"class":135,"line":502},7,[133,504,346],{"emptyLinePlaceholder":345},[133,506,508,512,514,517,519,523],{"class":135,"line":507},8,[133,509,511],{"class":510},"s7zQu","return",[133,513,186],{"class":143},[133,515,516],{"class":189}," success",[133,518,193],{"class":143},[133,520,522],{"class":521},"sfNiH"," true",[133,524,525],{"class":143}," }\n",[122,527,532],{"className":528,"code":529,"filename":530,"language":531,"meta":128,"style":128},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[INFO] POST /api/checkout (234ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { id: 42, items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n  status: 200\n","Output","bash",[130,533,534,554,578,603,632],{"__ignoreMap":128},[133,535,536,539,542,545,548,552],{"class":135,"line":136},[133,537,538],{"class":143},"[",[133,540,541],{"class":139},"INFO",[133,543,544],{"class":143},"]",[133,546,547],{"class":139}," POST /api/checkout (",[133,549,551],{"class":550},"sBMFI","234ms",[133,553,162],{"class":139},[133,555,556,559,561,564,567,570,572,574,576],{"class":135,"line":165},[133,557,558],{"class":550},"  user:",[133,560,186],{"class":156},[133,562,563],{"class":156}," id:",[133,565,566],{"class":156}," 1,",[133,568,569],{"class":156}," plan:",[133,571,386],{"class":143},[133,573,389],{"class":156},[133,575,153],{"class":143},[133,577,525],{"class":156},[133,579,580,583,585,587,590,593,596,599,601],{"class":135,"line":209},[133,581,582],{"class":550},"  cart:",[133,584,186],{"class":156},[133,586,563],{"class":156},[133,588,589],{"class":156}," 42,",[133,591,592],{"class":156}," items:",[133,594,595],{"class":156}," 3,",[133,597,598],{"class":156}," total:",[133,600,443],{"class":375},[133,602,525],{"class":156},[133,604,605,608,610,613,615,617,619,621,624,626,628,630],{"class":135,"line":247},[133,606,607],{"class":550},"  payment:",[133,609,186],{"class":156},[133,611,612],{"class":156}," method:",[133,614,386],{"class":143},[133,616,96],{"class":156},[133,618,153],{"class":143},[133,620,183],{"class":156},[133,622,623],{"class":156}," status:",[133,625,386],{"class":143},[133,627,491],{"class":156},[133,629,153],{"class":143},[133,631,525],{"class":156},[133,633,634,637],{"class":135,"line":267},[133,635,636],{"class":550},"  status:",[133,638,639],{"class":375}," 200\n",[55,641,642],{},"One log, all context. Everything you need to understand what happened during that request.",[80,644,35],{"id":645},"structured-errors",[55,647,648],{},"Traditional errors are opaque:",[122,650,652],{"className":124,"code":651,"language":127,"meta":128,"style":128},"throw new Error('Payment failed')\n",[130,653,654],{"__ignoreMap":128},[133,655,656,659,662,665,667,669,672,674],{"class":135,"line":136},[133,657,658],{"class":510},"throw",[133,660,661],{"class":143}," new",[133,663,664],{"class":146}," Error",[133,666,150],{"class":139},[133,668,153],{"class":143},[133,670,671],{"class":156},"Payment failed",[133,673,153],{"class":143},[133,675,162],{"class":139},[55,677,678],{},"Structured errors provide actionable context:",[309,680,681,784],{},[122,682,684],{"className":124,"code":683,"filename":314,"language":127,"meta":128,"style":128},"// server/api/checkout.post.ts\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer (insufficient funds)',\n  fix: 'Try a different payment method or contact your bank',\n  link: 'https://docs.example.com/payments/declined',\n})\n",[130,685,686,690,702,718,730,746,762,778],{"__ignoreMap":128},[133,687,688],{"class":135,"line":136},[133,689,322],{"class":321},[133,691,692,694,697,699],{"class":135,"line":165},[133,693,658],{"class":510},[133,695,696],{"class":146}," createError",[133,698,150],{"class":139},[133,700,701],{"class":143},"{\n",[133,703,704,707,709,711,713,715],{"class":135,"line":209},[133,705,706],{"class":189},"  message",[133,708,193],{"class":143},[133,710,386],{"class":143},[133,712,671],{"class":156},[133,714,153],{"class":143},[133,716,717],{"class":143},",\n",[133,719,720,723,725,728],{"class":135,"line":247},[133,721,722],{"class":189},"  status",[133,724,193],{"class":143},[133,726,727],{"class":375}," 402",[133,729,717],{"class":143},[133,731,732,735,737,739,742,744],{"class":135,"line":267},[133,733,734],{"class":189},"  why",[133,736,193],{"class":143},[133,738,386],{"class":143},[133,740,741],{"class":156},"Card declined by issuer (insufficient funds)",[133,743,153],{"class":143},[133,745,717],{"class":143},[133,747,748,751,753,755,758,760],{"class":135,"line":287},[133,749,750],{"class":189},"  fix",[133,752,193],{"class":143},[133,754,386],{"class":143},[133,756,757],{"class":156},"Try a different payment method or contact your bank",[133,759,153],{"class":143},[133,761,717],{"class":143},[133,763,764,767,769,771,774,776],{"class":135,"line":502},[133,765,766],{"class":189},"  link",[133,768,193],{"class":143},[133,770,386],{"class":143},[133,772,773],{"class":156},"https://docs.example.com/payments/declined",[133,775,153],{"class":143},[133,777,717],{"class":143},[133,779,780,782],{"class":135,"line":507},[133,781,204],{"class":143},[133,783,162],{"class":139},[122,785,790],{"className":786,"code":787,"filename":788,"language":789,"meta":128,"style":128},"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 (insufficient funds)\",\n    \"fix\": \"Try a different payment method or contact your bank\",\n    \"link\": \"https://docs.example.com/payments/declined\"\n  }\n}\n","Response","json",[130,791,792,796,813,833,847,867,886,904,909],{"__ignoreMap":128},[133,793,794],{"class":135,"line":136},[133,795,701],{"class":143},[133,797,798,801,804,807,809,811],{"class":135,"line":165},[133,799,800],{"class":143},"  \"",[133,802,803],{"class":327},"statusCode",[133,805,806],{"class":143},"\"",[133,808,193],{"class":143},[133,810,727],{"class":375},[133,812,717],{"class":143},[133,814,815,817,820,822,824,827,829,831],{"class":135,"line":209},[133,816,800],{"class":143},[133,818,819],{"class":327},"message",[133,821,806],{"class":143},[133,823,193],{"class":143},[133,825,826],{"class":143}," \"",[133,828,671],{"class":156},[133,830,806],{"class":143},[133,832,717],{"class":143},[133,834,835,837,840,842,844],{"class":135,"line":247},[133,836,800],{"class":143},[133,838,839],{"class":327},"data",[133,841,806],{"class":143},[133,843,193],{"class":143},[133,845,846],{"class":143}," {\n",[133,848,849,852,855,857,859,861,863,865],{"class":135,"line":267},[133,850,851],{"class":143},"    \"",[133,853,854],{"class":550},"why",[133,856,806],{"class":143},[133,858,193],{"class":143},[133,860,826],{"class":143},[133,862,741],{"class":156},[133,864,806],{"class":143},[133,866,717],{"class":143},[133,868,869,871,874,876,878,880,882,884],{"class":135,"line":287},[133,870,851],{"class":143},[133,872,873],{"class":550},"fix",[133,875,806],{"class":143},[133,877,193],{"class":143},[133,879,826],{"class":143},[133,881,757],{"class":156},[133,883,806],{"class":143},[133,885,717],{"class":143},[133,887,888,890,893,895,897,899,901],{"class":135,"line":502},[133,889,851],{"class":143},[133,891,892],{"class":550},"link",[133,894,806],{"class":143},[133,896,193],{"class":143},[133,898,826],{"class":143},[133,900,773],{"class":156},[133,902,903],{"class":143},"\"\n",[133,905,906],{"class":135,"line":507},[133,907,908],{"class":143},"  }\n",[133,910,912],{"class":135,"line":911},9,[133,913,914],{"class":143},"}\n",[55,916,917,918,920,921,923,924,926],{},"With ",[130,919,854],{},", ",[130,922,873],{},", and ",[130,925,892],{}," fields, anyone debugging—human or AI—can immediately understand the root cause and how to resolve it.",[80,928,930],{"id":929},"why-context-matters","Why Context Matters",[55,932,933,934,937],{},"We're entering an era where AI agents build, debug, and maintain applications. These agents need ",[58,935,936],{},"structured context"," to work effectively:",[939,940,941,949,956],"ul",{},[942,943,944,948],"li",{},[58,945,946],{},[130,947,854],{},": The root cause, so the agent understands what went wrong",[942,950,951,955],{},[58,952,953],{},[130,954,873],{},": An actionable solution the agent can suggest or apply",[942,957,958,962],{},[58,959,960],{},[130,961,892],{},": Documentation for complex issues",[55,964,965,966,969,970,973],{},"Traditional ",[130,967,968],{},"console.log"," and generic ",[130,971,972],{},"throw new Error()"," provide no actionable context. evlog's structured output is designed for both humans and AI to parse and act on.",[80,975,977],{"id":976},"next-steps","Next Steps",[939,979,980,985],{},[942,981,982,984],{},[66,983,15],{"href":16}," - Install evlog in your project",[942,986,987,989],{},[66,988,19],{"href":20}," - Get up and running in minutes",[991,992,993],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":128,"searchDepth":165,"depth":165,"links":995},[996,997,998,999,1000],{"id":82,"depth":165,"text":83},{"id":116,"depth":165,"text":117},{"id":645,"depth":165,"text":35},{"id":929,"depth":165,"text":930},{"id":976,"depth":165,"text":977},"A TypeScript logging library focused on wide events and structured error handling.","md",null,{},{"title":11,"description":1001},"FW4ZvVaYcMqUzCHd0FZoaqaCTXLmBI_fsFSSEXiVD60",[1003,1008],{"title":15,"path":16,"stem":17,"description":1009,"children":-1},"Install evlog in your Nuxt, Nitro, or standalone TypeScript project.",1769680624828]