add log4cplus

This commit is contained in:
lnk
2025-05-09 16:53:07 +08:00
parent 92117de97e
commit 8a2e6ea537
109 changed files with 18240 additions and 4034 deletions

View File

@@ -16,7 +16,9 @@
#include "node.h"
/*lnk10-10 */
#include "../include/rocketmq/SimpleProducer.h"
#include "../rocketmq/SimpleProducer.h"
#include "../log4cplus/log4.h"//lnk添加log4
#include "../cfg_parse/custom_printf.h"//lnk20250225
@@ -27,7 +29,7 @@ extern pt61850app_t *g_pt61850app;
extern node_t *g_node;
char g_my_conf_fname[256];
char g_onlyIP[255]; //ֱ<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char g_onlyIP[255]; //直连某个IP仅仅为方便测试
apr_pool_t *g_root_pool;
apr_pool_t *g_rdb_pool;
@@ -58,34 +60,34 @@ int three_secs_enabled = 0;
int auto_register_report_enabled = 0;
int g_front_seg_index = 0;
int g_front_seg_num = 0;
int FRONT_MP_NUM = 0;//<EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int g_front_num_count = 0;//<EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>
int FRONT_MP_NUM = 0;//终端连接数量
int g_front_num_count = 0;//终端连接数量过低次数
///////////////////////////////////////////////////////////////////////////////
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD>б<EFBFBD>ȫ<EFBFBD>ֹ<EFBFBD><EFBFBD>ܵ<EFBFBD>Ͷ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//根据配置子目录判别全局功能的投退,设定四个分功能性能均衡程序的功能运行划分设定
void init_global_function_enable()
{
if (strcmp(subdir,"cfg_stat_data")==0) { //<EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>̬
if (strcmp(subdir,"cfg_stat_data")==0) { //历史稳态
g_node_id = STAT_DATA_BASE_NODE_ID;
auto_register_report_enabled = 1;
}else if (strcmp(subdir,"cfg_3s_data")==0) { //ʵʱ
}else if (strcmp(subdir,"cfg_3s_data")==0) { //实时
g_node_id = THREE_SECS_DATA_BASE_NODE_ID;
three_secs_enabled = 1;
}else if (strcmp(subdir,"cfg_soe_comtrade")==0) { //<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬
}else if (strcmp(subdir,"cfg_soe_comtrade")==0) { //告警和录波和暂态
g_node_id = SOE_COMTRADE_BASE_NODE_ID;
}else if (strcmp(subdir,"cfg_his_data")==0) { //<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
}else if (strcmp(subdir,"cfg_his_data")==0) { //不使用
g_node_id = RECALL_ALL_DATA_BASE_NODE_ID;
g_node_id = HIS_DATA_BASE_NODE_ID;
}
else if (strcmp(subdir, "cfg_newhis_data") == 0) { //<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
else if (strcmp(subdir, "cfg_newhis_data") == 0) { //不使用
g_node_id = RECALL_ALL_DATA_BASE_NODE_ID;
g_node_id = NEW_HIS_DATA_BASE_NODE_ID;
}
else if (strcmp(subdir, "cfg_recallhis_data") == 0) { //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if (strcmp(subdir, "cfg_recallhis_data") == 0) { //补招
g_node_id = RECALL_HIS_DATA_BASE_NODE_ID;
}
else if (strcmp(subdir, "cfg_recallall_data") == 0) { //<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
else if (strcmp(subdir, "cfg_recallall_data") == 0) { //不使用
g_node_id = RECALL_ALL_DATA_BASE_NODE_ID;
}
}
@@ -98,21 +100,21 @@ void init_daemon(void)
int i;
if( pid = fork() )
exit(0); /** <EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
exit(0); /** 是父进程,结束父进程 */
else if( pid < 0 )
exit(1); /** forkʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD> */
exit(1); /** fork失败,退出 */
/** <EFBFBD>ǵ<EFBFBD>һ<EFBFBD>ӽ<EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD> */
/** 是第一子进程,后台继续执行 */
setsid(); /** <EFBFBD><EFBFBD>һ<EFBFBD>ӽ<EFBFBD><EFBFBD>̳<EFBFBD>Ϊ<EFBFBD>µĻỰ<EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն˷<EFBFBD><EFBFBD><EFBFBD> */
setsid(); /** 第一子进程成为新的会话组长和进程组长并与控制终端分离 */
if( pid = fork() )
exit(0); /** <EFBFBD>ǵ<EFBFBD>һ<EFBFBD>ӽ<EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD> */
exit(0); /** 是第一子进程,结束第一子进程 */
else if( pid < 0)
exit(1); /** forkʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD> */
exit(1); /** fork失败,退出 */
chdir("/FeProject/bin/"); //multi process running at same time
umask(0); /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
umask(0); /** 重设文件创建掩码 */
return;
}
@@ -132,12 +134,12 @@ int prepare_entironment_2()
apr_status_t rv;
/* apr library need call this first. */
apr_initialize(); //APACHE<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
apr_initialize(); //APACHE初始化
atexit(apr_terminate);
/* Create node root pool */
rv = apr_pool_create(&g_root_pool, NULL); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
rv = apr_pool_create(&g_root_pool, NULL); //分配根内存
if(rv != APR_SUCCESS) {
fprintf(stderr,"%s","Create node root pool failed!\n");
return (-1);
@@ -165,13 +167,13 @@ int prepare_entironment_2()
}
echo_msg("==============================================================\n");
rv = apr_pool_create(&g_rdb_pool, g_root_pool); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RDB<EFBFBD>ڴ<EFBFBD>
rv = apr_pool_create(&g_rdb_pool, g_root_pool); //分配RDB内存
if(rv != APR_SUCCESS) {
echo_errg("Create system runtime pool failed!\n");
return (-1);
}
rv = apr_pool_create(&g_cfg_pool, g_root_pool); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
rv = apr_pool_create(&g_cfg_pool, g_root_pool); //分配配置内存
if(rv != APR_SUCCESS) {
echo_errg("Create system config pool failed!\n");
return (-1);
@@ -211,6 +213,8 @@ int main(int argc, const char **argv)
return rv;
}
getVersion(argc,argv);
rv=parse_param(argc, argv);
@@ -218,6 +222,13 @@ int main(int argc, const char **argv)
return rv;
}
//lnk启动进程日志
init_logger_process();
char buf[256];
sprintf(buf, "前置的%s%d号进程 进程级日志初始化完毕", get_front_msg_from_subdir(), g_front_seg_index);
log_debug("process", buf);
#ifdef _OS_UNIX_
#ifdef QT_NO_DEBUG
if (!g_need_password)
@@ -250,23 +261,26 @@ int main(int argc, const char **argv)
rv = init_rdb();
if (rv!=APR_SUCCESS){
return rv;
}
}
//初始化终端和监测点日志
init_loggers();
rv = run_protocol();
if (rv!=APR_SUCCESS){
return rv;
}
//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־,<2C><>ֹ<EFBFBD><D6B9>δ׼<CEB4><D7BC><EFBFBD><EFBFBD>ȫ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
//初始化完成标志,防止还未准备完全就接收消息处理导致崩溃
INITFLAG = 1;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//调试用
printf("INITFLAG=%d\n",INITFLAG);
if (1 == G_TEST_FLAG) {
//lnk<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
//lnk添加mq模拟测试,这个只能放在主线程
printf("try_start_mqtest_thread \n");
int ret = try_start_mqtest_thread(0,NULL);
// <EFBFBD>ȴ<EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD>˳<EFBFBD>
// 等待线程退出
echo_warn1("%-60s","System shutdown now......");
apr_pool_destroy(g_root_pool);
echo_msg("OK\n");
@@ -276,16 +290,16 @@ int main(int argc, const char **argv)
while(1) {
/* sleep 1s, just like 1s timer */
apr_sleep(apr_time_from_sec(1));
/* ÿ30<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>״̬ */
/* 30秒钟检查一次状态 */
if( !(stimer++ % 60) ) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (g_dead_lock_counter++ >=3) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !(stimer++ % 60) ) {//分钟
if (g_dead_lock_counter++ >=3) {//三分钟
g_thread_blocked_times++;
g_dead_lock_counter = 0;
}
MVL_LOG_ACSE1 ("MYLOG: current g_thread_blocked_times = %u ", g_thread_blocked_times);
if (FRONT_MP_NUM <= 1) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (FRONT_MP_NUM <= 1) {//监测点数
g_front_num_count++;
}
else {
@@ -293,16 +307,16 @@ int main(int argc, const char **argv)
}
}
//work<EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3*13<31><33><EFBFBD>ӣ<EFBFBD><D3A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
//work线程死了3*13分钟退出进程
if (g_thread_blocked_times>=13) {
MVL_LOG_ACSE0 ("MYLOG: g_thread_blocked_times>=3, so exit to restart ");
apr_sleep(apr_time_from_sec(10));
exit(-1039);
}
//lnk20241211 <EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>
//lnk20241211 添加测试开关
pthread_mutex_lock(&mtx);
if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30分钟连接数量过低且不是单连且台账大于十个终端
MVL_LOG_ACSE0("MYLOG: g_front_num_count>=20, so exit to restart ");
apr_sleep(apr_time_from_sec(10));
@@ -403,19 +417,19 @@ int parse_param(int argc, const char **argv)
return 0;
}
///////////////////////////////////////////////////////////////<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD>̵ļ<EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD>lnk20250304
///////////////////////////////////////////////////////////////添加测试进程的监控函数lnk20250304
void doMonitorTaskmain(void) {
static int stimer = 0;
stimer++;
if( !(stimer++ % 60) ) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (g_dead_lock_counter++ >=3) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !(stimer++ % 60) ) {//分钟
if (g_dead_lock_counter++ >=3) {//三分钟
g_thread_blocked_times++;
g_dead_lock_counter = 0;
}
MVL_LOG_ACSE1 ("MYLOG: current g_thread_blocked_times = %u ", g_thread_blocked_times);
if (FRONT_MP_NUM <= 1) {//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (FRONT_MP_NUM <= 1) {//监测点数
g_front_num_count++;
}
else {
@@ -423,16 +437,16 @@ void doMonitorTaskmain(void) {
}
}
//work<EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3*13<31><33><EFBFBD>ӣ<EFBFBD><D3A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
//work线程死了3*13分钟退出进程
if (g_thread_blocked_times>=13) {
MVL_LOG_ACSE0 ("MYLOG: g_thread_blocked_times>=3, so exit to restart ");
apr_sleep(apr_time_from_sec(10));
exit(-1039);
}
//lnk20241211 <EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>
//lnk20241211 添加测试开关
pthread_mutex_lock(&mtx);
if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
if (!G_TEST_FLAG && g_front_num_count >= 30 && g_onlyIP[0] == 0 && g_node->n_clients>10) {//30分钟连接数量过低且不是单连且台账大于十个终端
MVL_LOG_ACSE0("MYLOG: g_front_num_count>=20, so exit to restart ");
apr_sleep(apr_time_from_sec(10));