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