[{"data":1,"prerenderedAt":2531},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":49,"-getting-started-installation-surround":2526},[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":2520,"extension":2521,"links":2522,"meta":2523,"navigation":2235,"path":16,"seo":2524,"stem":17,"__hash__":2525},"docs/1.getting-started/2.installation.md",{"type":52,"value":53,"toc":2507},"minimark",[54,58,63,66,138,145,315,320,539,543,552,702,717,720,723,728,735,876,892,896,903,1062,1069,1073,1080,1255,1278,1282,1293,1480,1486,1512,1515,1529,1628,1632,1661,1675,1681,1827,2024,2031,2035,2037,2087,2094,2138,2142,2144,2194,2197,2474,2481,2485,2488,2492,2496,2503],[55,56,57],"p",{},"evlog supports multiple environments: Nuxt, Nitro, and standalone TypeScript.",[59,60,62],"h2",{"id":61},"nuxt","Nuxt",[55,64,65],{},"Install evlog via your preferred package manager:",[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,141,144],{},"Then add it to your Nuxt config using the ",[78,142,143],{},"evlog/nuxt"," module:",[70,146,151],{"className":147,"code":148,"filename":149,"language":150,"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    // Optional: exclude specific routes from logging\n    exclude: ['/api/_nuxt_icon/**'],\n  },\n})\n","nuxt.config.ts","typescript",[78,152,153,174,200,211,221,239,245,252,273,279,300,306],{"__ignoreMap":76},[81,154,155,159,162,166,170],{"class":83,"line":84},[81,156,158],{"class":157},"s7zQu","export",[81,160,161],{"class":157}," default",[81,163,165],{"class":164},"s2Zo4"," defineNuxtConfig",[81,167,169],{"class":168},"sTEyZ","(",[81,171,173],{"class":172},"sMK4o","{\n",[81,175,177,181,184,187,190,192,194,197],{"class":83,"line":176},2,[81,178,180],{"class":179},"swJcz","  modules",[81,182,183],{"class":172},":",[81,185,186],{"class":168}," [",[81,188,189],{"class":172},"'",[81,191,143],{"class":90},[81,193,189],{"class":172},[81,195,196],{"class":168},"]",[81,198,199],{"class":172},",\n",[81,201,203,206,208],{"class":83,"line":202},3,[81,204,205],{"class":179},"  evlog",[81,207,183],{"class":172},[81,209,210],{"class":172}," {\n",[81,212,214,217,219],{"class":83,"line":213},4,[81,215,216],{"class":179},"    env",[81,218,183],{"class":172},[81,220,210],{"class":172},[81,222,224,227,229,232,235,237],{"class":83,"line":223},5,[81,225,226],{"class":179},"      service",[81,228,183],{"class":172},[81,230,231],{"class":172}," '",[81,233,234],{"class":90},"my-app",[81,236,189],{"class":172},[81,238,199],{"class":172},[81,240,242],{"class":83,"line":241},6,[81,243,244],{"class":172},"    },\n",[81,246,248],{"class":83,"line":247},7,[81,249,251],{"class":250},"sHwdD","    // Optional: only log specific routes (supports glob patterns)\n",[81,253,255,258,260,262,264,267,269,271],{"class":83,"line":254},8,[81,256,257],{"class":179},"    include",[81,259,183],{"class":172},[81,261,186],{"class":168},[81,263,189],{"class":172},[81,265,266],{"class":90},"/api/**",[81,268,189],{"class":172},[81,270,196],{"class":168},[81,272,199],{"class":172},[81,274,276],{"class":83,"line":275},9,[81,277,278],{"class":250},"    // Optional: exclude specific routes from logging\n",[81,280,282,285,287,289,291,294,296,298],{"class":83,"line":281},10,[81,283,284],{"class":179},"    exclude",[81,286,183],{"class":172},[81,288,186],{"class":168},[81,290,189],{"class":172},[81,292,293],{"class":90},"/api/_nuxt_icon/**",[81,295,189],{"class":172},[81,297,196],{"class":168},[81,299,199],{"class":172},[81,301,303],{"class":83,"line":302},11,[81,304,305],{"class":172},"  },\n",[81,307,309,312],{"class":83,"line":308},12,[81,310,311],{"class":172},"}",[81,313,314],{"class":168},")\n",[316,317,319],"h3",{"id":318},"configuration-options","Configuration Options",[321,322,323,342],"table",{},[324,325,326],"thead",{},[327,328,329,333,336,339],"tr",{},[330,331,332],"th",{},"Option",[330,334,335],{},"Type",[330,337,338],{},"Default",[330,340,341],{},"Description",[343,344,345,366,383,406,427,448,472,493,520],"tbody",{},[327,346,347,353,358,363],{},[348,349,350],"td",{},[78,351,352],{},"env.service",[348,354,355],{},[78,356,357],{},"string",[348,359,360],{},[78,361,362],{},"'app'",[348,364,365],{},"Service name shown in logs",[327,367,368,373,377,380],{},[348,369,370],{},[78,371,372],{},"env.environment",[348,374,375],{},[78,376,357],{},[348,378,379],{},"Auto-detected",[348,381,382],{},"Environment name",[327,384,385,390,395,400],{},[348,386,387],{},[78,388,389],{},"include",[348,391,392],{},[78,393,394],{},"string[]",[348,396,397],{},[78,398,399],{},"undefined",[348,401,402,403,405],{},"Route patterns to log. Supports glob (",[78,404,266],{},"). If not set, all routes are logged",[327,407,408,413,417,421],{},[348,409,410],{},[78,411,412],{},"exclude",[348,414,415],{},[78,416,394],{},[348,418,419],{},[78,420,399],{},[348,422,423,424,426],{},"Route patterns to exclude from logging. Supports glob (",[78,425,293],{},"). Exclusions take precedence over inclusions",[327,428,429,434,439,445],{},[348,430,431],{},[78,432,433],{},"pretty",[348,435,436],{},[78,437,438],{},"boolean",[348,440,441,444],{},[78,442,443],{},"true"," in dev",[348,446,447],{},"Pretty print with tree formatting",[327,449,450,455,460,464],{},[348,451,452],{},[78,453,454],{},"sampling.rates",[348,456,457],{},[78,458,459],{},"object",[348,461,462],{},[78,463,399],{},[348,465,466,467],{},"Head sampling rates per log level (0-100%). See ",[468,469,471],"a",{"href":470},"#sampling","Sampling",[327,473,474,479,484,488],{},[348,475,476],{},[78,477,478],{},"sampling.keep",[348,480,481],{},[78,482,483],{},"array",[348,485,486],{},[78,487,399],{},[348,489,490,491],{},"Tail sampling conditions to force-keep logs. See ",[468,492,471],{"href":470},[327,494,495,500,504,513],{},[348,496,497],{},[78,498,499],{},"transport.enabled",[348,501,502],{},[78,503,438],{},[348,505,506,509,510,512],{},[78,507,508],{},"false"," in dev, ",[78,511,443],{}," in prod",[348,514,515,516],{},"Enable sending client logs to the server. See ",[468,517,519],{"href":518},"#client-transport","Client Transport",[327,521,522,527,531,536],{},[348,523,524],{},[78,525,526],{},"transport.endpoint",[348,528,529],{},[78,530,357],{},[348,532,533],{},[78,534,535],{},"'/api/_evlog/ingest'",[348,537,538],{},"API endpoint for client log ingestion",[316,540,542],{"id":541},"route-filtering","Route Filtering",[55,544,545,546,548,549,551],{},"Use ",[78,547,389],{}," and ",[78,550,412],{}," to control which routes are logged. Both support glob patterns.",[70,553,555],{"className":147,"code":554,"filename":149,"language":150,"meta":76,"style":76},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    // Log all API and auth routes...\n    include: ['/api/**', '/auth/**'],\n    // ...except internal/noisy routes\n    exclude: [\n      '/api/_nuxt_icon/**',  // Nuxt Icon requests\n      '/api/_content/**',    // Nuxt Content queries\n      '/api/health',         // Health checks\n    ],\n  },\n})\n",[78,556,557,569,587,595,600,628,633,642,656,670,684,691,695],{"__ignoreMap":76},[81,558,559,561,563,565,567],{"class":83,"line":84},[81,560,158],{"class":157},[81,562,161],{"class":157},[81,564,165],{"class":164},[81,566,169],{"class":168},[81,568,173],{"class":172},[81,570,571,573,575,577,579,581,583,585],{"class":83,"line":176},[81,572,180],{"class":179},[81,574,183],{"class":172},[81,576,186],{"class":168},[81,578,189],{"class":172},[81,580,143],{"class":90},[81,582,189],{"class":172},[81,584,196],{"class":168},[81,586,199],{"class":172},[81,588,589,591,593],{"class":83,"line":202},[81,590,205],{"class":179},[81,592,183],{"class":172},[81,594,210],{"class":172},[81,596,597],{"class":83,"line":213},[81,598,599],{"class":250},"    // Log all API and auth routes...\n",[81,601,602,604,606,608,610,612,614,617,619,622,624,626],{"class":83,"line":223},[81,603,257],{"class":179},[81,605,183],{"class":172},[81,607,186],{"class":168},[81,609,189],{"class":172},[81,611,266],{"class":90},[81,613,189],{"class":172},[81,615,616],{"class":172},",",[81,618,231],{"class":172},[81,620,621],{"class":90},"/auth/**",[81,623,189],{"class":172},[81,625,196],{"class":168},[81,627,199],{"class":172},[81,629,630],{"class":83,"line":241},[81,631,632],{"class":250},"    // ...except internal/noisy routes\n",[81,634,635,637,639],{"class":83,"line":247},[81,636,284],{"class":179},[81,638,183],{"class":172},[81,640,641],{"class":168}," [\n",[81,643,644,647,649,651,653],{"class":83,"line":254},[81,645,646],{"class":172},"      '",[81,648,293],{"class":90},[81,650,189],{"class":172},[81,652,616],{"class":172},[81,654,655],{"class":250},"  // Nuxt Icon requests\n",[81,657,658,660,663,665,667],{"class":83,"line":275},[81,659,646],{"class":172},[81,661,662],{"class":90},"/api/_content/**",[81,664,189],{"class":172},[81,666,616],{"class":172},[81,668,669],{"class":250},"    // Nuxt Content queries\n",[81,671,672,674,677,679,681],{"class":83,"line":281},[81,673,646],{"class":172},[81,675,676],{"class":90},"/api/health",[81,678,189],{"class":172},[81,680,616],{"class":172},[81,682,683],{"class":250},"         // Health checks\n",[81,685,686,689],{"class":83,"line":302},[81,687,688],{"class":168},"    ]",[81,690,199],{"class":172},[81,692,693],{"class":83,"line":308},[81,694,305],{"class":172},[81,696,698,700],{"class":83,"line":697},13,[81,699,311],{"class":172},[81,701,314],{"class":168},[703,704,707,711,712,548,714,716],"callout",{"color":705,"icon":706},"info","i-lucide-info",[708,709,710],"strong",{},"Exclusions take precedence."," If a path matches both ",[78,713,389],{},[78,715,412],{},", it will be excluded.",[316,718,471],{"id":719},"sampling",[55,721,722],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[724,725,727],"h4",{"id":726},"head-sampling-rates","Head Sampling (rates)",[55,729,730,731,734],{},"Random sampling based on log level, decided ",[708,732,733],{},"before"," the request completes:",[70,736,738],{"className":147,"code":737,"filename":149,"language":150,"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,739,740,752,770,778,787,796,812,827,842,857,862,866,870],{"__ignoreMap":76},[81,741,742,744,746,748,750],{"class":83,"line":84},[81,743,158],{"class":157},[81,745,161],{"class":157},[81,747,165],{"class":164},[81,749,169],{"class":168},[81,751,173],{"class":172},[81,753,754,756,758,760,762,764,766,768],{"class":83,"line":176},[81,755,180],{"class":179},[81,757,183],{"class":172},[81,759,186],{"class":168},[81,761,189],{"class":172},[81,763,143],{"class":90},[81,765,189],{"class":172},[81,767,196],{"class":168},[81,769,199],{"class":172},[81,771,772,774,776],{"class":83,"line":202},[81,773,205],{"class":179},[81,775,183],{"class":172},[81,777,210],{"class":172},[81,779,780,783,785],{"class":83,"line":213},[81,781,782],{"class":179},"    sampling",[81,784,183],{"class":172},[81,786,210],{"class":172},[81,788,789,792,794],{"class":83,"line":223},[81,790,791],{"class":179},"      rates",[81,793,183],{"class":172},[81,795,210],{"class":172},[81,797,798,801,803,807,809],{"class":83,"line":241},[81,799,800],{"class":179},"        info",[81,802,183],{"class":172},[81,804,806],{"class":805},"sbssI"," 10",[81,808,616],{"class":172},[81,810,811],{"class":250},"    // Keep 10% of info logs\n",[81,813,814,817,819,822,824],{"class":83,"line":247},[81,815,816],{"class":179},"        warn",[81,818,183],{"class":172},[81,820,821],{"class":805}," 50",[81,823,616],{"class":172},[81,825,826],{"class":250},"    // Keep 50% of warning logs\n",[81,828,829,832,834,837,839],{"class":83,"line":254},[81,830,831],{"class":179},"        debug",[81,833,183],{"class":172},[81,835,836],{"class":805}," 5",[81,838,616],{"class":172},[81,840,841],{"class":250},"    // Keep 5% of debug logs\n",[81,843,844,847,849,852,854],{"class":83,"line":275},[81,845,846],{"class":179},"        error",[81,848,183],{"class":172},[81,850,851],{"class":805}," 100",[81,853,616],{"class":172},[81,855,856],{"class":250},"  // Always keep errors (default)\n",[81,858,859],{"class":83,"line":281},[81,860,861],{"class":172},"      },\n",[81,863,864],{"class":83,"line":302},[81,865,244],{"class":172},[81,867,868],{"class":83,"line":308},[81,869,305],{"class":172},[81,871,872,874],{"class":83,"line":697},[81,873,311],{"class":172},[81,875,314],{"class":168},[703,877,880,883,884,887,888,891],{"color":878,"icon":879},"success","i-lucide-shield-check",[708,881,882],{},"Errors are always logged by default."," Even if you don't specify ",[78,885,886],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[78,889,890],{},"error: 0",".",[724,893,895],{"id":894},"tail-sampling-keep","Tail Sampling (keep)",[55,897,898,899,902],{},"Force-keep logs based on request outcome, evaluated ",[708,900,901],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[70,904,906],{"className":147,"code":905,"filename":149,"language":150,"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,907,908,920,938,946,954,976,985,1003,1020,1041,1048,1052,1056],{"__ignoreMap":76},[81,909,910,912,914,916,918],{"class":83,"line":84},[81,911,158],{"class":157},[81,913,161],{"class":157},[81,915,165],{"class":164},[81,917,169],{"class":168},[81,919,173],{"class":172},[81,921,922,924,926,928,930,932,934,936],{"class":83,"line":176},[81,923,180],{"class":179},[81,925,183],{"class":172},[81,927,186],{"class":168},[81,929,189],{"class":172},[81,931,143],{"class":90},[81,933,189],{"class":172},[81,935,196],{"class":168},[81,937,199],{"class":172},[81,939,940,942,944],{"class":83,"line":202},[81,941,205],{"class":179},[81,943,183],{"class":172},[81,945,210],{"class":172},[81,947,948,950,952],{"class":83,"line":213},[81,949,782],{"class":179},[81,951,183],{"class":172},[81,953,210],{"class":172},[81,955,956,958,960,963,966,968,970,973],{"class":83,"line":223},[81,957,791],{"class":179},[81,959,183],{"class":172},[81,961,962],{"class":172}," {",[81,964,965],{"class":179}," info",[81,967,183],{"class":172},[81,969,806],{"class":805},[81,971,972],{"class":172}," },",[81,974,975],{"class":250},"  // Only 10% of info logs\n",[81,977,978,981,983],{"class":83,"line":241},[81,979,980],{"class":179},"      keep",[81,982,183],{"class":172},[81,984,641],{"class":168},[81,986,987,990,993,995,998,1000],{"class":83,"line":247},[81,988,989],{"class":172},"        {",[81,991,992],{"class":179}," duration",[81,994,183],{"class":172},[81,996,997],{"class":805}," 1000",[81,999,972],{"class":172},[81,1001,1002],{"class":250},"           // Always keep if duration >= 1000ms\n",[81,1004,1005,1007,1010,1012,1015,1017],{"class":83,"line":254},[81,1006,989],{"class":172},[81,1008,1009],{"class":179}," status",[81,1011,183],{"class":172},[81,1013,1014],{"class":805}," 400",[81,1016,972],{"class":172},[81,1018,1019],{"class":250},"              // Always keep if status >= 400\n",[81,1021,1022,1024,1027,1029,1031,1034,1036,1038],{"class":83,"line":275},[81,1023,989],{"class":172},[81,1025,1026],{"class":179}," path",[81,1028,183],{"class":172},[81,1030,231],{"class":172},[81,1032,1033],{"class":90},"/api/critical/**",[81,1035,189],{"class":172},[81,1037,972],{"class":172},[81,1039,1040],{"class":250}," // Always keep critical paths\n",[81,1042,1043,1046],{"class":83,"line":281},[81,1044,1045],{"class":168},"      ]",[81,1047,199],{"class":172},[81,1049,1050],{"class":83,"line":302},[81,1051,244],{"class":172},[81,1053,1054],{"class":83,"line":308},[81,1055,305],{"class":172},[81,1057,1058,1060],{"class":83,"line":697},[81,1059,311],{"class":172},[81,1061,314],{"class":168},[55,1063,1064,1065,1068],{},"Conditions use ",[78,1066,1067],{},">="," comparison and follow OR logic (any match = keep).",[724,1070,1072],{"id":1071},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[55,1074,1075,1076,1079],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[78,1077,1078],{},"evlog:emit:keep"," Nitro hook:",[70,1081,1084],{"className":147,"code":1082,"filename":1083,"language":150,"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,1085,1086,1112,1149,1154,1201,1221,1237,1242,1249],{"__ignoreMap":76},[81,1087,1088,1090,1092,1095,1097,1099,1103,1106,1110],{"class":83,"line":84},[81,1089,158],{"class":157},[81,1091,161],{"class":157},[81,1093,1094],{"class":164}," defineNitroPlugin",[81,1096,169],{"class":168},[81,1098,169],{"class":172},[81,1100,1102],{"class":1101},"sHdIc","nitroApp",[81,1104,1105],{"class":172},")",[81,1107,1109],{"class":1108},"spNyl"," =>",[81,1111,210],{"class":172},[81,1113,1114,1117,1119,1122,1124,1127,1129,1131,1133,1135,1137,1140,1143,1145,1147],{"class":83,"line":176},[81,1115,1116],{"class":168},"  nitroApp",[81,1118,891],{"class":172},[81,1120,1121],{"class":168},"hooks",[81,1123,891],{"class":172},[81,1125,1126],{"class":164},"hook",[81,1128,169],{"class":179},[81,1130,189],{"class":172},[81,1132,1078],{"class":90},[81,1134,189],{"class":172},[81,1136,616],{"class":172},[81,1138,1139],{"class":172}," (",[81,1141,1142],{"class":1101},"ctx",[81,1144,1105],{"class":172},[81,1146,1109],{"class":1108},[81,1148,210],{"class":172},[81,1150,1151],{"class":83,"line":202},[81,1152,1153],{"class":250},"    // Always keep logs for premium users\n",[81,1155,1156,1159,1162,1165,1168,1170,1173,1175,1178,1181,1183,1186,1189,1192,1195,1198],{"class":83,"line":213},[81,1157,1158],{"class":1108},"    const",[81,1160,1161],{"class":168}," user",[81,1163,1164],{"class":172}," =",[81,1166,1167],{"class":168}," ctx",[81,1169,891],{"class":172},[81,1171,1172],{"class":168},"context",[81,1174,891],{"class":172},[81,1176,1177],{"class":168},"user",[81,1179,1180],{"class":157}," as",[81,1182,962],{"class":172},[81,1184,1185],{"class":179}," premium",[81,1187,1188],{"class":172},"?:",[81,1190,1191],{"class":87}," boolean",[81,1193,1194],{"class":172}," }",[81,1196,1197],{"class":172}," |",[81,1199,1200],{"class":87}," undefined\n",[81,1202,1203,1206,1208,1210,1213,1216,1219],{"class":83,"line":223},[81,1204,1205],{"class":157},"    if",[81,1207,1139],{"class":179},[81,1209,1177],{"class":168},[81,1211,1212],{"class":172},"?.",[81,1214,1215],{"class":168},"premium",[81,1217,1218],{"class":179},") ",[81,1220,173],{"class":172},[81,1222,1223,1226,1228,1231,1233],{"class":83,"line":241},[81,1224,1225],{"class":168},"      ctx",[81,1227,891],{"class":172},[81,1229,1230],{"class":168},"shouldKeep",[81,1232,1164],{"class":172},[81,1234,1236],{"class":1235},"sfNiH"," true\n",[81,1238,1239],{"class":83,"line":247},[81,1240,1241],{"class":172},"    }\n",[81,1243,1244,1247],{"class":83,"line":254},[81,1245,1246],{"class":172},"  }",[81,1248,314],{"class":179},[81,1250,1251,1253],{"class":83,"line":275},[81,1252,311],{"class":172},[81,1254,314],{"class":168},[55,1256,1257,1258,1261,1262,1265,1266,1265,1269,1265,1272,1275,1276,891],{},"The hook receives a ",[78,1259,1260],{},"TailSamplingContext"," with ",[78,1263,1264],{},"status",", ",[78,1267,1268],{},"duration",[78,1270,1271],{},"path",[78,1273,1274],{},"method",", and the full accumulated ",[78,1277,1172],{},[316,1279,1281],{"id":1280},"log-draining","Log Draining",[55,1283,1284,1285,1288,1289,1292],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[78,1286,1287],{},"evlog:drain"," hook. The hook is called in ",[708,1290,1291],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[70,1294,1297],{"className":147,"code":1295,"filename":1296,"language":150,"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,1298,1299,1319,1354,1375,1391,1433,1461,1468,1474],{"__ignoreMap":76},[81,1300,1301,1303,1305,1307,1309,1311,1313,1315,1317],{"class":83,"line":84},[81,1302,158],{"class":157},[81,1304,161],{"class":157},[81,1306,1094],{"class":164},[81,1308,169],{"class":168},[81,1310,169],{"class":172},[81,1312,1102],{"class":1101},[81,1314,1105],{"class":172},[81,1316,1109],{"class":1108},[81,1318,210],{"class":172},[81,1320,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1344,1346,1348,1350,1352],{"class":83,"line":176},[81,1322,1116],{"class":168},[81,1324,891],{"class":172},[81,1326,1121],{"class":168},[81,1328,891],{"class":172},[81,1330,1126],{"class":164},[81,1332,169],{"class":179},[81,1334,189],{"class":172},[81,1336,1287],{"class":90},[81,1338,189],{"class":172},[81,1340,616],{"class":172},[81,1342,1343],{"class":1108}," async",[81,1345,1139],{"class":172},[81,1347,1142],{"class":1101},[81,1349,1105],{"class":172},[81,1351,1109],{"class":1108},[81,1353,210],{"class":172},[81,1355,1356,1359,1362,1364,1366,1369,1371,1373],{"class":83,"line":202},[81,1357,1358],{"class":157},"    await",[81,1360,1361],{"class":164}," fetch",[81,1363,169],{"class":179},[81,1365,189],{"class":172},[81,1367,1368],{"class":90},"https://api.axiom.co/v1/datasets/logs/ingest",[81,1370,189],{"class":172},[81,1372,616],{"class":172},[81,1374,210],{"class":172},[81,1376,1377,1380,1382,1384,1387,1389],{"class":83,"line":213},[81,1378,1379],{"class":179},"      method",[81,1381,183],{"class":172},[81,1383,231],{"class":172},[81,1385,1386],{"class":90},"POST",[81,1388,189],{"class":172},[81,1390,199],{"class":172},[81,1392,1393,1396,1398,1400,1403,1405,1408,1411,1414,1417,1419,1422,1424,1427,1430],{"class":83,"line":223},[81,1394,1395],{"class":179},"      headers",[81,1397,183],{"class":172},[81,1399,962],{"class":172},[81,1401,1402],{"class":179}," Authorization",[81,1404,183],{"class":172},[81,1406,1407],{"class":172}," `",[81,1409,1410],{"class":90},"Bearer ",[81,1412,1413],{"class":172},"${",[81,1415,1416],{"class":168},"process",[81,1418,891],{"class":172},[81,1420,1421],{"class":168},"env",[81,1423,891],{"class":172},[81,1425,1426],{"class":168},"AXIOM_TOKEN",[81,1428,1429],{"class":172},"}`",[81,1431,1432],{"class":172}," },\n",[81,1434,1435,1438,1440,1443,1445,1448,1451,1453,1455,1458],{"class":83,"line":241},[81,1436,1437],{"class":179},"      body",[81,1439,183],{"class":172},[81,1441,1442],{"class":168}," JSON",[81,1444,891],{"class":172},[81,1446,1447],{"class":164},"stringify",[81,1449,1450],{"class":179},"([",[81,1452,1142],{"class":168},[81,1454,891],{"class":172},[81,1456,1457],{"class":168},"event",[81,1459,1460],{"class":179},"])\n",[81,1462,1463,1466],{"class":83,"line":247},[81,1464,1465],{"class":172},"    }",[81,1467,314],{"class":179},[81,1469,1470,1472],{"class":83,"line":254},[81,1471,1246],{"class":172},[81,1473,314],{"class":179},[81,1475,1476,1478],{"class":83,"line":275},[81,1477,311],{"class":172},[81,1479,314],{"class":168},[55,1481,1257,1482,1485],{},[78,1483,1484],{},"DrainContext"," with:",[1487,1488,1489,1499],"ul",{},[1490,1491,1492,1494,1495,1498],"li",{},[78,1493,1457],{},": The complete ",[78,1496,1497],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[1490,1500,1501,1504,1505,1265,1507,1265,1509,1105],{},[78,1502,1503],{},"request",": Optional request metadata (",[78,1506,1274],{},[78,1508,1271],{},[78,1510,1511],{},"requestId",[316,1513,519],{"id":1514},"client-transport",[55,1516,1517,1518,1265,1521,1524,1525,1528],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[78,1519,1520],{},"log.info()",[78,1522,1523],{},"log.error()",", etc. calls are automatically sent to the server via the ",[78,1526,1527],{},"/api/_evlog/ingest"," endpoint.",[70,1530,1532],{"className":147,"code":1531,"filename":149,"language":150,"meta":76,"style":76},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    transport: {\n      enabled: true,  // default: false in dev, true in prod\n      endpoint: '/api/_evlog/ingest',  // default\n    },\n  },\n})\n",[78,1533,1534,1546,1564,1572,1581,1596,1614,1618,1622],{"__ignoreMap":76},[81,1535,1536,1538,1540,1542,1544],{"class":83,"line":84},[81,1537,158],{"class":157},[81,1539,161],{"class":157},[81,1541,165],{"class":164},[81,1543,169],{"class":168},[81,1545,173],{"class":172},[81,1547,1548,1550,1552,1554,1556,1558,1560,1562],{"class":83,"line":176},[81,1549,180],{"class":179},[81,1551,183],{"class":172},[81,1553,186],{"class":168},[81,1555,189],{"class":172},[81,1557,143],{"class":90},[81,1559,189],{"class":172},[81,1561,196],{"class":168},[81,1563,199],{"class":172},[81,1565,1566,1568,1570],{"class":83,"line":202},[81,1567,205],{"class":179},[81,1569,183],{"class":172},[81,1571,210],{"class":172},[81,1573,1574,1577,1579],{"class":83,"line":213},[81,1575,1576],{"class":179},"    transport",[81,1578,183],{"class":172},[81,1580,210],{"class":172},[81,1582,1583,1586,1588,1591,1593],{"class":83,"line":223},[81,1584,1585],{"class":179},"      enabled",[81,1587,183],{"class":172},[81,1589,1590],{"class":1235}," true",[81,1592,616],{"class":172},[81,1594,1595],{"class":250},"  // default: false in dev, true in prod\n",[81,1597,1598,1601,1603,1605,1607,1609,1611],{"class":83,"line":241},[81,1599,1600],{"class":179},"      endpoint",[81,1602,183],{"class":172},[81,1604,231],{"class":172},[81,1606,1527],{"class":90},[81,1608,189],{"class":172},[81,1610,616],{"class":172},[81,1612,1613],{"class":250},"  // default\n",[81,1615,1616],{"class":83,"line":247},[81,1617,244],{"class":172},[81,1619,1620],{"class":83,"line":254},[81,1621,305],{"class":172},[81,1623,1624,1626],{"class":83,"line":275},[81,1625,311],{"class":172},[81,1627,314],{"class":168},[724,1629,1631],{"id":1630},"how-it-works","How it works",[1633,1634,1635,1641,1647,1650,1658],"ol",{},[1490,1636,1637,1638],{},"Client calls ",[78,1639,1640],{},"log.info({ action: 'click', button: 'submit' })",[1490,1642,1643,1644,1646],{},"Log is sent to ",[78,1645,1527],{}," via POST",[1490,1648,1649],{},"Server enriches with environment context (service, version, region, etc.)",[1490,1651,1652,1654,1655],{},[78,1653,1287],{}," hook is called with ",[78,1656,1657],{},"source: 'client'",[1490,1659,1660],{},"External services receive the log (Axiom, Loki, etc.)",[703,1662,1663,1664,1265,1667,1670,1671,1674],{"color":705,"icon":706},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[78,1665,1666],{},"service",[78,1668,1669],{},"environment",", or ",[78,1672,1673],{},"version"," from the client.",[55,1676,1677,1678,1680],{},"In your drain hook, you can identify client logs by the ",[78,1679,1657],{}," field:",[70,1682,1685],{"className":147,"code":1683,"filename":1684,"language":150,"meta":76,"style":76},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    if (ctx.event.source === 'client') {\n      // Handle client logs specifically\n      console.log('[CLIENT]', ctx.event)\n    }\n    // Send to external service...\n  })\n})\n","server/plugins/evlog-drain.ts",[78,1686,1687,1707,1741,1772,1777,1806,1810,1815,1821],{"__ignoreMap":76},[81,1688,1689,1691,1693,1695,1697,1699,1701,1703,1705],{"class":83,"line":84},[81,1690,158],{"class":157},[81,1692,161],{"class":157},[81,1694,1094],{"class":164},[81,1696,169],{"class":168},[81,1698,169],{"class":172},[81,1700,1102],{"class":1101},[81,1702,1105],{"class":172},[81,1704,1109],{"class":1108},[81,1706,210],{"class":172},[81,1708,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739],{"class":83,"line":176},[81,1710,1116],{"class":168},[81,1712,891],{"class":172},[81,1714,1121],{"class":168},[81,1716,891],{"class":172},[81,1718,1126],{"class":164},[81,1720,169],{"class":179},[81,1722,189],{"class":172},[81,1724,1287],{"class":90},[81,1726,189],{"class":172},[81,1728,616],{"class":172},[81,1730,1343],{"class":1108},[81,1732,1139],{"class":172},[81,1734,1142],{"class":1101},[81,1736,1105],{"class":172},[81,1738,1109],{"class":1108},[81,1740,210],{"class":172},[81,1742,1743,1745,1747,1749,1751,1753,1755,1758,1761,1763,1766,1768,1770],{"class":83,"line":202},[81,1744,1205],{"class":157},[81,1746,1139],{"class":179},[81,1748,1142],{"class":168},[81,1750,891],{"class":172},[81,1752,1457],{"class":168},[81,1754,891],{"class":172},[81,1756,1757],{"class":168},"source",[81,1759,1760],{"class":172}," ===",[81,1762,231],{"class":172},[81,1764,1765],{"class":90},"client",[81,1767,189],{"class":172},[81,1769,1218],{"class":179},[81,1771,173],{"class":172},[81,1773,1774],{"class":83,"line":213},[81,1775,1776],{"class":250},"      // Handle client logs specifically\n",[81,1778,1779,1782,1784,1787,1789,1791,1794,1796,1798,1800,1802,1804],{"class":83,"line":223},[81,1780,1781],{"class":168},"      console",[81,1783,891],{"class":172},[81,1785,1786],{"class":164},"log",[81,1788,169],{"class":179},[81,1790,189],{"class":172},[81,1792,1793],{"class":90},"[CLIENT]",[81,1795,189],{"class":172},[81,1797,616],{"class":172},[81,1799,1167],{"class":168},[81,1801,891],{"class":172},[81,1803,1457],{"class":168},[81,1805,314],{"class":179},[81,1807,1808],{"class":83,"line":241},[81,1809,1241],{"class":172},[81,1811,1812],{"class":83,"line":247},[81,1813,1814],{"class":250},"    // Send to external service...\n",[81,1816,1817,1819],{"class":83,"line":254},[81,1818,1246],{"class":172},[81,1820,314],{"class":179},[81,1822,1823,1825],{"class":83,"line":275},[81,1824,311],{"class":172},[81,1826,314],{"class":168},[703,1828,1830,1840],{"color":705,"icon":1829},"i-lucide-lightbulb",[55,1831,1832,1835,1836,1839],{},[708,1833,1834],{},"Tip:"," Use Nuxt's ",[78,1837,1838],{},"$production"," override to sample only in production while keeping full visibility in development:",[70,1841,1843],{"className":147,"code":1842,"language":150,"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,1844,1845,1857,1875,1883,1904,1908,1917,1926,1935,1971,2005,2009,2013,2017],{"__ignoreMap":76},[81,1846,1847,1849,1851,1853,1855],{"class":83,"line":84},[81,1848,158],{"class":157},[81,1850,161],{"class":157},[81,1852,165],{"class":164},[81,1854,169],{"class":168},[81,1856,173],{"class":172},[81,1858,1859,1861,1863,1865,1867,1869,1871,1873],{"class":83,"line":176},[81,1860,180],{"class":179},[81,1862,183],{"class":172},[81,1864,186],{"class":168},[81,1866,189],{"class":172},[81,1868,143],{"class":90},[81,1870,189],{"class":172},[81,1872,196],{"class":168},[81,1874,199],{"class":172},[81,1876,1877,1879,1881],{"class":83,"line":202},[81,1878,205],{"class":179},[81,1880,183],{"class":172},[81,1882,210],{"class":172},[81,1884,1885,1887,1889,1891,1894,1896,1898,1900,1902],{"class":83,"line":213},[81,1886,216],{"class":179},[81,1888,183],{"class":172},[81,1890,962],{"class":172},[81,1892,1893],{"class":179}," service",[81,1895,183],{"class":172},[81,1897,231],{"class":172},[81,1899,234],{"class":90},[81,1901,189],{"class":172},[81,1903,1432],{"class":172},[81,1905,1906],{"class":83,"line":223},[81,1907,305],{"class":172},[81,1909,1910,1913,1915],{"class":83,"line":241},[81,1911,1912],{"class":179},"  $production",[81,1914,183],{"class":172},[81,1916,210],{"class":172},[81,1918,1919,1922,1924],{"class":83,"line":247},[81,1920,1921],{"class":179},"    evlog",[81,1923,183],{"class":172},[81,1925,210],{"class":172},[81,1927,1928,1931,1933],{"class":83,"line":254},[81,1929,1930],{"class":179},"      sampling",[81,1932,183],{"class":172},[81,1934,210],{"class":172},[81,1936,1937,1940,1942,1944,1946,1948,1950,1952,1955,1957,1959,1961,1964,1966,1969],{"class":83,"line":275},[81,1938,1939],{"class":179},"        rates",[81,1941,183],{"class":172},[81,1943,962],{"class":172},[81,1945,965],{"class":179},[81,1947,183],{"class":172},[81,1949,806],{"class":805},[81,1951,616],{"class":172},[81,1953,1954],{"class":179}," warn",[81,1956,183],{"class":172},[81,1958,821],{"class":805},[81,1960,616],{"class":172},[81,1962,1963],{"class":179}," debug",[81,1965,183],{"class":172},[81,1967,1968],{"class":805}," 0",[81,1970,1432],{"class":172},[81,1972,1973,1976,1978,1980,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003],{"class":83,"line":281},[81,1974,1975],{"class":179},"        keep",[81,1977,183],{"class":172},[81,1979,186],{"class":168},[81,1981,1982],{"class":172},"{",[81,1984,992],{"class":179},[81,1986,183],{"class":172},[81,1988,997],{"class":805},[81,1990,972],{"class":172},[81,1992,962],{"class":172},[81,1994,1009],{"class":179},[81,1996,183],{"class":172},[81,1998,1014],{"class":805},[81,2000,1194],{"class":172},[81,2002,196],{"class":168},[81,2004,199],{"class":172},[81,2006,2007],{"class":83,"line":302},[81,2008,861],{"class":172},[81,2010,2011],{"class":83,"line":308},[81,2012,244],{"class":172},[81,2014,2015],{"class":83,"line":697},[81,2016,305],{"class":172},[81,2018,2020,2022],{"class":83,"line":2019},14,[81,2021,311],{"class":172},[81,2023,314],{"class":168},[55,2025,2026,2027,2030],{},"That's it! You can now use ",[78,2028,2029],{},"useLogger(event)"," in any API route.",[59,2032,2034],{"id":2033},"nitro","Nitro",[55,2036,65],{},[67,2038,2039,2051,2063,2075],{},[70,2040,2041],{"className":72,"code":73,"filename":74,"language":75,"meta":76,"style":76},[78,2042,2043],{"__ignoreMap":76},[81,2044,2045,2047,2049],{"class":83,"line":84},[81,2046,74],{"class":87},[81,2048,91],{"class":90},[81,2050,94],{"class":90},[70,2052,2053],{"className":72,"code":97,"filename":98,"language":75,"meta":76,"style":76},[78,2054,2055],{"__ignoreMap":76},[81,2056,2057,2059,2061],{"class":83,"line":84},[81,2058,98],{"class":87},[81,2060,107],{"class":90},[81,2062,94],{"class":90},[70,2064,2065],{"className":72,"code":112,"filename":113,"language":75,"meta":76,"style":76},[78,2066,2067],{"__ignoreMap":76},[81,2068,2069,2071,2073],{"class":83,"line":84},[81,2070,113],{"class":87},[81,2072,91],{"class":90},[81,2074,94],{"class":90},[70,2076,2077],{"className":72,"code":126,"filename":127,"language":75,"meta":76,"style":76},[78,2078,2079],{"__ignoreMap":76},[81,2080,2081,2083,2085],{"class":83,"line":84},[81,2082,127],{"class":87},[81,2084,91],{"class":90},[81,2086,94],{"class":90},[55,2088,2089,2090,2093],{},"Then, add evlog as a Nitro plugin (without Nuxt) using the ",[78,2091,2092],{},"evlog/nitro"," plugin:",[70,2095,2098],{"className":147,"code":2096,"filename":2097,"language":150,"meta":76,"style":76},"export default defineNitroConfig({\n  plugins: ['evlog/nitro'],\n})\n","nitro.config.ts",[78,2099,2100,2113,2132],{"__ignoreMap":76},[81,2101,2102,2104,2106,2109,2111],{"class":83,"line":84},[81,2103,158],{"class":157},[81,2105,161],{"class":157},[81,2107,2108],{"class":164}," defineNitroConfig",[81,2110,169],{"class":168},[81,2112,173],{"class":172},[81,2114,2115,2118,2120,2122,2124,2126,2128,2130],{"class":83,"line":176},[81,2116,2117],{"class":179},"  plugins",[81,2119,183],{"class":172},[81,2121,186],{"class":168},[81,2123,189],{"class":172},[81,2125,2092],{"class":90},[81,2127,189],{"class":172},[81,2129,196],{"class":168},[81,2131,199],{"class":172},[81,2133,2134,2136],{"class":83,"line":202},[81,2135,311],{"class":172},[81,2137,314],{"class":168},[59,2139,2141],{"id":2140},"standalone-typescript","Standalone TypeScript",[55,2143,65],{},[67,2145,2146,2158,2170,2182],{},[70,2147,2148],{"className":72,"code":73,"filename":74,"language":75,"meta":76,"style":76},[78,2149,2150],{"__ignoreMap":76},[81,2151,2152,2154,2156],{"class":83,"line":84},[81,2153,74],{"class":87},[81,2155,91],{"class":90},[81,2157,94],{"class":90},[70,2159,2160],{"className":72,"code":97,"filename":98,"language":75,"meta":76,"style":76},[78,2161,2162],{"__ignoreMap":76},[81,2163,2164,2166,2168],{"class":83,"line":84},[81,2165,98],{"class":87},[81,2167,107],{"class":90},[81,2169,94],{"class":90},[70,2171,2172],{"className":72,"code":112,"filename":113,"language":75,"meta":76,"style":76},[78,2173,2174],{"__ignoreMap":76},[81,2175,2176,2178,2180],{"class":83,"line":84},[81,2177,113],{"class":87},[81,2179,91],{"class":90},[81,2181,94],{"class":90},[70,2183,2184],{"className":72,"code":126,"filename":127,"language":75,"meta":76,"style":76},[78,2185,2186],{"__ignoreMap":76},[81,2187,2188,2190,2192],{"class":83,"line":84},[81,2189,127],{"class":87},[81,2191,91],{"class":90},[81,2193,94],{"class":90},[55,2195,2196],{},"Then, use it as any other TypeScript library within your scripts, CLI tools, workers, or apps:",[70,2198,2201],{"className":147,"code":2199,"filename":2200,"language":150,"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,2202,2203,2231,2237,2242,2251,2260,2276,2292,2296,2301,2310,2335,2339,2345,2349,2355,2390,2433,2458],{"__ignoreMap":76},[81,2204,2205,2208,2210,2213,2215,2218,2220,2223,2225,2228],{"class":83,"line":84},[81,2206,2207],{"class":157},"import",[81,2209,962],{"class":172},[81,2211,2212],{"class":168}," initLogger",[81,2214,616],{"class":172},[81,2216,2217],{"class":168}," createRequestLogger",[81,2219,1194],{"class":172},[81,2221,2222],{"class":157}," from",[81,2224,231],{"class":172},[81,2226,2227],{"class":90},"evlog",[81,2229,2230],{"class":172},"'\n",[81,2232,2233],{"class":83,"line":176},[81,2234,2236],{"emptyLinePlaceholder":2235},true,"\n",[81,2238,2239],{"class":83,"line":202},[81,2240,2241],{"class":250},"// Initialize once at startup\n",[81,2243,2244,2247,2249],{"class":83,"line":213},[81,2245,2246],{"class":164},"initLogger",[81,2248,169],{"class":168},[81,2250,173],{"class":172},[81,2252,2253,2256,2258],{"class":83,"line":223},[81,2254,2255],{"class":179},"  env",[81,2257,183],{"class":172},[81,2259,210],{"class":172},[81,2261,2262,2265,2267,2269,2272,2274],{"class":83,"line":241},[81,2263,2264],{"class":179},"    service",[81,2266,183],{"class":172},[81,2268,231],{"class":172},[81,2270,2271],{"class":90},"my-worker",[81,2273,189],{"class":172},[81,2275,199],{"class":172},[81,2277,2278,2281,2283,2285,2288,2290],{"class":83,"line":247},[81,2279,2280],{"class":179},"    environment",[81,2282,183],{"class":172},[81,2284,231],{"class":172},[81,2286,2287],{"class":90},"production",[81,2289,189],{"class":172},[81,2291,199],{"class":172},[81,2293,2294],{"class":83,"line":254},[81,2295,305],{"class":172},[81,2297,2298],{"class":83,"line":275},[81,2299,2300],{"class":250},"  // Optional: sample logs\n",[81,2302,2303,2306,2308],{"class":83,"line":281},[81,2304,2305],{"class":179},"  sampling",[81,2307,183],{"class":172},[81,2309,210],{"class":172},[81,2311,2312,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333],{"class":83,"line":302},[81,2313,2314],{"class":179},"    rates",[81,2316,183],{"class":172},[81,2318,962],{"class":172},[81,2320,965],{"class":179},[81,2322,183],{"class":172},[81,2324,806],{"class":805},[81,2326,616],{"class":172},[81,2328,1963],{"class":179},[81,2330,183],{"class":172},[81,2332,836],{"class":805},[81,2334,1432],{"class":172},[81,2336,2337],{"class":83,"line":308},[81,2338,305],{"class":172},[81,2340,2341,2343],{"class":83,"line":697},[81,2342,311],{"class":172},[81,2344,314],{"class":168},[81,2346,2347],{"class":83,"line":2019},[81,2348,2236],{"emptyLinePlaceholder":2235},[81,2350,2352],{"class":83,"line":2351},15,[81,2353,2354],{"class":250},"// Create a logger for each operation\n",[81,2356,2358,2361,2364,2367,2369,2371,2373,2376,2378,2381,2383,2386,2388],{"class":83,"line":2357},16,[81,2359,2360],{"class":1108},"const",[81,2362,2363],{"class":168}," log ",[81,2365,2366],{"class":172},"=",[81,2368,2217],{"class":164},[81,2370,169],{"class":168},[81,2372,1982],{"class":172},[81,2374,2375],{"class":179}," jobId",[81,2377,183],{"class":172},[81,2379,2380],{"class":168}," job",[81,2382,891],{"class":172},[81,2384,2385],{"class":168},"id ",[81,2387,311],{"class":172},[81,2389,314],{"class":168},[81,2391,2393,2395,2397,2400,2402,2404,2407,2409,2411,2413,2415,2417,2420,2422,2424,2426,2429,2431],{"class":83,"line":2392},17,[81,2394,1786],{"class":168},[81,2396,891],{"class":172},[81,2398,2399],{"class":164},"set",[81,2401,169],{"class":168},[81,2403,1982],{"class":172},[81,2405,2406],{"class":179}," source",[81,2408,183],{"class":172},[81,2410,2380],{"class":168},[81,2412,891],{"class":172},[81,2414,1757],{"class":168},[81,2416,616],{"class":172},[81,2418,2419],{"class":179}," target",[81,2421,183],{"class":172},[81,2423,2380],{"class":168},[81,2425,891],{"class":172},[81,2427,2428],{"class":168},"target ",[81,2430,311],{"class":172},[81,2432,314],{"class":168},[81,2434,2436,2438,2440,2442,2444,2446,2449,2451,2454,2456],{"class":83,"line":2435},18,[81,2437,1786],{"class":168},[81,2439,891],{"class":172},[81,2441,2399],{"class":164},[81,2443,169],{"class":168},[81,2445,1982],{"class":172},[81,2447,2448],{"class":179}," recordsSynced",[81,2450,183],{"class":172},[81,2452,2453],{"class":805}," 150",[81,2455,1194],{"class":172},[81,2457,314],{"class":168},[81,2459,2461,2463,2465,2468,2471],{"class":83,"line":2460},19,[81,2462,1786],{"class":168},[81,2464,891],{"class":172},[81,2466,2467],{"class":164},"emit",[81,2469,2470],{"class":168},"() ",[81,2472,2473],{"class":250},"// Manual emit required in standalone mode\n",[703,2475,2476,2477,2480],{"color":705,"icon":706},"In standalone mode, you must call ",[78,2478,2479],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[59,2482,2484],{"id":2483},"typescript-configuration","TypeScript Configuration",[55,2486,2487],{},"evlog is written in TypeScript and ships with full type definitions. No additional configuration is required.",[703,2489,2491],{"color":878,"icon":2490},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[59,2493,2495],{"id":2494},"next-steps","Next Steps",[1487,2497,2498],{},[1490,2499,2500,2502],{},[468,2501,19],{"href":20}," - Learn the core concepts and start using evlog",[2504,2505,2506],"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":176,"depth":176,"links":2508},[2509,2516,2517,2518,2519],{"id":61,"depth":176,"text":62,"children":2510},[2511,2512,2513,2514,2515],{"id":318,"depth":202,"text":319},{"id":541,"depth":202,"text":542},{"id":719,"depth":202,"text":471},{"id":1280,"depth":202,"text":1281},{"id":1514,"depth":202,"text":519},{"id":2033,"depth":176,"text":2034},{"id":2140,"depth":176,"text":2141},{"id":2483,"depth":176,"text":2484},{"id":2494,"depth":176,"text":2495},"Install evlog in your Nuxt, Nitro, or standalone TypeScript project.","md",null,{},{"title":15,"description":2520},"8efFmiAOa5ll-4OjpaJurG2Qi69Vr3Da7AANP2U0Knk",[2527,2529],{"title":11,"path":12,"stem":13,"description":2528,"children":-1},"A TypeScript logging library focused on wide events and structured error handling.",{"title":19,"path":20,"stem":21,"description":2530,"children":-1},"Get up and running with evlog in minutes.",1769870379479]