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