[{"data":1,"prerenderedAt":1843},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":49,"-getting-started-installation-surround":1838},[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":15,"body":51,"description":1832,"extension":1833,"links":1834,"meta":1835,"navigation":1546,"path":16,"seo":1836,"stem":17,"__hash__":1837},"docs/1.getting-started/2.installation.md",{"type":52,"value":53,"toc":1821},"minimark",[54,58,63,66,138,141,285,290,442,445,448,453,461,606,623,627,634,794,801,805,812,987,1010,1014,1025,1212,1218,1244,1442,1449,1453,1456,1501,1505,1508,1787,1795,1799,1802,1806,1810,1817],[55,56,57],"p",{},"evlog supports multiple environments: Nuxt, Nitro, and standalone TypeScript.",[59,60,62],"h2",{"id":61},"nuxt","Nuxt",[55,64,65],{},"Add evlog as a Nuxt module:",[67,68,69,95,110,124],"code-group",{},[70,71,77],"pre",{"className":72,"code":73,"filename":74,"language":75,"meta":76,"style":76},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[78,79,80],"code",{"__ignoreMap":76},[81,82,85,88,92],"span",{"class":83,"line":84},"line",1,[81,86,74],{"class":87},"sBMFI",[81,89,91],{"class":90},"sfazB"," add",[81,93,94],{"class":90}," evlog\n",[70,96,99],{"className":72,"code":97,"filename":98,"language":75,"meta":76,"style":76},"npm install evlog\n","npm",[78,100,101],{"__ignoreMap":76},[81,102,103,105,108],{"class":83,"line":84},[81,104,98],{"class":87},[81,106,107],{"class":90}," install",[81,109,94],{"class":90},[70,111,114],{"className":72,"code":112,"filename":113,"language":75,"meta":76,"style":76},"yarn add evlog\n","yarn",[78,115,116],{"__ignoreMap":76},[81,117,118,120,122],{"class":83,"line":84},[81,119,113],{"class":87},[81,121,91],{"class":90},[81,123,94],{"class":90},[70,125,128],{"className":72,"code":126,"filename":127,"language":75,"meta":76,"style":76},"bun add evlog\n","bun",[78,129,130],{"__ignoreMap":76},[81,131,132,134,136],{"class":83,"line":84},[81,133,127],{"class":87},[81,135,91],{"class":90},[81,137,94],{"class":90},[55,139,140],{},"Then add it to your Nuxt config:",[70,142,147],{"className":143,"code":144,"filename":145,"language":146,"meta":76,"style":76},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'my-app',\n    },\n    // Optional: only log specific routes (supports glob patterns)\n    include: ['/api/**'],\n  },\n})\n","nuxt.config.ts","typescript",[78,148,149,170,197,208,218,236,242,249,270,276],{"__ignoreMap":76},[81,150,151,155,158,162,166],{"class":83,"line":84},[81,152,154],{"class":153},"s7zQu","export",[81,156,157],{"class":153}," default",[81,159,161],{"class":160},"s2Zo4"," defineNuxtConfig",[81,163,165],{"class":164},"sTEyZ","(",[81,167,169],{"class":168},"sMK4o","{\n",[81,171,173,177,180,183,186,189,191,194],{"class":83,"line":172},2,[81,174,176],{"class":175},"swJcz","  modules",[81,178,179],{"class":168},":",[81,181,182],{"class":164}," [",[81,184,185],{"class":168},"'",[81,187,188],{"class":90},"evlog/nuxt",[81,190,185],{"class":168},[81,192,193],{"class":164},"]",[81,195,196],{"class":168},",\n",[81,198,200,203,205],{"class":83,"line":199},3,[81,201,202],{"class":175},"  evlog",[81,204,179],{"class":168},[81,206,207],{"class":168}," {\n",[81,209,211,214,216],{"class":83,"line":210},4,[81,212,213],{"class":175},"    env",[81,215,179],{"class":168},[81,217,207],{"class":168},[81,219,221,224,226,229,232,234],{"class":83,"line":220},5,[81,222,223],{"class":175},"      service",[81,225,179],{"class":168},[81,227,228],{"class":168}," '",[81,230,231],{"class":90},"my-app",[81,233,185],{"class":168},[81,235,196],{"class":168},[81,237,239],{"class":83,"line":238},6,[81,240,241],{"class":168},"    },\n",[81,243,245],{"class":83,"line":244},7,[81,246,248],{"class":247},"sHwdD","    // Optional: only log specific routes (supports glob patterns)\n",[81,250,252,255,257,259,261,264,266,268],{"class":83,"line":251},8,[81,253,254],{"class":175},"    include",[81,256,179],{"class":168},[81,258,182],{"class":164},[81,260,185],{"class":168},[81,262,263],{"class":90},"/api/**",[81,265,185],{"class":168},[81,267,193],{"class":164},[81,269,196],{"class":168},[81,271,273],{"class":83,"line":272},9,[81,274,275],{"class":168},"  },\n",[81,277,279,282],{"class":83,"line":278},10,[81,280,281],{"class":168},"}",[81,283,284],{"class":164},")\n",[286,287,289],"h3",{"id":288},"configuration-options","Configuration Options",[291,292,293,312],"table",{},[294,295,296],"thead",{},[297,298,299,303,306,309],"tr",{},[300,301,302],"th",{},"Option",[300,304,305],{},"Type",[300,307,308],{},"Default",[300,310,311],{},"Description",[313,314,315,336,353,376,397,421],"tbody",{},[297,316,317,323,328,333],{},[318,319,320],"td",{},[78,321,322],{},"env.service",[318,324,325],{},[78,326,327],{},"string",[318,329,330],{},[78,331,332],{},"'app'",[318,334,335],{},"Service name shown in logs",[297,337,338,343,347,350],{},[318,339,340],{},[78,341,342],{},"env.environment",[318,344,345],{},[78,346,327],{},[318,348,349],{},"Auto-detected",[318,351,352],{},"Environment name",[297,354,355,360,365,370],{},[318,356,357],{},[78,358,359],{},"include",[318,361,362],{},[78,363,364],{},"string[]",[318,366,367],{},[78,368,369],{},"undefined",[318,371,372,373,375],{},"Route patterns to log. Supports glob (",[78,374,263],{},"). If not set, all routes are logged",[297,377,378,383,388,394],{},[318,379,380],{},[78,381,382],{},"pretty",[318,384,385],{},[78,386,387],{},"boolean",[318,389,390,393],{},[78,391,392],{},"true"," in dev",[318,395,396],{},"Pretty print with tree formatting",[297,398,399,404,409,413],{},[318,400,401],{},[78,402,403],{},"sampling.rates",[318,405,406],{},[78,407,408],{},"object",[318,410,411],{},[78,412,369],{},[318,414,415,416],{},"Head sampling rates per log level (0-100%). See ",[417,418,420],"a",{"href":419},"#sampling","Sampling",[297,422,423,428,433,437],{},[318,424,425],{},[78,426,427],{},"sampling.keep",[318,429,430],{},[78,431,432],{},"array",[318,434,435],{},[78,436,369],{},[318,438,439,440],{},"Tail sampling conditions to force-keep logs. See ",[417,441,420],{"href":419},[286,443,420],{"id":444},"sampling",[55,446,447],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[449,450,452],"h4",{"id":451},"head-sampling-rates","Head Sampling (rates)",[55,454,455,456,460],{},"Random sampling based on log level, decided ",[457,458,459],"strong",{},"before"," the request completes:",[70,462,464],{"className":143,"code":463,"filename":145,"language":146,"meta":76,"style":76},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,    // Keep 10% of info logs\n        warn: 50,    // Keep 50% of warning logs\n        debug: 5,    // Keep 5% of debug logs\n        error: 100,  // Always keep errors (default)\n      },\n    },\n  },\n})\n",[78,465,466,478,496,504,513,522,539,554,569,584,589,594,599],{"__ignoreMap":76},[81,467,468,470,472,474,476],{"class":83,"line":84},[81,469,154],{"class":153},[81,471,157],{"class":153},[81,473,161],{"class":160},[81,475,165],{"class":164},[81,477,169],{"class":168},[81,479,480,482,484,486,488,490,492,494],{"class":83,"line":172},[81,481,176],{"class":175},[81,483,179],{"class":168},[81,485,182],{"class":164},[81,487,185],{"class":168},[81,489,188],{"class":90},[81,491,185],{"class":168},[81,493,193],{"class":164},[81,495,196],{"class":168},[81,497,498,500,502],{"class":83,"line":199},[81,499,202],{"class":175},[81,501,179],{"class":168},[81,503,207],{"class":168},[81,505,506,509,511],{"class":83,"line":210},[81,507,508],{"class":175},"    sampling",[81,510,179],{"class":168},[81,512,207],{"class":168},[81,514,515,518,520],{"class":83,"line":220},[81,516,517],{"class":175},"      rates",[81,519,179],{"class":168},[81,521,207],{"class":168},[81,523,524,527,529,533,536],{"class":83,"line":238},[81,525,526],{"class":175},"        info",[81,528,179],{"class":168},[81,530,532],{"class":531},"sbssI"," 10",[81,534,535],{"class":168},",",[81,537,538],{"class":247},"    // Keep 10% of info logs\n",[81,540,541,544,546,549,551],{"class":83,"line":244},[81,542,543],{"class":175},"        warn",[81,545,179],{"class":168},[81,547,548],{"class":531}," 50",[81,550,535],{"class":168},[81,552,553],{"class":247},"    // Keep 50% of warning logs\n",[81,555,556,559,561,564,566],{"class":83,"line":251},[81,557,558],{"class":175},"        debug",[81,560,179],{"class":168},[81,562,563],{"class":531}," 5",[81,565,535],{"class":168},[81,567,568],{"class":247},"    // Keep 5% of debug logs\n",[81,570,571,574,576,579,581],{"class":83,"line":272},[81,572,573],{"class":175},"        error",[81,575,179],{"class":168},[81,577,578],{"class":531}," 100",[81,580,535],{"class":168},[81,582,583],{"class":247},"  // Always keep errors (default)\n",[81,585,586],{"class":83,"line":278},[81,587,588],{"class":168},"      },\n",[81,590,592],{"class":83,"line":591},11,[81,593,241],{"class":168},[81,595,597],{"class":83,"line":596},12,[81,598,275],{"class":168},[81,600,602,604],{"class":83,"line":601},13,[81,603,281],{"class":168},[81,605,284],{"class":164},[607,608,611,614,615,618,619,622],"callout",{"color":609,"icon":610},"success","i-lucide-shield-check",[457,612,613],{},"Errors are always logged by default."," Even if you don't specify ",[78,616,617],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[78,620,621],{},"error: 0",".",[449,624,626],{"id":625},"tail-sampling-keep","Tail Sampling (keep)",[55,628,629,630,633],{},"Force-keep logs based on request outcome, evaluated ",[457,631,632],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[70,635,637],{"className":143,"code":636,"filename":145,"language":146,"meta":76,"style":76},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    sampling: {\n      rates: { info: 10 },  // Only 10% of info logs\n      keep: [\n        { duration: 1000 },           // Always keep if duration >= 1000ms\n        { status: 400 },              // Always keep if status >= 400\n        { path: '/api/critical/**' }, // Always keep critical paths\n      ],\n    },\n  },\n})\n",[78,638,639,651,669,677,685,707,717,735,752,773,780,784,788],{"__ignoreMap":76},[81,640,641,643,645,647,649],{"class":83,"line":84},[81,642,154],{"class":153},[81,644,157],{"class":153},[81,646,161],{"class":160},[81,648,165],{"class":164},[81,650,169],{"class":168},[81,652,653,655,657,659,661,663,665,667],{"class":83,"line":172},[81,654,176],{"class":175},[81,656,179],{"class":168},[81,658,182],{"class":164},[81,660,185],{"class":168},[81,662,188],{"class":90},[81,664,185],{"class":168},[81,666,193],{"class":164},[81,668,196],{"class":168},[81,670,671,673,675],{"class":83,"line":199},[81,672,202],{"class":175},[81,674,179],{"class":168},[81,676,207],{"class":168},[81,678,679,681,683],{"class":83,"line":210},[81,680,508],{"class":175},[81,682,179],{"class":168},[81,684,207],{"class":168},[81,686,687,689,691,694,697,699,701,704],{"class":83,"line":220},[81,688,517],{"class":175},[81,690,179],{"class":168},[81,692,693],{"class":168}," {",[81,695,696],{"class":175}," info",[81,698,179],{"class":168},[81,700,532],{"class":531},[81,702,703],{"class":168}," },",[81,705,706],{"class":247},"  // Only 10% of info logs\n",[81,708,709,712,714],{"class":83,"line":238},[81,710,711],{"class":175},"      keep",[81,713,179],{"class":168},[81,715,716],{"class":164}," [\n",[81,718,719,722,725,727,730,732],{"class":83,"line":244},[81,720,721],{"class":168},"        {",[81,723,724],{"class":175}," duration",[81,726,179],{"class":168},[81,728,729],{"class":531}," 1000",[81,731,703],{"class":168},[81,733,734],{"class":247},"           // Always keep if duration >= 1000ms\n",[81,736,737,739,742,744,747,749],{"class":83,"line":251},[81,738,721],{"class":168},[81,740,741],{"class":175}," status",[81,743,179],{"class":168},[81,745,746],{"class":531}," 400",[81,748,703],{"class":168},[81,750,751],{"class":247},"              // Always keep if status >= 400\n",[81,753,754,756,759,761,763,766,768,770],{"class":83,"line":272},[81,755,721],{"class":168},[81,757,758],{"class":175}," path",[81,760,179],{"class":168},[81,762,228],{"class":168},[81,764,765],{"class":90},"/api/critical/**",[81,767,185],{"class":168},[81,769,703],{"class":168},[81,771,772],{"class":247}," // Always keep critical paths\n",[81,774,775,778],{"class":83,"line":278},[81,776,777],{"class":164},"      ]",[81,779,196],{"class":168},[81,781,782],{"class":83,"line":591},[81,783,241],{"class":168},[81,785,786],{"class":83,"line":596},[81,787,275],{"class":168},[81,789,790,792],{"class":83,"line":601},[81,791,281],{"class":168},[81,793,284],{"class":164},[55,795,796,797,800],{},"Conditions use ",[78,798,799],{},">="," comparison and follow OR logic (any match = keep).",[449,802,804],{"id":803},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[55,806,807,808,811],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[78,809,810],{},"evlog:emit:keep"," Nitro hook:",[70,813,816],{"className":143,"code":814,"filename":815,"language":146,"meta":76,"style":76},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    // Always keep logs for premium users\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server/plugins/evlog-custom.ts",[78,817,818,844,881,886,933,953,969,974,981],{"__ignoreMap":76},[81,819,820,822,824,827,829,831,835,838,842],{"class":83,"line":84},[81,821,154],{"class":153},[81,823,157],{"class":153},[81,825,826],{"class":160}," defineNitroPlugin",[81,828,165],{"class":164},[81,830,165],{"class":168},[81,832,834],{"class":833},"sHdIc","nitroApp",[81,836,837],{"class":168},")",[81,839,841],{"class":840},"spNyl"," =>",[81,843,207],{"class":168},[81,845,846,849,851,854,856,859,861,863,865,867,869,872,875,877,879],{"class":83,"line":172},[81,847,848],{"class":164},"  nitroApp",[81,850,622],{"class":168},[81,852,853],{"class":164},"hooks",[81,855,622],{"class":168},[81,857,858],{"class":160},"hook",[81,860,165],{"class":175},[81,862,185],{"class":168},[81,864,810],{"class":90},[81,866,185],{"class":168},[81,868,535],{"class":168},[81,870,871],{"class":168}," (",[81,873,874],{"class":833},"ctx",[81,876,837],{"class":168},[81,878,841],{"class":840},[81,880,207],{"class":168},[81,882,883],{"class":83,"line":199},[81,884,885],{"class":247},"    // Always keep logs for premium users\n",[81,887,888,891,894,897,900,902,905,907,910,913,915,918,921,924,927,930],{"class":83,"line":210},[81,889,890],{"class":840},"    const",[81,892,893],{"class":164}," user",[81,895,896],{"class":168}," =",[81,898,899],{"class":164}," ctx",[81,901,622],{"class":168},[81,903,904],{"class":164},"context",[81,906,622],{"class":168},[81,908,909],{"class":164},"user",[81,911,912],{"class":153}," as",[81,914,693],{"class":168},[81,916,917],{"class":175}," premium",[81,919,920],{"class":168},"?:",[81,922,923],{"class":87}," boolean",[81,925,926],{"class":168}," }",[81,928,929],{"class":168}," |",[81,931,932],{"class":87}," undefined\n",[81,934,935,938,940,942,945,948,951],{"class":83,"line":220},[81,936,937],{"class":153},"    if",[81,939,871],{"class":175},[81,941,909],{"class":164},[81,943,944],{"class":168},"?.",[81,946,947],{"class":164},"premium",[81,949,950],{"class":175},") ",[81,952,169],{"class":168},[81,954,955,958,960,963,965],{"class":83,"line":238},[81,956,957],{"class":164},"      ctx",[81,959,622],{"class":168},[81,961,962],{"class":164},"shouldKeep",[81,964,896],{"class":168},[81,966,968],{"class":967},"sfNiH"," true\n",[81,970,971],{"class":83,"line":244},[81,972,973],{"class":168},"    }\n",[81,975,976,979],{"class":83,"line":251},[81,977,978],{"class":168},"  }",[81,980,284],{"class":175},[81,982,983,985],{"class":83,"line":272},[81,984,281],{"class":168},[81,986,284],{"class":164},[55,988,989,990,993,994,997,998,997,1001,997,1004,1007,1008,622],{},"The hook receives a ",[78,991,992],{},"TailSamplingContext"," with ",[78,995,996],{},"status",", ",[78,999,1000],{},"duration",[78,1002,1003],{},"path",[78,1005,1006],{},"method",", and the full accumulated ",[78,1009,904],{},[286,1011,1013],{"id":1012},"log-draining","Log Draining",[55,1015,1016,1017,1020,1021,1024],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[78,1018,1019],{},"evlog:drain"," hook. The hook is called in ",[457,1022,1023],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[70,1026,1029],{"className":143,"code":1027,"filename":1028,"language":146,"meta":76,"style":76},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    await fetch('https://api.axiom.co/v1/datasets/logs/ingest', {\n      method: 'POST',\n      headers: { Authorization: `Bearer ${process.env.AXIOM_TOKEN}` },\n      body: JSON.stringify([ctx.event])\n    })\n  })\n})\n","server/plugins/evlog-axiom.ts",[78,1030,1031,1051,1086,1107,1123,1165,1193,1200,1206],{"__ignoreMap":76},[81,1032,1033,1035,1037,1039,1041,1043,1045,1047,1049],{"class":83,"line":84},[81,1034,154],{"class":153},[81,1036,157],{"class":153},[81,1038,826],{"class":160},[81,1040,165],{"class":164},[81,1042,165],{"class":168},[81,1044,834],{"class":833},[81,1046,837],{"class":168},[81,1048,841],{"class":840},[81,1050,207],{"class":168},[81,1052,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1076,1078,1080,1082,1084],{"class":83,"line":172},[81,1054,848],{"class":164},[81,1056,622],{"class":168},[81,1058,853],{"class":164},[81,1060,622],{"class":168},[81,1062,858],{"class":160},[81,1064,165],{"class":175},[81,1066,185],{"class":168},[81,1068,1019],{"class":90},[81,1070,185],{"class":168},[81,1072,535],{"class":168},[81,1074,1075],{"class":840}," async",[81,1077,871],{"class":168},[81,1079,874],{"class":833},[81,1081,837],{"class":168},[81,1083,841],{"class":840},[81,1085,207],{"class":168},[81,1087,1088,1091,1094,1096,1098,1101,1103,1105],{"class":83,"line":199},[81,1089,1090],{"class":153},"    await",[81,1092,1093],{"class":160}," fetch",[81,1095,165],{"class":175},[81,1097,185],{"class":168},[81,1099,1100],{"class":90},"https://api.axiom.co/v1/datasets/logs/ingest",[81,1102,185],{"class":168},[81,1104,535],{"class":168},[81,1106,207],{"class":168},[81,1108,1109,1112,1114,1116,1119,1121],{"class":83,"line":210},[81,1110,1111],{"class":175},"      method",[81,1113,179],{"class":168},[81,1115,228],{"class":168},[81,1117,1118],{"class":90},"POST",[81,1120,185],{"class":168},[81,1122,196],{"class":168},[81,1124,1125,1128,1130,1132,1135,1137,1140,1143,1146,1149,1151,1154,1156,1159,1162],{"class":83,"line":220},[81,1126,1127],{"class":175},"      headers",[81,1129,179],{"class":168},[81,1131,693],{"class":168},[81,1133,1134],{"class":175}," Authorization",[81,1136,179],{"class":168},[81,1138,1139],{"class":168}," `",[81,1141,1142],{"class":90},"Bearer ",[81,1144,1145],{"class":168},"${",[81,1147,1148],{"class":164},"process",[81,1150,622],{"class":168},[81,1152,1153],{"class":164},"env",[81,1155,622],{"class":168},[81,1157,1158],{"class":164},"AXIOM_TOKEN",[81,1160,1161],{"class":168},"}`",[81,1163,1164],{"class":168}," },\n",[81,1166,1167,1170,1172,1175,1177,1180,1183,1185,1187,1190],{"class":83,"line":238},[81,1168,1169],{"class":175},"      body",[81,1171,179],{"class":168},[81,1173,1174],{"class":164}," JSON",[81,1176,622],{"class":168},[81,1178,1179],{"class":160},"stringify",[81,1181,1182],{"class":175},"([",[81,1184,874],{"class":164},[81,1186,622],{"class":168},[81,1188,1189],{"class":164},"event",[81,1191,1192],{"class":175},"])\n",[81,1194,1195,1198],{"class":83,"line":244},[81,1196,1197],{"class":168},"    }",[81,1199,284],{"class":175},[81,1201,1202,1204],{"class":83,"line":251},[81,1203,978],{"class":168},[81,1205,284],{"class":175},[81,1207,1208,1210],{"class":83,"line":272},[81,1209,281],{"class":168},[81,1211,284],{"class":164},[55,1213,989,1214,1217],{},[78,1215,1216],{},"DrainContext"," with:",[1219,1220,1221,1231],"ul",{},[1222,1223,1224,1226,1227,1230],"li",{},[78,1225,1189],{},": The complete ",[78,1228,1229],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[1222,1232,1233,1236,1237,997,1239,997,1241,837],{},[78,1234,1235],{},"request",": Optional request metadata (",[78,1238,1006],{},[78,1240,1003],{},[78,1242,1243],{},"requestId",[607,1245,1248,1258],{"color":1246,"icon":1247},"info","i-lucide-lightbulb",[55,1249,1250,1253,1254,1257],{},[457,1251,1252],{},"Tip:"," Use Nuxt's ",[78,1255,1256],{},"$production"," override to sample only in production while keeping full visibility in development:",[70,1259,1261],{"className":143,"code":1260,"language":146,"meta":76,"style":76},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[78,1262,1263,1275,1293,1301,1322,1326,1335,1344,1353,1389,1423,1427,1431,1435],{"__ignoreMap":76},[81,1264,1265,1267,1269,1271,1273],{"class":83,"line":84},[81,1266,154],{"class":153},[81,1268,157],{"class":153},[81,1270,161],{"class":160},[81,1272,165],{"class":164},[81,1274,169],{"class":168},[81,1276,1277,1279,1281,1283,1285,1287,1289,1291],{"class":83,"line":172},[81,1278,176],{"class":175},[81,1280,179],{"class":168},[81,1282,182],{"class":164},[81,1284,185],{"class":168},[81,1286,188],{"class":90},[81,1288,185],{"class":168},[81,1290,193],{"class":164},[81,1292,196],{"class":168},[81,1294,1295,1297,1299],{"class":83,"line":199},[81,1296,202],{"class":175},[81,1298,179],{"class":168},[81,1300,207],{"class":168},[81,1302,1303,1305,1307,1309,1312,1314,1316,1318,1320],{"class":83,"line":210},[81,1304,213],{"class":175},[81,1306,179],{"class":168},[81,1308,693],{"class":168},[81,1310,1311],{"class":175}," service",[81,1313,179],{"class":168},[81,1315,228],{"class":168},[81,1317,231],{"class":90},[81,1319,185],{"class":168},[81,1321,1164],{"class":168},[81,1323,1324],{"class":83,"line":220},[81,1325,275],{"class":168},[81,1327,1328,1331,1333],{"class":83,"line":238},[81,1329,1330],{"class":175},"  $production",[81,1332,179],{"class":168},[81,1334,207],{"class":168},[81,1336,1337,1340,1342],{"class":83,"line":244},[81,1338,1339],{"class":175},"    evlog",[81,1341,179],{"class":168},[81,1343,207],{"class":168},[81,1345,1346,1349,1351],{"class":83,"line":251},[81,1347,1348],{"class":175},"      sampling",[81,1350,179],{"class":168},[81,1352,207],{"class":168},[81,1354,1355,1358,1360,1362,1364,1366,1368,1370,1373,1375,1377,1379,1382,1384,1387],{"class":83,"line":272},[81,1356,1357],{"class":175},"        rates",[81,1359,179],{"class":168},[81,1361,693],{"class":168},[81,1363,696],{"class":175},[81,1365,179],{"class":168},[81,1367,532],{"class":531},[81,1369,535],{"class":168},[81,1371,1372],{"class":175}," warn",[81,1374,179],{"class":168},[81,1376,548],{"class":531},[81,1378,535],{"class":168},[81,1380,1381],{"class":175}," debug",[81,1383,179],{"class":168},[81,1385,1386],{"class":531}," 0",[81,1388,1164],{"class":168},[81,1390,1391,1394,1396,1398,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421],{"class":83,"line":278},[81,1392,1393],{"class":175},"        keep",[81,1395,179],{"class":168},[81,1397,182],{"class":164},[81,1399,1400],{"class":168},"{",[81,1402,724],{"class":175},[81,1404,179],{"class":168},[81,1406,729],{"class":531},[81,1408,703],{"class":168},[81,1410,693],{"class":168},[81,1412,741],{"class":175},[81,1414,179],{"class":168},[81,1416,746],{"class":531},[81,1418,926],{"class":168},[81,1420,193],{"class":164},[81,1422,196],{"class":168},[81,1424,1425],{"class":83,"line":591},[81,1426,588],{"class":168},[81,1428,1429],{"class":83,"line":596},[81,1430,241],{"class":168},[81,1432,1433],{"class":83,"line":601},[81,1434,275],{"class":168},[81,1436,1438,1440],{"class":83,"line":1437},14,[81,1439,281],{"class":168},[81,1441,284],{"class":164},[55,1443,1444,1445,1448],{},"That's it! You can now use ",[78,1446,1447],{},"useLogger(event)"," in any API route.",[59,1450,1452],{"id":1451},"nitro","Nitro",[55,1454,1455],{},"For standalone Nitro projects (without Nuxt), add evlog as a plugin:",[70,1457,1460],{"className":143,"code":1458,"filename":1459,"language":146,"meta":76,"style":76},"export default defineNitroConfig({\n  plugins: ['evlog/nitro'],\n})\n","nitro.config.ts",[78,1461,1462,1475,1495],{"__ignoreMap":76},[81,1463,1464,1466,1468,1471,1473],{"class":83,"line":84},[81,1465,154],{"class":153},[81,1467,157],{"class":153},[81,1469,1470],{"class":160}," defineNitroConfig",[81,1472,165],{"class":164},[81,1474,169],{"class":168},[81,1476,1477,1480,1482,1484,1486,1489,1491,1493],{"class":83,"line":172},[81,1478,1479],{"class":175},"  plugins",[81,1481,179],{"class":168},[81,1483,182],{"class":164},[81,1485,185],{"class":168},[81,1487,1488],{"class":90},"evlog/nitro",[81,1490,185],{"class":168},[81,1492,193],{"class":164},[81,1494,196],{"class":168},[81,1496,1497,1499],{"class":83,"line":199},[81,1498,281],{"class":168},[81,1500,284],{"class":164},[59,1502,1504],{"id":1503},"standalone-typescript","Standalone TypeScript",[55,1506,1507],{},"For scripts, workers, CLI tools, or any TypeScript project:",[70,1509,1512],{"className":143,"code":1510,"filename":1511,"language":146,"meta":76,"style":76},"import { initLogger, createRequestLogger } from 'evlog'\n\n// Initialize once at startup\ninitLogger({\n  env: {\n    service: 'my-worker',\n    environment: 'production',\n  },\n  // Optional: sample logs\n  sampling: {\n    rates: { info: 10, debug: 5 },\n  },\n})\n\n// Create a logger for each operation\nconst log = createRequestLogger({ jobId: job.id })\nlog.set({ source: job.source, target: job.target })\nlog.set({ recordsSynced: 150 })\nlog.emit() // Manual emit required in standalone mode\n","scripts/sync-job.ts",[78,1513,1514,1542,1548,1553,1562,1571,1587,1603,1607,1612,1621,1646,1650,1656,1660,1666,1701,1746,1771],{"__ignoreMap":76},[81,1515,1516,1519,1521,1524,1526,1529,1531,1534,1536,1539],{"class":83,"line":84},[81,1517,1518],{"class":153},"import",[81,1520,693],{"class":168},[81,1522,1523],{"class":164}," initLogger",[81,1525,535],{"class":168},[81,1527,1528],{"class":164}," createRequestLogger",[81,1530,926],{"class":168},[81,1532,1533],{"class":153}," from",[81,1535,228],{"class":168},[81,1537,1538],{"class":90},"evlog",[81,1540,1541],{"class":168},"'\n",[81,1543,1544],{"class":83,"line":172},[81,1545,1547],{"emptyLinePlaceholder":1546},true,"\n",[81,1549,1550],{"class":83,"line":199},[81,1551,1552],{"class":247},"// Initialize once at startup\n",[81,1554,1555,1558,1560],{"class":83,"line":210},[81,1556,1557],{"class":160},"initLogger",[81,1559,165],{"class":164},[81,1561,169],{"class":168},[81,1563,1564,1567,1569],{"class":83,"line":220},[81,1565,1566],{"class":175},"  env",[81,1568,179],{"class":168},[81,1570,207],{"class":168},[81,1572,1573,1576,1578,1580,1583,1585],{"class":83,"line":238},[81,1574,1575],{"class":175},"    service",[81,1577,179],{"class":168},[81,1579,228],{"class":168},[81,1581,1582],{"class":90},"my-worker",[81,1584,185],{"class":168},[81,1586,196],{"class":168},[81,1588,1589,1592,1594,1596,1599,1601],{"class":83,"line":244},[81,1590,1591],{"class":175},"    environment",[81,1593,179],{"class":168},[81,1595,228],{"class":168},[81,1597,1598],{"class":90},"production",[81,1600,185],{"class":168},[81,1602,196],{"class":168},[81,1604,1605],{"class":83,"line":251},[81,1606,275],{"class":168},[81,1608,1609],{"class":83,"line":272},[81,1610,1611],{"class":247},"  // Optional: sample logs\n",[81,1613,1614,1617,1619],{"class":83,"line":278},[81,1615,1616],{"class":175},"  sampling",[81,1618,179],{"class":168},[81,1620,207],{"class":168},[81,1622,1623,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644],{"class":83,"line":591},[81,1624,1625],{"class":175},"    rates",[81,1627,179],{"class":168},[81,1629,693],{"class":168},[81,1631,696],{"class":175},[81,1633,179],{"class":168},[81,1635,532],{"class":531},[81,1637,535],{"class":168},[81,1639,1381],{"class":175},[81,1641,179],{"class":168},[81,1643,563],{"class":531},[81,1645,1164],{"class":168},[81,1647,1648],{"class":83,"line":596},[81,1649,275],{"class":168},[81,1651,1652,1654],{"class":83,"line":601},[81,1653,281],{"class":168},[81,1655,284],{"class":164},[81,1657,1658],{"class":83,"line":1437},[81,1659,1547],{"emptyLinePlaceholder":1546},[81,1661,1663],{"class":83,"line":1662},15,[81,1664,1665],{"class":247},"// Create a logger for each operation\n",[81,1667,1669,1672,1675,1678,1680,1682,1684,1687,1689,1692,1694,1697,1699],{"class":83,"line":1668},16,[81,1670,1671],{"class":840},"const",[81,1673,1674],{"class":164}," log ",[81,1676,1677],{"class":168},"=",[81,1679,1528],{"class":160},[81,1681,165],{"class":164},[81,1683,1400],{"class":168},[81,1685,1686],{"class":175}," jobId",[81,1688,179],{"class":168},[81,1690,1691],{"class":164}," job",[81,1693,622],{"class":168},[81,1695,1696],{"class":164},"id ",[81,1698,281],{"class":168},[81,1700,284],{"class":164},[81,1702,1704,1707,1709,1712,1714,1716,1719,1721,1723,1725,1728,1730,1733,1735,1737,1739,1742,1744],{"class":83,"line":1703},17,[81,1705,1706],{"class":164},"log",[81,1708,622],{"class":168},[81,1710,1711],{"class":160},"set",[81,1713,165],{"class":164},[81,1715,1400],{"class":168},[81,1717,1718],{"class":175}," source",[81,1720,179],{"class":168},[81,1722,1691],{"class":164},[81,1724,622],{"class":168},[81,1726,1727],{"class":164},"source",[81,1729,535],{"class":168},[81,1731,1732],{"class":175}," target",[81,1734,179],{"class":168},[81,1736,1691],{"class":164},[81,1738,622],{"class":168},[81,1740,1741],{"class":164},"target ",[81,1743,281],{"class":168},[81,1745,284],{"class":164},[81,1747,1749,1751,1753,1755,1757,1759,1762,1764,1767,1769],{"class":83,"line":1748},18,[81,1750,1706],{"class":164},[81,1752,622],{"class":168},[81,1754,1711],{"class":160},[81,1756,165],{"class":164},[81,1758,1400],{"class":168},[81,1760,1761],{"class":175}," recordsSynced",[81,1763,179],{"class":168},[81,1765,1766],{"class":531}," 150",[81,1768,926],{"class":168},[81,1770,284],{"class":164},[81,1772,1774,1776,1778,1781,1784],{"class":83,"line":1773},19,[81,1775,1706],{"class":164},[81,1777,622],{"class":168},[81,1779,1780],{"class":160},"emit",[81,1782,1783],{"class":164},"() ",[81,1785,1786],{"class":247},"// Manual emit required in standalone mode\n",[607,1788,1790,1791,1794],{"color":1246,"icon":1789},"i-lucide-info","In standalone mode, you must call ",[78,1792,1793],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[59,1796,1798],{"id":1797},"typescript-configuration","TypeScript Configuration",[55,1800,1801],{},"evlog is written in TypeScript and ships with full type definitions. No additional configuration is required.",[607,1803,1805],{"color":609,"icon":1804},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[59,1807,1809],{"id":1808},"next-steps","Next Steps",[1219,1811,1812],{},[1222,1813,1814,1816],{},[417,1815,19],{"href":20}," - Learn the core concepts and start using evlog",[1818,1819,1820],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":76,"searchDepth":172,"depth":172,"links":1822},[1823,1828,1829,1830,1831],{"id":61,"depth":172,"text":62,"children":1824},[1825,1826,1827],{"id":288,"depth":199,"text":289},{"id":444,"depth":199,"text":420},{"id":1012,"depth":199,"text":1013},{"id":1451,"depth":172,"text":1452},{"id":1503,"depth":172,"text":1504},{"id":1797,"depth":172,"text":1798},{"id":1808,"depth":172,"text":1809},"Install evlog in your Nuxt, Nitro, or standalone TypeScript project.","md",null,{},{"title":15,"description":1832},"Sdk8hmyOWxuKmgrtYiaMVzOCfxe9t7GWvoHU_n3aiQ4",[1839,1841],{"title":11,"path":12,"stem":13,"description":1840,"children":-1},"A TypeScript logging library focused on wide events and structured error handling.",{"title":19,"path":20,"stem":21,"description":1842,"children":-1},"Get up and running with evlog in minutes.",1769680625141]