[{"data":1,"prerenderedAt":3271},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":75,"-getting-started-installation-surround":3266},[4,30,50],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"children":54,"page":29},"Adapters","/adapters","3.adapters",[55,60,65,70],{"title":56,"path":57,"stem":58,"icon":59},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":61,"path":62,"stem":63,"icon":64},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":66,"path":67,"stem":68,"icon":69},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":71,"path":72,"stem":73,"icon":74},"Custom Adapters","/adapters/custom","3.adapters/4.custom","i-lucide-code",{"id":76,"title":77,"body":78,"description":3258,"extension":3259,"links":3260,"meta":3262,"navigation":3263,"path":16,"seo":3264,"stem":17,"__hash__":3265},"docs/1.getting-started/2.installation.md","Install evlog",{"type":79,"value":80,"toc":3244},"minimark",[81,85,90,93,165,172,342,347,562,566,575,725,739,742,745,750,757,898,913,917,924,1083,1090,1094,1101,1287,1310,1314,1325,1519,1525,1557,1582,1586,1592,1890,1893,1907,2006,2010,2039,2053,2059,2205,2401,2408,2412,2414,2464,2471,2515,2519,2522,2841,2844,2862,2865,2888,2892,2894,2944,2947,3211,3218,3222,3225,3229,3233,3240],[82,83,84],"p",{},"evlog supports multiple environments: Nuxt, Nitro, Cloudflare Workers, and standalone TypeScript.",[86,87,89],"h2",{"id":88},"nuxt","Nuxt",[82,91,92],{},"Install evlog via your preferred package manager:",[94,95,96,122,137,151],"code-group",{},[97,98,104],"pre",{"className":99,"code":100,"filename":101,"language":102,"meta":103,"style":103},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[105,106,107],"code",{"__ignoreMap":103},[108,109,112,115,119],"span",{"class":110,"line":111},"line",1,[108,113,101],{"class":114},"sBMFI",[108,116,118],{"class":117},"sfazB"," add",[108,120,121],{"class":117}," evlog\n",[97,123,126],{"className":99,"code":124,"filename":125,"language":102,"meta":103,"style":103},"npm install evlog\n","npm",[105,127,128],{"__ignoreMap":103},[108,129,130,132,135],{"class":110,"line":111},[108,131,125],{"class":114},[108,133,134],{"class":117}," install",[108,136,121],{"class":117},[97,138,141],{"className":99,"code":139,"filename":140,"language":102,"meta":103,"style":103},"yarn add evlog\n","yarn",[105,142,143],{"__ignoreMap":103},[108,144,145,147,149],{"class":110,"line":111},[108,146,140],{"class":114},[108,148,118],{"class":117},[108,150,121],{"class":117},[97,152,155],{"className":99,"code":153,"filename":154,"language":102,"meta":103,"style":103},"bun add evlog\n","bun",[105,156,157],{"__ignoreMap":103},[108,158,159,161,163],{"class":110,"line":111},[108,160,154],{"class":114},[108,162,118],{"class":117},[108,164,121],{"class":117},[82,166,167,168,171],{},"Then add it to your Nuxt config using the ",[105,169,170],{},"evlog/nuxt"," module:",[97,173,178],{"className":174,"code":175,"filename":176,"language":177,"meta":103,"style":103},"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",[105,179,180,201,227,238,248,266,272,279,300,306,327,333],{"__ignoreMap":103},[108,181,182,186,189,193,197],{"class":110,"line":111},[108,183,185],{"class":184},"s7zQu","export",[108,187,188],{"class":184}," default",[108,190,192],{"class":191},"s2Zo4"," defineNuxtConfig",[108,194,196],{"class":195},"sTEyZ","(",[108,198,200],{"class":199},"sMK4o","{\n",[108,202,204,208,211,214,217,219,221,224],{"class":110,"line":203},2,[108,205,207],{"class":206},"swJcz","  modules",[108,209,210],{"class":199},":",[108,212,213],{"class":195}," [",[108,215,216],{"class":199},"'",[108,218,170],{"class":117},[108,220,216],{"class":199},[108,222,223],{"class":195},"]",[108,225,226],{"class":199},",\n",[108,228,230,233,235],{"class":110,"line":229},3,[108,231,232],{"class":206},"  evlog",[108,234,210],{"class":199},[108,236,237],{"class":199}," {\n",[108,239,241,244,246],{"class":110,"line":240},4,[108,242,243],{"class":206},"    env",[108,245,210],{"class":199},[108,247,237],{"class":199},[108,249,251,254,256,259,262,264],{"class":110,"line":250},5,[108,252,253],{"class":206},"      service",[108,255,210],{"class":199},[108,257,258],{"class":199}," '",[108,260,261],{"class":117},"my-app",[108,263,216],{"class":199},[108,265,226],{"class":199},[108,267,269],{"class":110,"line":268},6,[108,270,271],{"class":199},"    },\n",[108,273,275],{"class":110,"line":274},7,[108,276,278],{"class":277},"sHwdD","    // Optional: only log specific routes (supports glob patterns)\n",[108,280,282,285,287,289,291,294,296,298],{"class":110,"line":281},8,[108,283,284],{"class":206},"    include",[108,286,210],{"class":199},[108,288,213],{"class":195},[108,290,216],{"class":199},[108,292,293],{"class":117},"/api/**",[108,295,216],{"class":199},[108,297,223],{"class":195},[108,299,226],{"class":199},[108,301,303],{"class":110,"line":302},9,[108,304,305],{"class":277},"    // Optional: exclude specific routes from logging\n",[108,307,309,312,314,316,318,321,323,325],{"class":110,"line":308},10,[108,310,311],{"class":206},"    exclude",[108,313,210],{"class":199},[108,315,213],{"class":195},[108,317,216],{"class":199},[108,319,320],{"class":117},"/api/_nuxt_icon/**",[108,322,216],{"class":199},[108,324,223],{"class":195},[108,326,226],{"class":199},[108,328,330],{"class":110,"line":329},11,[108,331,332],{"class":199},"  },\n",[108,334,336,339],{"class":110,"line":335},12,[108,337,338],{"class":199},"}",[108,340,341],{"class":195},")\n",[343,344,346],"h3",{"id":345},"configuration-options","Configuration Options",[348,349,350,369],"table",{},[351,352,353],"thead",{},[354,355,356,360,363,366],"tr",{},[357,358,359],"th",{},"Option",[357,361,362],{},"Type",[357,364,365],{},"Default",[357,367,368],{},"Description",[370,371,372,393,410,433,454,475,499,520,543],"tbody",{},[354,373,374,380,385,390],{},[375,376,377],"td",{},[105,378,379],{},"env.service",[375,381,382],{},[105,383,384],{},"string",[375,386,387],{},[105,388,389],{},"'app'",[375,391,392],{},"Service name shown in logs",[354,394,395,400,404,407],{},[375,396,397],{},[105,398,399],{},"env.environment",[375,401,402],{},[105,403,384],{},[375,405,406],{},"Auto-detected",[375,408,409],{},"Environment name",[354,411,412,417,422,427],{},[375,413,414],{},[105,415,416],{},"include",[375,418,419],{},[105,420,421],{},"string[]",[375,423,424],{},[105,425,426],{},"undefined",[375,428,429,430,432],{},"Route patterns to log. Supports glob (",[105,431,293],{},"). If not set, all routes are logged",[354,434,435,440,444,448],{},[375,436,437],{},[105,438,439],{},"exclude",[375,441,442],{},[105,443,421],{},[375,445,446],{},[105,447,426],{},[375,449,450,451,453],{},"Route patterns to exclude from logging. Supports glob (",[105,452,320],{},"). Exclusions take precedence over inclusions",[354,455,456,461,466,472],{},[375,457,458],{},[105,459,460],{},"pretty",[375,462,463],{},[105,464,465],{},"boolean",[375,467,468,471],{},[105,469,470],{},"true"," in dev",[375,473,474],{},"Pretty print with tree formatting",[354,476,477,482,487,491],{},[375,478,479],{},[105,480,481],{},"sampling.rates",[375,483,484],{},[105,485,486],{},"object",[375,488,489],{},[105,490,426],{},[375,492,493,494],{},"Head sampling rates per log level (0-100%). See ",[495,496,498],"a",{"href":497},"#sampling","Sampling",[354,500,501,506,511,515],{},[375,502,503],{},[105,504,505],{},"sampling.keep",[375,507,508],{},[105,509,510],{},"array",[375,512,513],{},[105,514,426],{},[375,516,517,518],{},"Tail sampling conditions to force-keep logs. See ",[495,519,498],{"href":497},[354,521,522,527,531,536],{},[375,523,524],{},[105,525,526],{},"transport.enabled",[375,528,529],{},[105,530,465],{},[375,532,533],{},[105,534,535],{},"false",[375,537,538,539],{},"Enable sending client logs to the server. See ",[495,540,542],{"href":541},"#client-transport","Client Transport",[354,544,545,550,554,559],{},[375,546,547],{},[105,548,549],{},"transport.endpoint",[375,551,552],{},[105,553,384],{},[375,555,556],{},[105,557,558],{},"'/api/_evlog/ingest'",[375,560,561],{},"API endpoint for client log ingestion",[343,563,565],{"id":564},"route-filtering","Route Filtering",[82,567,568,569,571,572,574],{},"Use ",[105,570,416],{}," and ",[105,573,439],{}," to control which routes are logged. Both support glob patterns.",[97,576,578],{"className":174,"code":577,"filename":176,"language":177,"meta":103,"style":103},"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",[105,579,580,592,610,618,623,651,656,665,679,693,707,714,718],{"__ignoreMap":103},[108,581,582,584,586,588,590],{"class":110,"line":111},[108,583,185],{"class":184},[108,585,188],{"class":184},[108,587,192],{"class":191},[108,589,196],{"class":195},[108,591,200],{"class":199},[108,593,594,596,598,600,602,604,606,608],{"class":110,"line":203},[108,595,207],{"class":206},[108,597,210],{"class":199},[108,599,213],{"class":195},[108,601,216],{"class":199},[108,603,170],{"class":117},[108,605,216],{"class":199},[108,607,223],{"class":195},[108,609,226],{"class":199},[108,611,612,614,616],{"class":110,"line":229},[108,613,232],{"class":206},[108,615,210],{"class":199},[108,617,237],{"class":199},[108,619,620],{"class":110,"line":240},[108,621,622],{"class":277},"    // Log all API and auth routes...\n",[108,624,625,627,629,631,633,635,637,640,642,645,647,649],{"class":110,"line":250},[108,626,284],{"class":206},[108,628,210],{"class":199},[108,630,213],{"class":195},[108,632,216],{"class":199},[108,634,293],{"class":117},[108,636,216],{"class":199},[108,638,639],{"class":199},",",[108,641,258],{"class":199},[108,643,644],{"class":117},"/auth/**",[108,646,216],{"class":199},[108,648,223],{"class":195},[108,650,226],{"class":199},[108,652,653],{"class":110,"line":268},[108,654,655],{"class":277},"    // ...except internal/noisy routes\n",[108,657,658,660,662],{"class":110,"line":274},[108,659,311],{"class":206},[108,661,210],{"class":199},[108,663,664],{"class":195}," [\n",[108,666,667,670,672,674,676],{"class":110,"line":281},[108,668,669],{"class":199},"      '",[108,671,320],{"class":117},[108,673,216],{"class":199},[108,675,639],{"class":199},[108,677,678],{"class":277},"  // Nuxt Icon requests\n",[108,680,681,683,686,688,690],{"class":110,"line":302},[108,682,669],{"class":199},[108,684,685],{"class":117},"/api/_content/**",[108,687,216],{"class":199},[108,689,639],{"class":199},[108,691,692],{"class":277},"    // Nuxt Content queries\n",[108,694,695,697,700,702,704],{"class":110,"line":308},[108,696,669],{"class":199},[108,698,699],{"class":117},"/api/health",[108,701,216],{"class":199},[108,703,639],{"class":199},[108,705,706],{"class":277},"         // Health checks\n",[108,708,709,712],{"class":110,"line":329},[108,710,711],{"class":195},"    ]",[108,713,226],{"class":199},[108,715,716],{"class":110,"line":335},[108,717,332],{"class":199},[108,719,721,723],{"class":110,"line":720},13,[108,722,338],{"class":199},[108,724,341],{"class":195},[726,727,729,733,734,571,736,738],"callout",{"color":728,"icon":13},"info",[730,731,732],"strong",{},"Exclusions take precedence."," If a path matches both ",[105,735,416],{},[105,737,439],{},", it will be excluded.",[343,740,498],{"id":741},"sampling",[82,743,744],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[746,747,749],"h4",{"id":748},"head-sampling-rates","Head Sampling (rates)",[82,751,752,753,756],{},"Random sampling based on log level, decided ",[730,754,755],{},"before"," the request completes:",[97,758,760],{"className":174,"code":759,"filename":176,"language":177,"meta":103,"style":103},"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",[105,761,762,774,792,800,809,818,834,849,864,879,884,888,892],{"__ignoreMap":103},[108,763,764,766,768,770,772],{"class":110,"line":111},[108,765,185],{"class":184},[108,767,188],{"class":184},[108,769,192],{"class":191},[108,771,196],{"class":195},[108,773,200],{"class":199},[108,775,776,778,780,782,784,786,788,790],{"class":110,"line":203},[108,777,207],{"class":206},[108,779,210],{"class":199},[108,781,213],{"class":195},[108,783,216],{"class":199},[108,785,170],{"class":117},[108,787,216],{"class":199},[108,789,223],{"class":195},[108,791,226],{"class":199},[108,793,794,796,798],{"class":110,"line":229},[108,795,232],{"class":206},[108,797,210],{"class":199},[108,799,237],{"class":199},[108,801,802,805,807],{"class":110,"line":240},[108,803,804],{"class":206},"    sampling",[108,806,210],{"class":199},[108,808,237],{"class":199},[108,810,811,814,816],{"class":110,"line":250},[108,812,813],{"class":206},"      rates",[108,815,210],{"class":199},[108,817,237],{"class":199},[108,819,820,823,825,829,831],{"class":110,"line":268},[108,821,822],{"class":206},"        info",[108,824,210],{"class":199},[108,826,828],{"class":827},"sbssI"," 10",[108,830,639],{"class":199},[108,832,833],{"class":277},"    // Keep 10% of info logs\n",[108,835,836,839,841,844,846],{"class":110,"line":274},[108,837,838],{"class":206},"        warn",[108,840,210],{"class":199},[108,842,843],{"class":827}," 50",[108,845,639],{"class":199},[108,847,848],{"class":277},"    // Keep 50% of warning logs\n",[108,850,851,854,856,859,861],{"class":110,"line":281},[108,852,853],{"class":206},"        debug",[108,855,210],{"class":199},[108,857,858],{"class":827}," 5",[108,860,639],{"class":199},[108,862,863],{"class":277},"    // Keep 5% of debug logs\n",[108,865,866,869,871,874,876],{"class":110,"line":302},[108,867,868],{"class":206},"        error",[108,870,210],{"class":199},[108,872,873],{"class":827}," 100",[108,875,639],{"class":199},[108,877,878],{"class":277},"  // Always keep errors (default)\n",[108,880,881],{"class":110,"line":308},[108,882,883],{"class":199},"      },\n",[108,885,886],{"class":110,"line":329},[108,887,271],{"class":199},[108,889,890],{"class":110,"line":335},[108,891,332],{"class":199},[108,893,894,896],{"class":110,"line":720},[108,895,338],{"class":199},[108,897,341],{"class":195},[726,899,901,904,905,908,909,912],{"color":900,"icon":49},"success",[730,902,903],{},"Errors are always logged by default."," Even if you don't specify ",[105,906,907],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[105,910,911],{},"error: 0",".",[746,914,916],{"id":915},"tail-sampling-keep","Tail Sampling (keep)",[82,918,919,920,923],{},"Force-keep logs based on request outcome, evaluated ",[730,921,922],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[97,925,927],{"className":174,"code":926,"filename":176,"language":177,"meta":103,"style":103},"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",[105,928,929,941,959,967,975,997,1006,1024,1041,1062,1069,1073,1077],{"__ignoreMap":103},[108,930,931,933,935,937,939],{"class":110,"line":111},[108,932,185],{"class":184},[108,934,188],{"class":184},[108,936,192],{"class":191},[108,938,196],{"class":195},[108,940,200],{"class":199},[108,942,943,945,947,949,951,953,955,957],{"class":110,"line":203},[108,944,207],{"class":206},[108,946,210],{"class":199},[108,948,213],{"class":195},[108,950,216],{"class":199},[108,952,170],{"class":117},[108,954,216],{"class":199},[108,956,223],{"class":195},[108,958,226],{"class":199},[108,960,961,963,965],{"class":110,"line":229},[108,962,232],{"class":206},[108,964,210],{"class":199},[108,966,237],{"class":199},[108,968,969,971,973],{"class":110,"line":240},[108,970,804],{"class":206},[108,972,210],{"class":199},[108,974,237],{"class":199},[108,976,977,979,981,984,987,989,991,994],{"class":110,"line":250},[108,978,813],{"class":206},[108,980,210],{"class":199},[108,982,983],{"class":199}," {",[108,985,986],{"class":206}," info",[108,988,210],{"class":199},[108,990,828],{"class":827},[108,992,993],{"class":199}," },",[108,995,996],{"class":277},"  // Only 10% of info logs\n",[108,998,999,1002,1004],{"class":110,"line":268},[108,1000,1001],{"class":206},"      keep",[108,1003,210],{"class":199},[108,1005,664],{"class":195},[108,1007,1008,1011,1014,1016,1019,1021],{"class":110,"line":274},[108,1009,1010],{"class":199},"        {",[108,1012,1013],{"class":206}," duration",[108,1015,210],{"class":199},[108,1017,1018],{"class":827}," 1000",[108,1020,993],{"class":199},[108,1022,1023],{"class":277},"           // Always keep if duration >= 1000ms\n",[108,1025,1026,1028,1031,1033,1036,1038],{"class":110,"line":281},[108,1027,1010],{"class":199},[108,1029,1030],{"class":206}," status",[108,1032,210],{"class":199},[108,1034,1035],{"class":827}," 400",[108,1037,993],{"class":199},[108,1039,1040],{"class":277},"              // Always keep if status >= 400\n",[108,1042,1043,1045,1048,1050,1052,1055,1057,1059],{"class":110,"line":302},[108,1044,1010],{"class":199},[108,1046,1047],{"class":206}," path",[108,1049,210],{"class":199},[108,1051,258],{"class":199},[108,1053,1054],{"class":117},"/api/critical/**",[108,1056,216],{"class":199},[108,1058,993],{"class":199},[108,1060,1061],{"class":277}," // Always keep critical paths\n",[108,1063,1064,1067],{"class":110,"line":308},[108,1065,1066],{"class":195},"      ]",[108,1068,226],{"class":199},[108,1070,1071],{"class":110,"line":329},[108,1072,271],{"class":199},[108,1074,1075],{"class":110,"line":335},[108,1076,332],{"class":199},[108,1078,1079,1081],{"class":110,"line":720},[108,1080,338],{"class":199},[108,1082,341],{"class":195},[82,1084,1085,1086,1089],{},"Conditions use ",[105,1087,1088],{},">="," comparison and follow OR logic (any match = keep).",[746,1091,1093],{"id":1092},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[82,1095,1096,1097,1100],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[105,1098,1099],{},"evlog:emit:keep"," Nitro hook:",[97,1102,1105],{"className":174,"code":1103,"filename":1104,"language":177,"meta":103,"style":103},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    // Access user from accumulated context\n    const user = ctx.context.user as { premium?: boolean } | undefined\n\n    // Force-keep logs for premium users regardless of sampling rate\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server/plugins/evlog-custom.ts",[105,1106,1107,1133,1170,1175,1222,1228,1233,1253,1269,1274,1281],{"__ignoreMap":103},[108,1108,1109,1111,1113,1116,1118,1120,1124,1127,1131],{"class":110,"line":111},[108,1110,185],{"class":184},[108,1112,188],{"class":184},[108,1114,1115],{"class":191}," defineNitroPlugin",[108,1117,196],{"class":195},[108,1119,196],{"class":199},[108,1121,1123],{"class":1122},"sHdIc","nitroApp",[108,1125,1126],{"class":199},")",[108,1128,1130],{"class":1129},"spNyl"," =>",[108,1132,237],{"class":199},[108,1134,1135,1138,1140,1143,1145,1148,1150,1152,1154,1156,1158,1161,1164,1166,1168],{"class":110,"line":203},[108,1136,1137],{"class":195},"  nitroApp",[108,1139,912],{"class":199},[108,1141,1142],{"class":195},"hooks",[108,1144,912],{"class":199},[108,1146,1147],{"class":191},"hook",[108,1149,196],{"class":206},[108,1151,216],{"class":199},[108,1153,1099],{"class":117},[108,1155,216],{"class":199},[108,1157,639],{"class":199},[108,1159,1160],{"class":199}," (",[108,1162,1163],{"class":1122},"ctx",[108,1165,1126],{"class":199},[108,1167,1130],{"class":1129},[108,1169,237],{"class":199},[108,1171,1172],{"class":110,"line":229},[108,1173,1174],{"class":277},"    // Access user from accumulated context\n",[108,1176,1177,1180,1183,1186,1189,1191,1194,1196,1199,1202,1204,1207,1210,1213,1216,1219],{"class":110,"line":240},[108,1178,1179],{"class":1129},"    const",[108,1181,1182],{"class":195}," user",[108,1184,1185],{"class":199}," =",[108,1187,1188],{"class":195}," ctx",[108,1190,912],{"class":199},[108,1192,1193],{"class":195},"context",[108,1195,912],{"class":199},[108,1197,1198],{"class":195},"user",[108,1200,1201],{"class":184}," as",[108,1203,983],{"class":199},[108,1205,1206],{"class":206}," premium",[108,1208,1209],{"class":199},"?:",[108,1211,1212],{"class":114}," boolean",[108,1214,1215],{"class":199}," }",[108,1217,1218],{"class":199}," |",[108,1220,1221],{"class":114}," undefined\n",[108,1223,1224],{"class":110,"line":250},[108,1225,1227],{"emptyLinePlaceholder":1226},true,"\n",[108,1229,1230],{"class":110,"line":268},[108,1231,1232],{"class":277},"    // Force-keep logs for premium users regardless of sampling rate\n",[108,1234,1235,1238,1240,1242,1245,1248,1251],{"class":110,"line":274},[108,1236,1237],{"class":184},"    if",[108,1239,1160],{"class":206},[108,1241,1198],{"class":195},[108,1243,1244],{"class":199},"?.",[108,1246,1247],{"class":195},"premium",[108,1249,1250],{"class":206},") ",[108,1252,200],{"class":199},[108,1254,1255,1258,1260,1263,1265],{"class":110,"line":281},[108,1256,1257],{"class":195},"      ctx",[108,1259,912],{"class":199},[108,1261,1262],{"class":195},"shouldKeep",[108,1264,1185],{"class":199},[108,1266,1268],{"class":1267},"sfNiH"," true\n",[108,1270,1271],{"class":110,"line":302},[108,1272,1273],{"class":199},"    }\n",[108,1275,1276,1279],{"class":110,"line":308},[108,1277,1278],{"class":199},"  }",[108,1280,341],{"class":206},[108,1282,1283,1285],{"class":110,"line":329},[108,1284,338],{"class":199},[108,1286,341],{"class":195},[82,1288,1289,1290,1293,1294,1297,1298,1297,1301,1297,1304,1307,1308,912],{},"The hook receives a ",[105,1291,1292],{},"TailSamplingContext"," with ",[105,1295,1296],{},"status",", ",[105,1299,1300],{},"duration",[105,1302,1303],{},"path",[105,1305,1306],{},"method",", and the full accumulated ",[105,1309,1193],{},[343,1311,1313],{"id":1312},"log-draining","Log Draining",[82,1315,1316,1317,1320,1321,1324],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[105,1318,1319],{},"evlog:drain"," hook. The hook is called in ",[730,1322,1323],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[97,1326,1329],{"className":174,"code":1327,"filename":1328,"language":177,"meta":103,"style":103},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    // Send wide event to Axiom (fire-and-forget, never blocks response)\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",[105,1330,1331,1351,1386,1391,1412,1428,1470,1500,1507,1513],{"__ignoreMap":103},[108,1332,1333,1335,1337,1339,1341,1343,1345,1347,1349],{"class":110,"line":111},[108,1334,185],{"class":184},[108,1336,188],{"class":184},[108,1338,1115],{"class":191},[108,1340,196],{"class":195},[108,1342,196],{"class":199},[108,1344,1123],{"class":1122},[108,1346,1126],{"class":199},[108,1348,1130],{"class":1129},[108,1350,237],{"class":199},[108,1352,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1376,1378,1380,1382,1384],{"class":110,"line":203},[108,1354,1137],{"class":195},[108,1356,912],{"class":199},[108,1358,1142],{"class":195},[108,1360,912],{"class":199},[108,1362,1147],{"class":191},[108,1364,196],{"class":206},[108,1366,216],{"class":199},[108,1368,1319],{"class":117},[108,1370,216],{"class":199},[108,1372,639],{"class":199},[108,1374,1375],{"class":1129}," async",[108,1377,1160],{"class":199},[108,1379,1163],{"class":1122},[108,1381,1126],{"class":199},[108,1383,1130],{"class":1129},[108,1385,237],{"class":199},[108,1387,1388],{"class":110,"line":229},[108,1389,1390],{"class":277},"    // Send wide event to Axiom (fire-and-forget, never blocks response)\n",[108,1392,1393,1396,1399,1401,1403,1406,1408,1410],{"class":110,"line":240},[108,1394,1395],{"class":184},"    await",[108,1397,1398],{"class":191}," fetch",[108,1400,196],{"class":206},[108,1402,216],{"class":199},[108,1404,1405],{"class":117},"https://api.axiom.co/v1/datasets/logs/ingest",[108,1407,216],{"class":199},[108,1409,639],{"class":199},[108,1411,237],{"class":199},[108,1413,1414,1417,1419,1421,1424,1426],{"class":110,"line":250},[108,1415,1416],{"class":206},"      method",[108,1418,210],{"class":199},[108,1420,258],{"class":199},[108,1422,1423],{"class":117},"POST",[108,1425,216],{"class":199},[108,1427,226],{"class":199},[108,1429,1430,1433,1435,1437,1440,1442,1445,1448,1451,1454,1456,1459,1461,1464,1467],{"class":110,"line":268},[108,1431,1432],{"class":206},"      headers",[108,1434,210],{"class":199},[108,1436,983],{"class":199},[108,1438,1439],{"class":206}," Authorization",[108,1441,210],{"class":199},[108,1443,1444],{"class":199}," `",[108,1446,1447],{"class":117},"Bearer ",[108,1449,1450],{"class":199},"${",[108,1452,1453],{"class":195},"process",[108,1455,912],{"class":199},[108,1457,1458],{"class":195},"env",[108,1460,912],{"class":199},[108,1462,1463],{"class":195},"AXIOM_TOKEN",[108,1465,1466],{"class":199},"}`",[108,1468,1469],{"class":199}," },\n",[108,1471,1472,1475,1477,1480,1482,1485,1488,1490,1492,1495,1498],{"class":110,"line":274},[108,1473,1474],{"class":206},"      body",[108,1476,210],{"class":199},[108,1478,1479],{"class":195}," JSON",[108,1481,912],{"class":199},[108,1483,1484],{"class":191},"stringify",[108,1486,1487],{"class":206},"([",[108,1489,1163],{"class":195},[108,1491,912],{"class":199},[108,1493,1494],{"class":195},"event",[108,1496,1497],{"class":206},"])",[108,1499,226],{"class":199},[108,1501,1502,1505],{"class":110,"line":281},[108,1503,1504],{"class":199},"    }",[108,1506,341],{"class":206},[108,1508,1509,1511],{"class":110,"line":302},[108,1510,1278],{"class":199},[108,1512,341],{"class":206},[108,1514,1515,1517],{"class":110,"line":308},[108,1516,338],{"class":199},[108,1518,341],{"class":195},[82,1520,1289,1521,1524],{},[105,1522,1523],{},"DrainContext"," with:",[1526,1527,1528,1538,1551],"ul",{},[1529,1530,1531,1533,1534,1537],"li",{},[105,1532,1494],{},": The complete ",[105,1535,1536],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[1529,1539,1540,1543,1544,1297,1546,1297,1548,1126],{},[105,1541,1542],{},"request",": Optional request metadata (",[105,1545,1306],{},[105,1547,1303],{},[105,1549,1550],{},"requestId",[1529,1552,1553,1556],{},[105,1554,1555],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[726,1558,1559,1562,1563,1297,1566,1297,1569,1297,1572,1297,1575,1297,1578,1581],{"color":900,"icon":49},[730,1560,1561],{},"Security:"," Sensitive headers (",[105,1564,1565],{},"authorization",[105,1567,1568],{},"cookie",[105,1570,1571],{},"set-cookie",[105,1573,1574],{},"x-api-key",[105,1576,1577],{},"x-auth-token",[105,1579,1580],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[746,1583,1585],{"id":1584},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[82,1587,1588,1589,1591],{},"The ",[105,1590,1555],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[97,1593,1596],{"className":174,"code":1594,"filename":1595,"language":177,"meta":103,"style":103},"export default defineNitroPlugin((nitroApp) => {\n  const posthog = usePostHog()\n\n  nitroApp.hooks.hook('evlog:drain', (ctx) => {\n    if (!posthog) return\n\n    // Extract correlation headers sent from the client\n    // These headers are safe (sensitive headers like Authorization are filtered)\n    const sessionId = ctx.headers?.['x-posthog-session-id']\n    const distinctId = ctx.headers?.['x-posthog-distinct-id']\n\n    if (!distinctId) return\n\n    // Correlate server logs with client sessions in PostHog\n    posthog.capture({\n      distinctId,\n      event: 'server_log',\n      properties: {\n        ...ctx.event,\n        $session_id: sessionId,\n      },\n    })\n  })\n})\n","server/plugins/evlog-posthog.ts",[105,1597,1598,1618,1634,1638,1670,1687,1691,1696,1701,1731,1759,1763,1778,1782,1788,1803,1811,1828,1838,1852,1864,1869,1876,1883],{"__ignoreMap":103},[108,1599,1600,1602,1604,1606,1608,1610,1612,1614,1616],{"class":110,"line":111},[108,1601,185],{"class":184},[108,1603,188],{"class":184},[108,1605,1115],{"class":191},[108,1607,196],{"class":195},[108,1609,196],{"class":199},[108,1611,1123],{"class":1122},[108,1613,1126],{"class":199},[108,1615,1130],{"class":1129},[108,1617,237],{"class":199},[108,1619,1620,1623,1626,1628,1631],{"class":110,"line":203},[108,1621,1622],{"class":1129},"  const",[108,1624,1625],{"class":195}," posthog",[108,1627,1185],{"class":199},[108,1629,1630],{"class":191}," usePostHog",[108,1632,1633],{"class":206},"()\n",[108,1635,1636],{"class":110,"line":229},[108,1637,1227],{"emptyLinePlaceholder":1226},[108,1639,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668],{"class":110,"line":240},[108,1641,1137],{"class":195},[108,1643,912],{"class":199},[108,1645,1142],{"class":195},[108,1647,912],{"class":199},[108,1649,1147],{"class":191},[108,1651,196],{"class":206},[108,1653,216],{"class":199},[108,1655,1319],{"class":117},[108,1657,216],{"class":199},[108,1659,639],{"class":199},[108,1661,1160],{"class":199},[108,1663,1163],{"class":1122},[108,1665,1126],{"class":199},[108,1667,1130],{"class":1129},[108,1669,237],{"class":199},[108,1671,1672,1674,1676,1679,1682,1684],{"class":110,"line":250},[108,1673,1237],{"class":184},[108,1675,1160],{"class":206},[108,1677,1678],{"class":199},"!",[108,1680,1681],{"class":195},"posthog",[108,1683,1250],{"class":206},[108,1685,1686],{"class":184},"return\n",[108,1688,1689],{"class":110,"line":268},[108,1690,1227],{"emptyLinePlaceholder":1226},[108,1692,1693],{"class":110,"line":274},[108,1694,1695],{"class":277},"    // Extract correlation headers sent from the client\n",[108,1697,1698],{"class":110,"line":281},[108,1699,1700],{"class":277},"    // These headers are safe (sensitive headers like Authorization are filtered)\n",[108,1702,1703,1705,1708,1710,1712,1714,1716,1718,1721,1723,1726,1728],{"class":110,"line":302},[108,1704,1179],{"class":1129},[108,1706,1707],{"class":195}," sessionId",[108,1709,1185],{"class":199},[108,1711,1188],{"class":195},[108,1713,912],{"class":199},[108,1715,1555],{"class":195},[108,1717,1244],{"class":199},[108,1719,1720],{"class":206},"[",[108,1722,216],{"class":199},[108,1724,1725],{"class":117},"x-posthog-session-id",[108,1727,216],{"class":199},[108,1729,1730],{"class":206},"]\n",[108,1732,1733,1735,1738,1740,1742,1744,1746,1748,1750,1752,1755,1757],{"class":110,"line":308},[108,1734,1179],{"class":1129},[108,1736,1737],{"class":195}," distinctId",[108,1739,1185],{"class":199},[108,1741,1188],{"class":195},[108,1743,912],{"class":199},[108,1745,1555],{"class":195},[108,1747,1244],{"class":199},[108,1749,1720],{"class":206},[108,1751,216],{"class":199},[108,1753,1754],{"class":117},"x-posthog-distinct-id",[108,1756,216],{"class":199},[108,1758,1730],{"class":206},[108,1760,1761],{"class":110,"line":329},[108,1762,1227],{"emptyLinePlaceholder":1226},[108,1764,1765,1767,1769,1771,1774,1776],{"class":110,"line":335},[108,1766,1237],{"class":184},[108,1768,1160],{"class":206},[108,1770,1678],{"class":199},[108,1772,1773],{"class":195},"distinctId",[108,1775,1250],{"class":206},[108,1777,1686],{"class":184},[108,1779,1780],{"class":110,"line":720},[108,1781,1227],{"emptyLinePlaceholder":1226},[108,1783,1785],{"class":110,"line":1784},14,[108,1786,1787],{"class":277},"    // Correlate server logs with client sessions in PostHog\n",[108,1789,1791,1794,1796,1799,1801],{"class":110,"line":1790},15,[108,1792,1793],{"class":195},"    posthog",[108,1795,912],{"class":199},[108,1797,1798],{"class":191},"capture",[108,1800,196],{"class":206},[108,1802,200],{"class":199},[108,1804,1806,1809],{"class":110,"line":1805},16,[108,1807,1808],{"class":195},"      distinctId",[108,1810,226],{"class":199},[108,1812,1814,1817,1819,1821,1824,1826],{"class":110,"line":1813},17,[108,1815,1816],{"class":206},"      event",[108,1818,210],{"class":199},[108,1820,258],{"class":199},[108,1822,1823],{"class":117},"server_log",[108,1825,216],{"class":199},[108,1827,226],{"class":199},[108,1829,1831,1834,1836],{"class":110,"line":1830},18,[108,1832,1833],{"class":206},"      properties",[108,1835,210],{"class":199},[108,1837,237],{"class":199},[108,1839,1841,1844,1846,1848,1850],{"class":110,"line":1840},19,[108,1842,1843],{"class":199},"        ...",[108,1845,1163],{"class":195},[108,1847,912],{"class":199},[108,1849,1494],{"class":195},[108,1851,226],{"class":199},[108,1853,1855,1858,1860,1862],{"class":110,"line":1854},20,[108,1856,1857],{"class":206},"        $session_id",[108,1859,210],{"class":199},[108,1861,1707],{"class":195},[108,1863,226],{"class":199},[108,1865,1867],{"class":110,"line":1866},21,[108,1868,883],{"class":199},[108,1870,1872,1874],{"class":110,"line":1871},22,[108,1873,1504],{"class":199},[108,1875,341],{"class":206},[108,1877,1879,1881],{"class":110,"line":1878},23,[108,1880,1278],{"class":199},[108,1882,341],{"class":206},[108,1884,1886,1888],{"class":110,"line":1885},24,[108,1887,338],{"class":199},[108,1889,341],{"class":195},[343,1891,542],{"id":1892},"client-transport",[82,1894,1895,1896,1297,1899,1902,1903,1906],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[105,1897,1898],{},"log.info()",[105,1900,1901],{},"log.error()",", etc. calls are automatically sent to the server via the ",[105,1904,1905],{},"/api/_evlog/ingest"," endpoint.",[97,1908,1910],{"className":174,"code":1909,"filename":176,"language":177,"meta":103,"style":103},"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",[105,1911,1912,1924,1942,1950,1959,1974,1992,1996,2000],{"__ignoreMap":103},[108,1913,1914,1916,1918,1920,1922],{"class":110,"line":111},[108,1915,185],{"class":184},[108,1917,188],{"class":184},[108,1919,192],{"class":191},[108,1921,196],{"class":195},[108,1923,200],{"class":199},[108,1925,1926,1928,1930,1932,1934,1936,1938,1940],{"class":110,"line":203},[108,1927,207],{"class":206},[108,1929,210],{"class":199},[108,1931,213],{"class":195},[108,1933,216],{"class":199},[108,1935,170],{"class":117},[108,1937,216],{"class":199},[108,1939,223],{"class":195},[108,1941,226],{"class":199},[108,1943,1944,1946,1948],{"class":110,"line":229},[108,1945,232],{"class":206},[108,1947,210],{"class":199},[108,1949,237],{"class":199},[108,1951,1952,1955,1957],{"class":110,"line":240},[108,1953,1954],{"class":206},"    transport",[108,1956,210],{"class":199},[108,1958,237],{"class":199},[108,1960,1961,1964,1966,1969,1971],{"class":110,"line":250},[108,1962,1963],{"class":206},"      enabled",[108,1965,210],{"class":199},[108,1967,1968],{"class":1267}," true",[108,1970,639],{"class":199},[108,1972,1973],{"class":277},"  // Enable client log transport\n",[108,1975,1976,1979,1981,1983,1985,1987,1989],{"class":110,"line":268},[108,1977,1978],{"class":206},"      endpoint",[108,1980,210],{"class":199},[108,1982,258],{"class":199},[108,1984,1905],{"class":117},[108,1986,216],{"class":199},[108,1988,639],{"class":199},[108,1990,1991],{"class":277},"  // default\n",[108,1993,1994],{"class":110,"line":274},[108,1995,271],{"class":199},[108,1997,1998],{"class":110,"line":281},[108,1999,332],{"class":199},[108,2001,2002,2004],{"class":110,"line":302},[108,2003,338],{"class":199},[108,2005,341],{"class":195},[746,2007,2009],{"id":2008},"how-it-works","How it works",[2011,2012,2013,2019,2025,2028,2036],"ol",{},[1529,2014,2015,2016],{},"Client calls ",[105,2017,2018],{},"log.info({ action: 'click', button: 'submit' })",[1529,2020,2021,2022,2024],{},"Log is sent to ",[105,2023,1905],{}," via POST",[1529,2026,2027],{},"Server enriches with environment context (service, version, region, etc.)",[1529,2029,2030,2032,2033],{},[105,2031,1319],{}," hook is called with ",[105,2034,2035],{},"source: 'client'",[1529,2037,2038],{},"External services receive the log (Axiom, Loki, etc.)",[726,2040,2041,2042,1297,2045,2048,2049,2052],{"color":728,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[105,2043,2044],{},"service",[105,2046,2047],{},"environment",", or ",[105,2050,2051],{},"version"," from the client.",[82,2054,2055,2056,2058],{},"In your drain hook, you can identify client logs by the ",[105,2057,2035],{}," field:",[97,2060,2063],{"className":174,"code":2061,"filename":2062,"language":177,"meta":103,"style":103},"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",[105,2064,2065,2085,2119,2150,2155,2184,2188,2193,2199],{"__ignoreMap":103},[108,2066,2067,2069,2071,2073,2075,2077,2079,2081,2083],{"class":110,"line":111},[108,2068,185],{"class":184},[108,2070,188],{"class":184},[108,2072,1115],{"class":191},[108,2074,196],{"class":195},[108,2076,196],{"class":199},[108,2078,1123],{"class":1122},[108,2080,1126],{"class":199},[108,2082,1130],{"class":1129},[108,2084,237],{"class":199},[108,2086,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117],{"class":110,"line":203},[108,2088,1137],{"class":195},[108,2090,912],{"class":199},[108,2092,1142],{"class":195},[108,2094,912],{"class":199},[108,2096,1147],{"class":191},[108,2098,196],{"class":206},[108,2100,216],{"class":199},[108,2102,1319],{"class":117},[108,2104,216],{"class":199},[108,2106,639],{"class":199},[108,2108,1375],{"class":1129},[108,2110,1160],{"class":199},[108,2112,1163],{"class":1122},[108,2114,1126],{"class":199},[108,2116,1130],{"class":1129},[108,2118,237],{"class":199},[108,2120,2121,2123,2125,2127,2129,2131,2133,2136,2139,2141,2144,2146,2148],{"class":110,"line":229},[108,2122,1237],{"class":184},[108,2124,1160],{"class":206},[108,2126,1163],{"class":195},[108,2128,912],{"class":199},[108,2130,1494],{"class":195},[108,2132,912],{"class":199},[108,2134,2135],{"class":195},"source",[108,2137,2138],{"class":199}," ===",[108,2140,258],{"class":199},[108,2142,2143],{"class":117},"client",[108,2145,216],{"class":199},[108,2147,1250],{"class":206},[108,2149,200],{"class":199},[108,2151,2152],{"class":110,"line":240},[108,2153,2154],{"class":277},"      // Handle client logs specifically\n",[108,2156,2157,2160,2162,2165,2167,2169,2172,2174,2176,2178,2180,2182],{"class":110,"line":250},[108,2158,2159],{"class":195},"      console",[108,2161,912],{"class":199},[108,2163,2164],{"class":191},"log",[108,2166,196],{"class":206},[108,2168,216],{"class":199},[108,2170,2171],{"class":117},"[CLIENT]",[108,2173,216],{"class":199},[108,2175,639],{"class":199},[108,2177,1188],{"class":195},[108,2179,912],{"class":199},[108,2181,1494],{"class":195},[108,2183,341],{"class":206},[108,2185,2186],{"class":110,"line":268},[108,2187,1273],{"class":199},[108,2189,2190],{"class":110,"line":274},[108,2191,2192],{"class":277},"    // Send to external service...\n",[108,2194,2195,2197],{"class":110,"line":281},[108,2196,1278],{"class":199},[108,2198,341],{"class":206},[108,2200,2201,2203],{"class":110,"line":302},[108,2202,338],{"class":199},[108,2204,341],{"class":195},[726,2206,2208,2218],{"color":728,"icon":2207},"i-lucide-lightbulb",[82,2209,2210,2213,2214,2217],{},[730,2211,2212],{},"Tip:"," Use Nuxt's ",[105,2215,2216],{},"$production"," override to sample only in production while keeping full visibility in development:",[97,2219,2221],{"className":174,"code":2220,"filename":176,"language":177,"meta":103,"style":103},"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",[105,2222,2223,2235,2253,2261,2282,2286,2295,2304,2313,2349,2383,2387,2391,2395],{"__ignoreMap":103},[108,2224,2225,2227,2229,2231,2233],{"class":110,"line":111},[108,2226,185],{"class":184},[108,2228,188],{"class":184},[108,2230,192],{"class":191},[108,2232,196],{"class":195},[108,2234,200],{"class":199},[108,2236,2237,2239,2241,2243,2245,2247,2249,2251],{"class":110,"line":203},[108,2238,207],{"class":206},[108,2240,210],{"class":199},[108,2242,213],{"class":195},[108,2244,216],{"class":199},[108,2246,170],{"class":117},[108,2248,216],{"class":199},[108,2250,223],{"class":195},[108,2252,226],{"class":199},[108,2254,2255,2257,2259],{"class":110,"line":229},[108,2256,232],{"class":206},[108,2258,210],{"class":199},[108,2260,237],{"class":199},[108,2262,2263,2265,2267,2269,2272,2274,2276,2278,2280],{"class":110,"line":240},[108,2264,243],{"class":206},[108,2266,210],{"class":199},[108,2268,983],{"class":199},[108,2270,2271],{"class":206}," service",[108,2273,210],{"class":199},[108,2275,258],{"class":199},[108,2277,261],{"class":117},[108,2279,216],{"class":199},[108,2281,1469],{"class":199},[108,2283,2284],{"class":110,"line":250},[108,2285,332],{"class":199},[108,2287,2288,2291,2293],{"class":110,"line":268},[108,2289,2290],{"class":206},"  $production",[108,2292,210],{"class":199},[108,2294,237],{"class":199},[108,2296,2297,2300,2302],{"class":110,"line":274},[108,2298,2299],{"class":206},"    evlog",[108,2301,210],{"class":199},[108,2303,237],{"class":199},[108,2305,2306,2309,2311],{"class":110,"line":281},[108,2307,2308],{"class":206},"      sampling",[108,2310,210],{"class":199},[108,2312,237],{"class":199},[108,2314,2315,2318,2320,2322,2324,2326,2328,2330,2333,2335,2337,2339,2342,2344,2347],{"class":110,"line":302},[108,2316,2317],{"class":206},"        rates",[108,2319,210],{"class":199},[108,2321,983],{"class":199},[108,2323,986],{"class":206},[108,2325,210],{"class":199},[108,2327,828],{"class":827},[108,2329,639],{"class":199},[108,2331,2332],{"class":206}," warn",[108,2334,210],{"class":199},[108,2336,843],{"class":827},[108,2338,639],{"class":199},[108,2340,2341],{"class":206}," debug",[108,2343,210],{"class":199},[108,2345,2346],{"class":827}," 0",[108,2348,1469],{"class":199},[108,2350,2351,2354,2356,2358,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381],{"class":110,"line":308},[108,2352,2353],{"class":206},"        keep",[108,2355,210],{"class":199},[108,2357,213],{"class":195},[108,2359,2360],{"class":199},"{",[108,2362,1013],{"class":206},[108,2364,210],{"class":199},[108,2366,1018],{"class":827},[108,2368,993],{"class":199},[108,2370,983],{"class":199},[108,2372,1030],{"class":206},[108,2374,210],{"class":199},[108,2376,1035],{"class":827},[108,2378,1215],{"class":199},[108,2380,223],{"class":195},[108,2382,226],{"class":199},[108,2384,2385],{"class":110,"line":329},[108,2386,883],{"class":199},[108,2388,2389],{"class":110,"line":335},[108,2390,271],{"class":199},[108,2392,2393],{"class":110,"line":720},[108,2394,332],{"class":199},[108,2396,2397,2399],{"class":110,"line":1784},[108,2398,338],{"class":199},[108,2400,341],{"class":195},[82,2402,2403,2404,2407],{},"That's it! You can now use ",[105,2405,2406],{},"useLogger(event)"," in any API route.",[86,2409,2411],{"id":2410},"nitro","Nitro",[82,2413,92],{},[94,2415,2416,2428,2440,2452],{},[97,2417,2418],{"className":99,"code":100,"filename":101,"language":102,"meta":103,"style":103},[105,2419,2420],{"__ignoreMap":103},[108,2421,2422,2424,2426],{"class":110,"line":111},[108,2423,101],{"class":114},[108,2425,118],{"class":117},[108,2427,121],{"class":117},[97,2429,2430],{"className":99,"code":124,"filename":125,"language":102,"meta":103,"style":103},[105,2431,2432],{"__ignoreMap":103},[108,2433,2434,2436,2438],{"class":110,"line":111},[108,2435,125],{"class":114},[108,2437,134],{"class":117},[108,2439,121],{"class":117},[97,2441,2442],{"className":99,"code":139,"filename":140,"language":102,"meta":103,"style":103},[105,2443,2444],{"__ignoreMap":103},[108,2445,2446,2448,2450],{"class":110,"line":111},[108,2447,140],{"class":114},[108,2449,118],{"class":117},[108,2451,121],{"class":117},[97,2453,2454],{"className":99,"code":153,"filename":154,"language":102,"meta":103,"style":103},[105,2455,2456],{"__ignoreMap":103},[108,2457,2458,2460,2462],{"class":110,"line":111},[108,2459,154],{"class":114},[108,2461,118],{"class":117},[108,2463,121],{"class":117},[82,2465,2466,2467,2470],{},"Then, add evlog as a Nitro plugin (without Nuxt) using the ",[105,2468,2469],{},"evlog/nitro"," plugin:",[97,2472,2475],{"className":174,"code":2473,"filename":2474,"language":177,"meta":103,"style":103},"export default defineNitroConfig({\n  plugins: ['evlog/nitro'],\n})\n","nitro.config.ts",[105,2476,2477,2490,2509],{"__ignoreMap":103},[108,2478,2479,2481,2483,2486,2488],{"class":110,"line":111},[108,2480,185],{"class":184},[108,2482,188],{"class":184},[108,2484,2485],{"class":191}," defineNitroConfig",[108,2487,196],{"class":195},[108,2489,200],{"class":199},[108,2491,2492,2495,2497,2499,2501,2503,2505,2507],{"class":110,"line":203},[108,2493,2494],{"class":206},"  plugins",[108,2496,210],{"class":199},[108,2498,213],{"class":195},[108,2500,216],{"class":199},[108,2502,2469],{"class":117},[108,2504,216],{"class":199},[108,2506,223],{"class":195},[108,2508,226],{"class":199},[108,2510,2511,2513],{"class":110,"line":229},[108,2512,338],{"class":199},[108,2514,341],{"class":195},[86,2516,2518],{"id":2517},"cloudflare-workers","Cloudflare Workers",[82,2520,2521],{},"Use the Workers adapter for structured logs and correct platform severity.",[97,2523,2526],{"className":174,"code":2524,"filename":2525,"language":177,"meta":103,"style":103},"import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'\n\ninitWorkersLogger({\n  env: { service: 'edge-api' },\n})\n\nexport default {\n  async fetch(request: Request) {\n    const log = createWorkersLogger(request)\n\n    try {\n      log.set({ route: 'health' })\n      const response = new Response('ok', { status: 200 })\n      log.emit({ status: response.status })\n      return response\n    } catch (error) {\n      log.error(error as Error)\n      log.emit({ status: 500 })\n      throw error\n    }\n  },\n}\n","src/index.ts",[105,2527,2528,2556,2560,2569,2591,2597,2601,2609,2629,2646,2650,2657,2687,2727,2754,2762,2778,2797,2820,2828,2832,2836],{"__ignoreMap":103},[108,2529,2530,2533,2535,2538,2540,2543,2545,2548,2550,2553],{"class":110,"line":111},[108,2531,2532],{"class":184},"import",[108,2534,983],{"class":199},[108,2536,2537],{"class":195}," initWorkersLogger",[108,2539,639],{"class":199},[108,2541,2542],{"class":195}," createWorkersLogger",[108,2544,1215],{"class":199},[108,2546,2547],{"class":184}," from",[108,2549,258],{"class":199},[108,2551,2552],{"class":117},"evlog/workers",[108,2554,2555],{"class":199},"'\n",[108,2557,2558],{"class":110,"line":203},[108,2559,1227],{"emptyLinePlaceholder":1226},[108,2561,2562,2565,2567],{"class":110,"line":229},[108,2563,2564],{"class":191},"initWorkersLogger",[108,2566,196],{"class":195},[108,2568,200],{"class":199},[108,2570,2571,2574,2576,2578,2580,2582,2584,2587,2589],{"class":110,"line":240},[108,2572,2573],{"class":206},"  env",[108,2575,210],{"class":199},[108,2577,983],{"class":199},[108,2579,2271],{"class":206},[108,2581,210],{"class":199},[108,2583,258],{"class":199},[108,2585,2586],{"class":117},"edge-api",[108,2588,216],{"class":199},[108,2590,1469],{"class":199},[108,2592,2593,2595],{"class":110,"line":250},[108,2594,338],{"class":199},[108,2596,341],{"class":195},[108,2598,2599],{"class":110,"line":268},[108,2600,1227],{"emptyLinePlaceholder":1226},[108,2602,2603,2605,2607],{"class":110,"line":274},[108,2604,185],{"class":184},[108,2606,188],{"class":184},[108,2608,237],{"class":199},[108,2610,2611,2614,2616,2618,2620,2622,2625,2627],{"class":110,"line":281},[108,2612,2613],{"class":1129},"  async",[108,2615,1398],{"class":206},[108,2617,196],{"class":199},[108,2619,1542],{"class":1122},[108,2621,210],{"class":199},[108,2623,2624],{"class":114}," Request",[108,2626,1126],{"class":199},[108,2628,237],{"class":199},[108,2630,2631,2633,2636,2638,2640,2642,2644],{"class":110,"line":302},[108,2632,1179],{"class":1129},[108,2634,2635],{"class":195}," log",[108,2637,1185],{"class":199},[108,2639,2542],{"class":191},[108,2641,196],{"class":206},[108,2643,1542],{"class":195},[108,2645,341],{"class":206},[108,2647,2648],{"class":110,"line":308},[108,2649,1227],{"emptyLinePlaceholder":1226},[108,2651,2652,2655],{"class":110,"line":329},[108,2653,2654],{"class":184},"    try",[108,2656,237],{"class":199},[108,2658,2659,2662,2664,2667,2669,2671,2674,2676,2678,2681,2683,2685],{"class":110,"line":335},[108,2660,2661],{"class":195},"      log",[108,2663,912],{"class":199},[108,2665,2666],{"class":191},"set",[108,2668,196],{"class":206},[108,2670,2360],{"class":199},[108,2672,2673],{"class":206}," route",[108,2675,210],{"class":199},[108,2677,258],{"class":199},[108,2679,2680],{"class":117},"health",[108,2682,216],{"class":199},[108,2684,1215],{"class":199},[108,2686,341],{"class":206},[108,2688,2689,2692,2695,2697,2700,2703,2705,2707,2710,2712,2714,2716,2718,2720,2723,2725],{"class":110,"line":720},[108,2690,2691],{"class":1129},"      const",[108,2693,2694],{"class":195}," response",[108,2696,1185],{"class":199},[108,2698,2699],{"class":199}," new",[108,2701,2702],{"class":191}," Response",[108,2704,196],{"class":206},[108,2706,216],{"class":199},[108,2708,2709],{"class":117},"ok",[108,2711,216],{"class":199},[108,2713,639],{"class":199},[108,2715,983],{"class":199},[108,2717,1030],{"class":206},[108,2719,210],{"class":199},[108,2721,2722],{"class":827}," 200",[108,2724,1215],{"class":199},[108,2726,341],{"class":206},[108,2728,2729,2731,2733,2736,2738,2740,2742,2744,2746,2748,2750,2752],{"class":110,"line":1784},[108,2730,2661],{"class":195},[108,2732,912],{"class":199},[108,2734,2735],{"class":191},"emit",[108,2737,196],{"class":206},[108,2739,2360],{"class":199},[108,2741,1030],{"class":206},[108,2743,210],{"class":199},[108,2745,2694],{"class":195},[108,2747,912],{"class":199},[108,2749,1296],{"class":195},[108,2751,1215],{"class":199},[108,2753,341],{"class":206},[108,2755,2756,2759],{"class":110,"line":1790},[108,2757,2758],{"class":184},"      return",[108,2760,2761],{"class":195}," response\n",[108,2763,2764,2766,2769,2771,2774,2776],{"class":110,"line":1805},[108,2765,1504],{"class":199},[108,2767,2768],{"class":184}," catch",[108,2770,1160],{"class":206},[108,2772,2773],{"class":195},"error",[108,2775,1250],{"class":206},[108,2777,200],{"class":199},[108,2779,2780,2782,2784,2786,2788,2790,2792,2795],{"class":110,"line":1813},[108,2781,2661],{"class":195},[108,2783,912],{"class":199},[108,2785,2773],{"class":191},[108,2787,196],{"class":206},[108,2789,2773],{"class":195},[108,2791,1201],{"class":184},[108,2793,2794],{"class":114}," Error",[108,2796,341],{"class":206},[108,2798,2799,2801,2803,2805,2807,2809,2811,2813,2816,2818],{"class":110,"line":1830},[108,2800,2661],{"class":195},[108,2802,912],{"class":199},[108,2804,2735],{"class":191},[108,2806,196],{"class":206},[108,2808,2360],{"class":199},[108,2810,1030],{"class":206},[108,2812,210],{"class":199},[108,2814,2815],{"class":827}," 500",[108,2817,1215],{"class":199},[108,2819,341],{"class":206},[108,2821,2822,2825],{"class":110,"line":1840},[108,2823,2824],{"class":184},"      throw",[108,2826,2827],{"class":195}," error\n",[108,2829,2830],{"class":110,"line":1854},[108,2831,1273],{"class":199},[108,2833,2834],{"class":110,"line":1866},[108,2835,332],{"class":199},[108,2837,2838],{"class":110,"line":1871},[108,2839,2840],{"class":199},"}\n",[82,2842,2843],{},"Disable invocation logs to avoid duplicate request logs:",[97,2845,2850],{"className":2846,"code":2847,"filename":2848,"language":2849,"meta":103,"style":103},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[105,2851,2852,2857],{"__ignoreMap":103},[108,2853,2854],{"class":110,"line":111},[108,2855,2856],{},"[observability.logs]\n",[108,2858,2859],{"class":110,"line":203},[108,2860,2861],{},"invocation_logs = false\n",[82,2863,2864],{},"Notes:",[1526,2866,2867,2876,2882],{},[1529,2868,2869,2871,2872,2875],{},[105,2870,1550],{}," defaults to ",[105,2873,2874],{},"cf-ray"," when available",[1529,2877,2878,2881],{},[105,2879,2880],{},"request.cf"," is included (colo, country, asn) unless disabled",[1529,2883,568,2884,2887],{},[105,2885,2886],{},"headerAllowlist"," to avoid logging sensitive headers",[86,2889,2891],{"id":2890},"standalone-typescript","Standalone TypeScript",[82,2893,92],{},[94,2895,2896,2908,2920,2932],{},[97,2897,2898],{"className":99,"code":100,"filename":101,"language":102,"meta":103,"style":103},[105,2899,2900],{"__ignoreMap":103},[108,2901,2902,2904,2906],{"class":110,"line":111},[108,2903,101],{"class":114},[108,2905,118],{"class":117},[108,2907,121],{"class":117},[97,2909,2910],{"className":99,"code":124,"filename":125,"language":102,"meta":103,"style":103},[105,2911,2912],{"__ignoreMap":103},[108,2913,2914,2916,2918],{"class":110,"line":111},[108,2915,125],{"class":114},[108,2917,134],{"class":117},[108,2919,121],{"class":117},[97,2921,2922],{"className":99,"code":139,"filename":140,"language":102,"meta":103,"style":103},[105,2923,2924],{"__ignoreMap":103},[108,2925,2926,2928,2930],{"class":110,"line":111},[108,2927,140],{"class":114},[108,2929,118],{"class":117},[108,2931,121],{"class":117},[97,2933,2934],{"className":99,"code":153,"filename":154,"language":102,"meta":103,"style":103},[105,2935,2936],{"__ignoreMap":103},[108,2937,2938,2940,2942],{"class":110,"line":111},[108,2939,154],{"class":114},[108,2941,118],{"class":117},[108,2943,121],{"class":117},[82,2945,2946],{},"Then, use it as any other TypeScript library within your scripts, CLI tools, workers, or apps:",[97,2948,2951],{"className":174,"code":2949,"filename":2950,"language":177,"meta":103,"style":103},"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",[105,2952,2953,2978,2982,2987,2996,3004,3020,3036,3040,3045,3054,3079,3083,3089,3093,3098,3132,3173,3197],{"__ignoreMap":103},[108,2954,2955,2957,2959,2962,2964,2967,2969,2971,2973,2976],{"class":110,"line":111},[108,2956,2532],{"class":184},[108,2958,983],{"class":199},[108,2960,2961],{"class":195}," initLogger",[108,2963,639],{"class":199},[108,2965,2966],{"class":195}," createRequestLogger",[108,2968,1215],{"class":199},[108,2970,2547],{"class":184},[108,2972,258],{"class":199},[108,2974,2975],{"class":117},"evlog",[108,2977,2555],{"class":199},[108,2979,2980],{"class":110,"line":203},[108,2981,1227],{"emptyLinePlaceholder":1226},[108,2983,2984],{"class":110,"line":229},[108,2985,2986],{"class":277},"// Initialize once at startup\n",[108,2988,2989,2992,2994],{"class":110,"line":240},[108,2990,2991],{"class":191},"initLogger",[108,2993,196],{"class":195},[108,2995,200],{"class":199},[108,2997,2998,3000,3002],{"class":110,"line":250},[108,2999,2573],{"class":206},[108,3001,210],{"class":199},[108,3003,237],{"class":199},[108,3005,3006,3009,3011,3013,3016,3018],{"class":110,"line":268},[108,3007,3008],{"class":206},"    service",[108,3010,210],{"class":199},[108,3012,258],{"class":199},[108,3014,3015],{"class":117},"my-worker",[108,3017,216],{"class":199},[108,3019,226],{"class":199},[108,3021,3022,3025,3027,3029,3032,3034],{"class":110,"line":274},[108,3023,3024],{"class":206},"    environment",[108,3026,210],{"class":199},[108,3028,258],{"class":199},[108,3030,3031],{"class":117},"production",[108,3033,216],{"class":199},[108,3035,226],{"class":199},[108,3037,3038],{"class":110,"line":281},[108,3039,332],{"class":199},[108,3041,3042],{"class":110,"line":302},[108,3043,3044],{"class":277},"  // Optional: sample logs\n",[108,3046,3047,3050,3052],{"class":110,"line":308},[108,3048,3049],{"class":206},"  sampling",[108,3051,210],{"class":199},[108,3053,237],{"class":199},[108,3055,3056,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077],{"class":110,"line":329},[108,3057,3058],{"class":206},"    rates",[108,3060,210],{"class":199},[108,3062,983],{"class":199},[108,3064,986],{"class":206},[108,3066,210],{"class":199},[108,3068,828],{"class":827},[108,3070,639],{"class":199},[108,3072,2341],{"class":206},[108,3074,210],{"class":199},[108,3076,858],{"class":827},[108,3078,1469],{"class":199},[108,3080,3081],{"class":110,"line":335},[108,3082,332],{"class":199},[108,3084,3085,3087],{"class":110,"line":720},[108,3086,338],{"class":199},[108,3088,341],{"class":195},[108,3090,3091],{"class":110,"line":1784},[108,3092,1227],{"emptyLinePlaceholder":1226},[108,3094,3095],{"class":110,"line":1790},[108,3096,3097],{"class":277},"// Create a logger for each operation\n",[108,3099,3100,3103,3106,3109,3111,3113,3115,3118,3120,3123,3125,3128,3130],{"class":110,"line":1805},[108,3101,3102],{"class":1129},"const",[108,3104,3105],{"class":195}," log ",[108,3107,3108],{"class":199},"=",[108,3110,2966],{"class":191},[108,3112,196],{"class":195},[108,3114,2360],{"class":199},[108,3116,3117],{"class":206}," jobId",[108,3119,210],{"class":199},[108,3121,3122],{"class":195}," job",[108,3124,912],{"class":199},[108,3126,3127],{"class":195},"id ",[108,3129,338],{"class":199},[108,3131,341],{"class":195},[108,3133,3134,3136,3138,3140,3142,3144,3147,3149,3151,3153,3155,3157,3160,3162,3164,3166,3169,3171],{"class":110,"line":1813},[108,3135,2164],{"class":195},[108,3137,912],{"class":199},[108,3139,2666],{"class":191},[108,3141,196],{"class":195},[108,3143,2360],{"class":199},[108,3145,3146],{"class":206}," source",[108,3148,210],{"class":199},[108,3150,3122],{"class":195},[108,3152,912],{"class":199},[108,3154,2135],{"class":195},[108,3156,639],{"class":199},[108,3158,3159],{"class":206}," target",[108,3161,210],{"class":199},[108,3163,3122],{"class":195},[108,3165,912],{"class":199},[108,3167,3168],{"class":195},"target ",[108,3170,338],{"class":199},[108,3172,341],{"class":195},[108,3174,3175,3177,3179,3181,3183,3185,3188,3190,3193,3195],{"class":110,"line":1830},[108,3176,2164],{"class":195},[108,3178,912],{"class":199},[108,3180,2666],{"class":191},[108,3182,196],{"class":195},[108,3184,2360],{"class":199},[108,3186,3187],{"class":206}," recordsSynced",[108,3189,210],{"class":199},[108,3191,3192],{"class":827}," 150",[108,3194,1215],{"class":199},[108,3196,341],{"class":195},[108,3198,3199,3201,3203,3205,3208],{"class":110,"line":1840},[108,3200,2164],{"class":195},[108,3202,912],{"class":199},[108,3204,2735],{"class":191},[108,3206,3207],{"class":195},"() ",[108,3209,3210],{"class":277},"// Manual emit required in standalone mode\n",[726,3212,3213,3214,3217],{"color":728,"icon":13},"In standalone mode, you must call ",[105,3215,3216],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[86,3219,3221],{"id":3220},"typescript-configuration","TypeScript Configuration",[82,3223,3224],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[726,3226,3228],{"color":900,"icon":3227},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[86,3230,3232],{"id":3231},"next-steps","Next Steps",[1526,3234,3235],{},[1529,3236,3237,3239],{},[495,3238,20],{"href":21}," - Learn the core concepts and start using evlog",[3241,3242,3243],"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":103,"searchDepth":203,"depth":203,"links":3245},[3246,3253,3254,3255,3256,3257],{"id":88,"depth":203,"text":89,"children":3247},[3248,3249,3250,3251,3252],{"id":345,"depth":229,"text":346},{"id":564,"depth":229,"text":565},{"id":741,"depth":229,"text":498},{"id":1312,"depth":229,"text":1313},{"id":1892,"depth":229,"text":542},{"id":2410,"depth":203,"text":2411},{"id":2517,"depth":203,"text":2518},{"id":2890,"depth":203,"text":2891},{"id":3220,"depth":203,"text":3221},{"id":3231,"depth":203,"text":3232},"Install evlog in your Nuxt, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[3261],{"label":20,"icon":23,"to":21},{},{"title":15,"icon":18},{"title":77,"description":3258},"2qVHS9CqkwNMcNBvpfFLct2JIw1NkhGeLX3cLG36dsc",[3267,3269],{"title":10,"path":11,"stem":12,"description":3268,"icon":13,"children":-1},"A TypeScript logging library focused on wide events and structured error handling. Replace scattered logs with one comprehensive event per request.",{"title":20,"path":21,"stem":22,"description":3270,"icon":23,"children":-1},"Get up and running with evlog in minutes. Learn useLogger, createError, parseError, and the log API for wide events and structured errors.",1770241221236]