优化日志,而且台账修改时无论什么状态都先关闭连接

This commit is contained in:
lnk
2026-04-16 10:56:11 +08:00
parent 1cde041e86
commit cf94a99cad
12 changed files with 451 additions and 417 deletions

View File

@@ -388,9 +388,10 @@ private:
struct RateState {
uint64_t hit_count;
std::chrono::steady_clock::time_point last_emit;
std::chrono::steady_clock::time_point last_reset;
bool has_emit;
RateState() : hit_count(0), last_emit(), has_emit(false) {}
RateState() : hit_count(0), last_emit(), last_reset(), has_emit(false) {}
};
static std::unordered_map<std::string, RateState> s_rate_map;
@@ -398,7 +399,7 @@ private:
static std::string make_key(const std::string& logger_name, int level, int code, const std::string& msg) {
std::ostringstream oss;
oss << logger_name << "|" << level << "|" << code << "|" << msg;
oss << logger_name << "|" << level << "|" << code ; //<< "|" << msg;
return oss.str();
}
@@ -410,13 +411,31 @@ private:
RateState& st = s_rate_map[key];
const int RESET_SEC = 3600;
// 🚀 强制时间窗口重置(关键)
if (st.has_emit) {
auto idle = duration_cast<seconds>(now - st.last_emit).count();
if (idle >= RESET_SEC) st.hit_count = 0;
auto since_reset = duration_cast<seconds>(now - st.last_reset).count();
if (since_reset >= RESET_SEC) {
st.hit_count = 0;
st.has_emit = false;
st.last_reset = now;
}
} else {
// 第一次初始化
st.last_reset = now;
}
st.hit_count++;
const int period_sec = (st.hit_count > 3) ? 300 : 1;
// 🚀 前20条完全放行
if (st.hit_count <= 20) {
st.last_emit = now;
st.has_emit = true;
return true;
}
// 🚀 超过20条1分钟限1条
const int period_sec = 60;
if (!st.has_emit) {
st.last_emit = now;
@@ -429,6 +448,7 @@ private:
st.last_emit = now;
return true;
}
return false;
}
};
@@ -554,7 +574,7 @@ void init_loggers_bydevid(const char* dev_id)
Logger device_logger = init_logger(device_key, device_dir, dev_id, device_appender); //用终端id作为日志文件名
logger_map[device_key] = TypedLogger(device_logger, LOGTYPE_DEFAULT);
DIY_INFOLOG(device_key.c_str(),"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
DIY_INFOLOG_CODE(device_key.c_str(),1,LOG_CODE_OTHER,"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
}
// 初始化监测点
@@ -579,7 +599,7 @@ void init_loggers_bydevid(const char* dev_id)
Logger mon_logger = init_logger(mon_key.str(), mon_path.str(), mon_name.str(),monitor_appender);//用监测点号作为日志文件名
logger_map[mon_key.str()] = TypedLogger(mon_logger, LOGTYPE_DEFAULT);
DIY_INFOLOG(mon_key.str().c_str(),"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
DIY_INFOLOG_CODE(mon_key.str().c_str(),2,LOG_CODE_OTHER,"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
}
}
@@ -628,7 +648,7 @@ void init_loggers() {
logger_map[device_key] = TypedLogger(device_logger, LOGTYPE_DEFAULT);
DIY_INFOLOG(device_key.c_str(),"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
DIY_INFOLOG_CODE(device_key.c_str(),1,LOG_CODE_OTHER,"【NORMAL】终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
// 初始化监测点
// 监测点 logger 名称格式monitor.<mp_id>
@@ -650,7 +670,7 @@ void init_loggers() {
logger_map[mon_key.str()] = TypedLogger(mon_logger, LOGTYPE_DEFAULT);
DIY_INFOLOG(mon_key.str().c_str(),"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
DIY_INFOLOG_CODE(mon_key.str().c_str(),2,LOG_CODE_OTHER,"【NORMAL】监测点:%s - id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].name,ied_usr->LD_info[i].mp_id);
}