diff --git a/demo/test_handle_logger.c b/demo/test_handle_logger.c index d4d6e2f..b4f9e67 100644 --- a/demo/test_handle_logger.c +++ b/demo/test_handle_logger.c @@ -1,9 +1,10 @@ #include "MESA_handle_logger.h" -#include -#include +#include #include #include +#include +#include #include void *sample_handle = NULL; @@ -12,6 +13,7 @@ void *test_handle = NULL; #define LOG_NUM 100000 #define MAX_THREAD_NUM 65535 +int g_mode = 0; int g_log_num = 0; int g_thread_num = 0; const char *g_zlog_conf = NULL; @@ -80,7 +82,10 @@ void sig_int_handler(int sig) MESA_destroy_runtime_log_handle(test_handle); sample_handle = NULL; test_handle = NULL; - MESA_handle_runtime_log_destruction(); + if (g_mode == 2) + { + MESA_handle_runtime_log_destruction(); + } printf("%d thread write %d log using %ld us, avg speed %f /s, %ld -> %ld\n", g_thread_num, g_thread_num * g_log_num, g_end_time - g_start_time, ((float)(g_thread_num * g_log_num) / (float)(g_end_time - g_start_time)) * 1000000, g_start_time, g_end_time); exit(0); } @@ -96,24 +101,28 @@ int main(int argc, char ** args) pthread_t t[MAX_THREAD_NUM]; int i = 0; - if(argc != 4) + if (argc != 5) { - printf("Usage: ./($app) $zlog_conf_path $thread_num $log_num \n"); + printf("Usage: ./($app) $mode[1 or 2] $zlog_conf_path $thread_num $log_num \n"); return -1; } - g_zlog_conf = args[1]; - g_thread_num = atoi(args[2]); - g_log_num = atoi(args[3]); + g_mode = atoi(args[1]); + g_zlog_conf = args[2]; + g_thread_num = atoi(args[3]); + g_log_num = atoi(args[4]); if(g_thread_num <= 0 || g_log_num <= 0) { printf("Error, wrong parameter!\n"); return -1; } - if(0 != MESA_handle_runtime_log_creation(g_zlog_conf)) + if (g_mode == 2) { - printf("MESA_handle_runtime_log_creation return error\n"); - return -1; + if (0 != MESA_handle_runtime_log_creation(g_zlog_conf)) + { + printf("MESA_handle_runtime_log_creation return error\n"); + return -1; + } } sample_handle = MESA_create_runtime_log_handle("./log/sample_log", RLOG_LV_DEBUG); if (sample_handle == NULL) diff --git a/src/MESA_handle_logger.c b/src/MESA_handle_logger.c index c630867..55cd1cf 100644 --- a/src/MESA_handle_logger.c +++ b/src/MESA_handle_logger.c @@ -9,6 +9,7 @@ #include #define MAX_HANDLE_LOG_PATH 4096 +static int g_zlog_inited = 0; static int g_zlog_conf_fp = -1; static char global_conf_filepath[MAX_HANDLE_LOG_PATH] = ""; static char tmp_conf_filepath[MAX_HANDLE_LOG_PATH] = ""; @@ -128,7 +129,7 @@ static const char *loglevel_to_name(int level) static void snapshot_handle_info(const char *handle_name, const char *log_path, int level) { char zlog_rule_conf_content[MAX_HANDLE_LOG_PATH + 1] = ""; - static char *zlog_conf_init_buff = "[global]\ndefault format = \"%%d(%%c), %%V, %F, %U, %%m%%n\" \n[levels]\nDEBUG=10\nINFO=20\nFATAL=30\n[rules]"; + static char *zlog_conf_init_buff = "[global]\ndefault format = \"%d(%c), %V, %F, %U, %m%n\" \n[levels]\nDEBUG=10\nINFO=20\nFATAL=30\n[rules]"; if (g_zlog_conf_fp == -1) { char temp_filename[1024] = ""; @@ -150,6 +151,13 @@ static void snapshot_handle_info(const char *handle_name, const char *log_path, handle_name, loglevel_to_name(level), log_path); write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content)); fsync(g_zlog_conf_fp); + + if(g_zlog_inited == 0) + { + printf("[snapshot_handle_info], Nobody call MESA_handle_runtime_log_creation before, Using (%s) to init zlog!!!\n", tmp_conf_filepath); + zlog_init(tmp_conf_filepath); + zlog_reload(NULL); + } return; } @@ -182,7 +190,7 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level) zc = zlog_get_category(p_name); if (!zc) { - printf("MESA_create_runtime_log_handle, get zlog category %s in global_conf_filepath[%s] fail\n", p_name, global_conf_filepath); + printf("[MESA_create_runtime_log_handle], get zlog category (%s) in global_conf_filepath(%s) fail\n", p_name, global_conf_filepath); } p_handle = (log_handle_t *)calloc(sizeof(log_handle_t), 1); strncpy(p_handle->runtime_log_file, file_path, sizeof(p_handle->runtime_log_file) - 1); @@ -222,23 +230,56 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const int MESA_handle_runtime_log_creation(const char *conf_path) { - if(conf_path == NULL) + char *env = getenv("ZLOG_CONF_PATH"); + int rc = 0; + if (conf_path == NULL || (access(conf_path, R_OK) != 0)) { - printf("MESA_handle_runtime_log_creation USING [NULL], will using ZLOG_CONF_PATH or STDOUT as default profile\n"); - return zlog_init(NULL); - } - - int rc = zlog_init(conf_path); - if (rc) - { - printf("MESA_handle_runtime_log_creation init zlog by %s failed \n", conf_path); - return -1; + printf("[MESA_handle_runtime_log_creation], PATH (%s) unable to access, will output log to STDOUT or Using ZLOG_CONF_PATH (%s) !\n", conf_path, env); + rc = zlog_init(NULL); + if (rc) + { + printf("[MESA_handle_runtime_log_creation], INIT zlog by (NULL) or (%s) failed !!! \n", env); + return -1; + } + else + { + if (env != NULL) + { + strcpy(global_conf_filepath, env); + } + } } else { - strcpy(global_conf_filepath, conf_path); - zlog_profile(); + rc = zlog_init(conf_path); + if (rc) + { + printf("[MESA_handle_runtime_log_creation], INIT zlog by (%s) failed , using [NULL] retry !\n", conf_path); + rc = zlog_init(NULL); + if (rc) + { + printf("[MESA_handle_runtime_log_creation], INIT zlog by (NULL) or (%s) failed \n", env); + return -1; + } + else + { + if(env != NULL) + { + strcpy(global_conf_filepath, env); + } + } + + } + else + { + strcpy(global_conf_filepath, conf_path); + } + } + printf("[MESA_handle_runtime_log_creation], INIT zlog finish, Using (%s). \n", global_conf_filepath); + g_zlog_inited = 1; + zlog_profile(); + return rc; }