log4 add code and fix comtrade file pair

This commit is contained in:
lnk
2025-08-19 16:36:45 +08:00
parent 9d02a4b031
commit 2134a43e31
11 changed files with 179 additions and 85 deletions

View File

@@ -1462,7 +1462,7 @@ int parse_rpt_log_ini()
//添加判断有的监测点没有cpuno为2直接申请了LD_info[1]没申请LD_info[0]
if(ied_usr->LD_info[cpuno].LD_name == NULL){
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
DIY_ERRORLOG("process","【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
DIY_ERRORLOG_CODE("process",LOG_CODE_RPTINIT,"【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,跳过这个监测点的报告初始化操作台账可能存在缺失,请检查台账的监测点序号是否从1开始",ied_usr->terminal_id,cpuno + 1);
continue;//跳过防止崩溃
}
@@ -1804,13 +1804,13 @@ int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml)
//加载一个文件的内容到数据结构
if (!load_ledger_update_from_xml(trigger_update_xml, filename)) {
std::cout << "read /etc/ledgerupdate/" << filename << " success..." << std::endl;
DIY_WARNLOG("process","【WARN】前置的%s%d号进程 读取台账更新文件成功,开始更新台账", get_front_msg_from_subdir(), g_front_seg_index);
DIY_WARNLOG_CODE("process",LOG_CODE_LEDGER_UPDATE,"【WARN】前置的%s%d号进程 读取台账更新文件成功,开始更新台账", get_front_msg_from_subdir(), g_front_seg_index);
}
//处理过的文件删除掉
if (std::remove(filename.c_str()) != 0) {
std::cerr << "Failed to remove file: " << filename << " Error: " << strerror(errno) << std::endl;
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 删除已读取的台账更新文件失败!请检查台账更新文件是否残留在/FeProject/etc/ledgerupdate", get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER_UPDATE,"【ERROR】前置的%s%d号进程 删除已读取的台账更新文件失败!请检查台账更新文件是否残留在/FeProject/etc/ledgerupdate", get_front_msg_from_subdir(), g_front_seg_index);
return APR_EGENERAL;
}
else{
@@ -1995,7 +1995,7 @@ int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml)
printf("/etc/trigger3s/*.xml success...\n");
DIY_WARNLOG("process","【WARN】前置读取实时数据触发文件成功,即将注册实时数据报告");
DIY_INFOLOG("process","【WARN】前置读取实时数据触发文件成功,即将注册实时数据报告");
return APR_SUCCESS;
}
@@ -2150,6 +2150,7 @@ int parse_file_names_by_fltnum(int fltnum, char* domname, char** filenames, int
p = strtok(NULL, "_"); //PQM1
p = strtok(NULL, "_"); //000001
int nFltNum = atoi(p); //将字符转换成整型
printf(">>>>>>>>>>>>>>>>>>get nFltNum from file list is %d", nFltNum);
if (nFltNum == fltnum) {
@@ -2307,7 +2308,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
QDir dir(cfg_dir);
if (!dir.exists()) {
qDebug() << "folder does not exist!";
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法解析补招文件,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_RECALL,"【ERROR】前置的%s%d号进程 无法解析补招文件,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
return false;
}
//指定文件后缀名,可指定多种类型
@@ -2323,7 +2324,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "file.open error";
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法打开补招文件%s", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
DIY_ERRORLOG_CODE("process",LOG_CODE_RECALL,"【ERROR】前置的%s%d号进程 无法打开补招文件%s", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
continue; //以只读方式打开
}
bool ret = doc.setContent(&file);
@@ -2331,7 +2332,7 @@ int parse_recall_xml(recall_xml_t* recall_xml, char* id)
if (!ret)
{
qDebug() << "doc.setContent error";
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法解析补招文件%s,补招内容无效", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
DIY_ERRORLOG_CODE("process",LOG_CODE_RECALL,"【ERROR】前置的%s%d号进程 无法解析补招文件%s,补招内容无效", get_front_msg_from_subdir(), g_front_seg_index,qstrRecallPath.toStdString().c_str());
continue;
}
//将文件内容读到doc中
@@ -2909,7 +2910,7 @@ void DeletcRecallXml() {
QDir dir(cfg_dir);
if (!dir.exists()) {
qDebug() << "folder does not exist!";
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 删除旧的补招文件失败,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_RECALL,"【ERROR】前置的%s%d号进程 删除旧的补招文件失败,补招文件路径/FeProject/etc/recall/不存在", get_front_msg_from_subdir(), g_front_seg_index);
return;
}
QStringList filter(file_name);
@@ -2974,7 +2975,7 @@ void CreateRecallXml()
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
printf("补招查询完成,打开%s失败,无法写入线路补招配置!\n", qstrRecallPath.toAscii().data());
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 无法将补招文件写入补招文件路径/FeProject/etc/recall/", get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_RECALL,"【ERROR】前置的%s%d号进程 无法将补招文件写入补招文件路径/FeProject/etc/recall/", get_front_msg_from_subdir(), g_front_seg_index);
QMap<QString, QList<CJournalRecall> >().swap(ID_CJournalRecall_Map);
return;
@@ -3702,14 +3703,14 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
// 参数验证
if (num <= 0) {
std::cerr << "Error: 'num' must be greater than 0." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置的多进程最大进程号为:%d,应该为大于0的整数",num);
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置的多进程最大进程号为:%d,应该为大于0的整数",num);
return 1; // 返回适当的错误码
}
index = index - 1;
if (index < 0 || index >= num) {
std::cerr << "Error: 'index' must be in the range [0, num]." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置当前进程的进程号为:%d,应该为0到最大进程号范围内的整数",index);
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置当前进程的进程号为:%d,应该为0到最大进程号范围内的整数",index);
return 1; // 返回适当的错误码
}
}
@@ -3717,7 +3718,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
// 获取参数
if (codes.empty()) {
std::cerr << "Error: 'codes' vector is empty." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程调用web台账接口的入参为空",get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置的%s%d号进程调用web台账接口的入参为空",get_front_msg_from_subdir(), g_front_seg_index);
return 1;
}
@@ -3837,7 +3838,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
}
}
std::cerr << "data 无效或为空数组,重试" << std::endl;
DIY_ERRORLOG("process","【ERROR】前置从web接口中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置从web接口中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
}
}
@@ -3879,7 +3880,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
break; // 本地台账解析成功且数组非空
}
}
DIY_ERRORLOG("process","【ERROR】前置从本地台账中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置从本地台账中获取的台账信息为空或者无效信息无法解析,请核对前置使用的入参信息:%s",parm.c_str());
}
free(ledger); // root==null释放内容
@@ -4147,13 +4148,13 @@ int parse_device_cfg_web()
//判断是否相等
if(max_process_num != max_index){
if(max_process_num > 0 && max_process_num < 10){
DIY_WARNLOG("process","【WARN】前置比对台账获取的进程数:%d和本地配置的进程数:%d,不匹配,按照台账进程数重置前置的进程数量",max_process_num,max_index);
DIY_WARNLOG_CODE("process",LOG_CODE_LEDGER,"【WARN】前置比对台账获取的进程数:%d和本地配置的进程数:%d,不匹配,按照台账进程数重置前置的进程数量",max_process_num,max_index);
// 调用执行脚本函数
close_listening_socket();
execute_bash("reset", max_process_num, "all");
}
else{
DIY_ERRORLOG("process","【ERROR】前置从台账获取的进程数:%d不符合范围1~9,按照本地配置进程数启动进程",max_process_num);
DIY_ERRORLOG_CODE("process",LOG_CODE_LEDGER,"【ERROR】前置从台账获取的进程数:%d不符合范围1~9,按照本地配置进程数启动进程",max_process_num);
}
}
}
@@ -4177,7 +4178,7 @@ int parse_device_cfg_web()
//添加提示
std::cout << "!!!!!!!!!!single process can not add any ledger unless reboot!!!!!!!"<< std::endl;
DIY_WARNLOG("process","【WARN】前置的%s%d号进程获取到的台账的数量大于配置文件中给单个进程配置的台账数量:%d,这个进程将按照获取到的台账的数量来创建台账空间,这个进程不能直接通过台账添加来新增台账,只能通过重启进程或者先删除已有台账再添加台账的方式来添加新台账",get_front_msg_from_subdir(), g_front_seg_index,IED_COUNT);
DIY_WARNLOG_CODE("process",LOG_CODE_LEDGER,"【WARN】前置的%s%d号进程获取到的台账的数量大于配置文件中给单个进程配置的台账数量:%d,这个进程将按照获取到的台账的数量来创建台账空间,这个进程不能直接通过台账添加来新增台账,只能通过重启进程或者先删除已有台账再添加台账的方式来添加新台账",get_front_msg_from_subdir(), g_front_seg_index,IED_COUNT);
}
else{
g_node->clients = (ied_t**)apr_pcalloc(g_cfg_pool, IED_COUNT * sizeof(ied_t*));//g_node->clients 这块大内存空间存储了 count_cfg 个 ied_t* 类型的指针(即一个指针数组)这是(指向内存块的指针)的指针数组
@@ -4458,7 +4459,7 @@ int parse_device_cfg_web()
isdelta_flag = 1; //存在一个监测点为角型接线则这个前置就要启动第二个配置列表
cout << "monitor_id" << monitor_id << "v_wiring_type:" << line_info.v_wiring_type << "is delta wiring:" << isdelta_flag << endl;
DIY_WARNLOG("process","【WARN】前置连接的监测点 %s 是角形接线,对应终端为%s 终端类型是%s",line_info.mp_id,ied_usr->terminal_id,ied_usr->dev_type);
DIY_WARNLOG_CODE("process",LOG_CODE_LEDGER,"【WARN】前置连接的监测点 %s 是角形接线,对应终端为%s 终端类型是%s",line_info.mp_id,ied_usr->terminal_id,ied_usr->dev_type);
}
strcpy(line_info.monitor_status, monitor_status);
@@ -4689,7 +4690,7 @@ int parse_model_cfg_web()
/////////////////////////////////////////////////////////////////////////
if(parse_model_web(&icd_model_map,codes)){
DIY_ERRORLOG("process","【ERROR】前置的%s%d号进程 icd模型接口异常,将使用默认的icd模型,请检查接口配置", get_front_msg_from_subdir(), g_front_seg_index);
DIY_ERRORLOG_CODE("process",LOG_CODE_ICD_AND_DOWNLOAD,"【ERROR】前置的%s%d号进程 icd模型接口异常,将使用默认的icd模型,请检查接口配置", get_front_msg_from_subdir(), g_front_seg_index);
return APR_SUCCESS; //可以使用默认的映射文件所以返回正常
}
@@ -5173,7 +5174,7 @@ void handleUploadResponse(const std::string& response, char* wavepath) {
cJSON* json_data = cJSON_Parse(response.c_str());
if (json_data == nullptr) {
std::cerr << "Error parsing response: " << cJSON_GetErrorPtr() << std::endl;
DIY_ERRORLOG("process","【ERROR】前置上传暂态录波文件失败,web返回的消息不是json格式");
DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传暂态录波文件失败,web返回的消息错误,无法解析");
return;
}
@@ -5223,7 +5224,7 @@ void handleUploadResponse(const std::string& response, char* wavepath) {
}
} else {
std::cerr << "Error: Missing expected fields in JSON response." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置上传暂态录波文件失败,web返回的消息没有远端文件名");
DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传暂态录波文件失败,web返回的消息没有远端文件名");
}
// 释放 JSON 对象
@@ -5340,7 +5341,7 @@ void SendFileWeb(const std::string& strUrl, const char* localpath, const char* c
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "http web failed: " << curl_easy_strerror(res) << std::endl;
DIY_ERRORLOG("process","【ERROR】前置上传暂态录波文件 %s 失败,请检查文件上传接口配置",localpath);
DIY_ERRORLOG_CODE("process",LOG_CODE_TRANSIENT_COMM,"【ERROR】前置上传暂态录波文件 %s 失败,请检查文件上传接口配置",localpath);
} else {
std::cout << "http web success, response: " << resPost0 << std::endl;
handleUploadResponse(resPost0, wavepath); // 处理响应
@@ -5857,7 +5858,7 @@ int parse_rpt_log_ini_one(ied_t* ied)
//添加判断有的监测点没有cpuno为2直接申请了LD_info[2-1]没申请LD_info[0]
if(ied_usr->LD_info[cpuno].LD_name == NULL){
printf("this ld_info didn't palloc space ,maybe this ledger has problem!");
DIY_ERRORLOG("process","【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,台账可能存在缺失,跳过这个监测点的报告初始化操作",ied_usr->terminal_id,cpuno + 1);
DIY_ERRORLOG_CODE("process",LOG_CODE_RPTINIT,"【ERROR】终端%s的监测点序号为%d的监测点没有在写入台账时申请空间,所以无法初始化报告,跳过这个监测点的报告初始化操作台账可能存在缺失,请检查台账的监测点序号是否从1开始",ied_usr->terminal_id,cpuno + 1);
continue;//跳过防止崩溃
}