优化日志,而且台账修改时无论什么状态都先关闭连接
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user