summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2020-09-06 18:40:20 +0800
committeryangwei <[email protected]>2020-09-06 18:40:20 +0800
commit745f908d7030f3b70b5cfc8dd470e141186168a7 (patch)
tree181af5d60be94c9e052a73814716c51edbe81510
parent23609f6f02e23767dde1f469e2b607b8ec4a5496 (diff)
适配zlog使用模式,增加creation,reconstruction,destruction三个函数,用于初始化,重载和销毁zlog运行环境
-rw-r--r--inc/MESA_handle_logger.h8
-rw-r--r--src/MESA_handle_logger.c240
2 files changed, 124 insertions, 124 deletions
diff --git a/inc/MESA_handle_logger.h b/inc/MESA_handle_logger.h
index c615b53..ed46578 100644
--- a/inc/MESA_handle_logger.h
+++ b/inc/MESA_handle_logger.h
@@ -19,11 +19,15 @@ extern "C"
#define RLOG_LV_FATAL 30
+int MESA_handle_runtime_log_creation(const char *conf_path);
+int MESA_handle_runtime_log_reconstruction(const char *conf_path);
+void MESA_handle_runtime_log_destruction();
+
#define MESA_HANDLE_RUNTIME_LOG(handle, lv, mod, fmt, args...) \
MESA_handle_runtime_log((handle), (lv), (mod), "file %s, line %d, " fmt, \
__FILE__, __LINE__, ##args)
-/*
+ /*
* name: MESA_create_runtime_log_handle
* functionality: get runtime_log handle;
* params:
@@ -33,7 +37,7 @@ extern "C"
* not NULL, if succeeded;
* NULL, if file is not absolute path, or failed to create log file;
*/
-void *MESA_create_runtime_log_handle(const char *file_path, int level);
+ void *MESA_create_runtime_log_handle(const char *file_path, int level);
/*
* name: MESA_handle_runtime_log
diff --git a/src/MESA_handle_logger.c b/src/MESA_handle_logger.c
index 8da9752..3409b96 100644
--- a/src/MESA_handle_logger.c
+++ b/src/MESA_handle_logger.c
@@ -6,12 +6,12 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-
-static int g_zlog_conf_fp = -1;
-char tmp_conf_filepath[1024] = "";
+#include <time.h>
#define MAX_HANDLE_LOG_PATH 4096
-#define GLOB_ZLOG_CONF "GLOB_ZLOG_CONF"
+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] = "";
typedef struct log_handle_t
{
@@ -89,34 +89,6 @@ static int create_path(const char *path, int path_len)
return 0;
}
-static zlog_category_t *init_zlog(const char *conf_path, const char *category)
-{
- zlog_category_t *zc = NULL;
- if (access(conf_path, R_OK) != -1)
- {
-
- int rc = zlog_init(conf_path);
- if (rc)
- {
- rc = zlog_reload(conf_path);
- if(rc)
- {
- printf("init zlog by %s failed\n", conf_path);
- return NULL;
- }
- }
-
- zc = zlog_get_category(category);
- if (!zc)
- {
- printf("get zlog category %s in %s fail\n", category, conf_path);
- zlog_fini();
- return NULL;
- }
- }
- return zc;
-}
-
static int get_filepath(int fp, char *buf, int buflen)
{
if(buf == NULL || buflen <=0)return -1;
@@ -144,6 +116,35 @@ static void escape_for_zlog(char *in_buf, int buflen)
return;
}
+static void snapshot_handle_info(const char *handle_name, int level)
+{
+ char zlog_rule_conf_content[MAX_HANDLE_LOG_PATH + 1];
+ if (g_zlog_conf_fp == -1)
+ {
+ char temp_filename[1024] = "";
+ sprintf(temp_filename, "/tmp/MESA_handle_logger_%d.XXXXXX", getpid());
+ g_zlog_conf_fp = mkstemp(temp_filename);
+ if (g_zlog_conf_fp == -1)
+ {
+ return ;
+ }
+ if (get_filepath(g_zlog_conf_fp, tmp_conf_filepath, sizeof(tmp_conf_filepath)) < 0)
+ {
+ return;
+ }
+ int len = snprintf(zlog_rule_conf_content, sizeof(zlog_rule_conf_content),
+ "[global]\ndefault format = \"%%d(%%c), %%V, %%m%%n\" \n[levels]\nDEBUG=10\nINFO=20\nFATAL=30\n[rules]");
+ write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content));
+ fsync(g_zlog_conf_fp);
+ }
+ snprintf(zlog_rule_conf_content, sizeof(zlog_rule_conf_content),
+ "\n%s.%d \"%s.%%d(%%F)\"",
+ handle_name, level, handle_name);
+ write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content));
+ fsync(g_zlog_conf_fp);
+ return;
+}
+
void *MESA_create_runtime_log_handle(const char *file_path, int level)
{
if(file_path == NULL)
@@ -154,10 +155,8 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level)
FILE *fp = NULL;
log_handle_t *p_handle = NULL;
- char zlog_rule_conf_content[MAX_HANDLE_LOG_PATH + 1];
char handle_name[MAX_HANDLE_LOG_PATH];
char *p_path_end = rindex(file_path, '/');
- char *pathvar = getenv(GLOB_ZLOG_CONF);
char *p_name = p_path_end+1;
@@ -165,92 +164,21 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level)
escape_for_zlog(handle_name, strlen(handle_name));
p_name = handle_name;
- if (pathvar == NULL)
- {
- //creating file_path failed, return NULL
- if (create_path(file_path, p_path_end - file_path) < 0)
- return NULL;
- if (g_zlog_conf_fp == -1)
- {
- //g_zlog_conf_fp = tmpfile();
- char temp_filename[1024]="";
- sprintf(temp_filename, "/tmp/MESA_handle_logger_%d.XXXXXX", getpid());
- g_zlog_conf_fp = mkstemp(temp_filename);
- if (g_zlog_conf_fp == -1)
- {
- return NULL;
- }
- if (get_filepath(g_zlog_conf_fp, tmp_conf_filepath, sizeof(tmp_conf_filepath)) < 0)
- {
- goto error;
- }
- snprintf(zlog_rule_conf_content, sizeof(zlog_rule_conf_content),
- "[global]\ndefault format = \"%%d(%%c), %%V, %%m%%n\" \n[levels]\nDEBUG=10\nINFO=20\nFATAL=30\n[rules]\n%s.%d \"%s.%%d(%%F)\"",
- p_name, level, file_path);
- write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content));
- fsync(g_zlog_conf_fp);
- int rc = zlog_init(tmp_conf_filepath);
- if(rc)
- {
- goto error;
- }
- zc = zlog_get_category(p_name);
- if (!zc)
- {
- printf("get zlog category %s in %s fail\n", file_path, tmp_conf_filepath);
- error:
- unlink(tmp_conf_filepath);
- close(g_zlog_conf_fp);
- g_zlog_conf_fp = -1;
- memset(tmp_conf_filepath, 0, sizeof(tmp_conf_filepath));
- zlog_fini();
- return NULL;
- }
- }
- else
- {
-
- zc = zlog_get_category(p_name);
- if (!zc)
- {
- printf("get zlog category %s in %s fail\n", file_path, tmp_conf_filepath);
- return NULL;
- }
- else
- {
- //if (get_filepath(g_zlog_conf_fp, tmp_conf_filepath, sizeof(tmp_conf_filepath)) < 0)
- // return NULL;
- snprintf(zlog_rule_conf_content, sizeof(zlog_rule_conf_content),
- "\n%s.%d \"%s.%%d(%%F)\"",
- p_name, level, file_path);
- write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content));
- fsync(g_zlog_conf_fp);
- int rc = zlog_reload(tmp_conf_filepath);
- if (rc)return NULL;
- zc = zlog_get_category(p_name);
- if (!zc)
- {
- printf("get zlog category %s in %s fail\n", file_path, tmp_conf_filepath);
- return NULL;
- }
- }
- }
- }
- else
+ //creating file_path failed, return NULL
+ if (create_path(file_path, p_path_end - file_path) < 0)
+ return NULL;
+
+ snapshot_handle_info(p_name, level);
+ zc = zlog_get_category(p_name);
+ if (!zc)
{
- zc = init_zlog(pathvar, p_name);
- if (zc == NULL)
- {
- zlog_fini();
- //return NULL;
- }
+ printf("get zlog category %s in %s fail\n", p_name, tmp_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);
p_handle->runtime_log_level = level;
p_handle->zc = zc;
- p_handle->global_conf_path = pathvar;
return (void *)p_handle;
}
@@ -258,13 +186,6 @@ void MESA_destroy_runtime_log_handle(void *handle)
{
if(handle != NULL)
{
- log_handle_t *p_handle = (log_handle_t *)handle;
- zlog_fini();
- if(g_zlog_conf_fp != -1)
- {
- unlink(tmp_conf_filepath);
- close(g_zlog_conf_fp);
- }
free(handle);
handle = NULL;
}
@@ -272,6 +193,7 @@ void MESA_destroy_runtime_log_handle(void *handle)
return;
}
+
void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...)
{
@@ -281,8 +203,6 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const
if(p_handle->zc == NULL)return;
- if(level < p_handle->runtime_log_level) return;
-
va_list ap;
va_start(ap, fmt);
vzlog(p_handle->zc, __FILE__, sizeof(__FILE__) - 1, __func__, sizeof(__func__) - 1, __LINE__, level, fmt, ap);
@@ -290,3 +210,79 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const
return ;
}
+
+int MESA_handle_runtime_log_creation(const char *conf_path)
+{
+ if(conf_path == NULL)
+ {
+ printf("MESA_handle_runtime_log_creationUsing NULL, will using ZLOG_CONF_PATH or strout as default profile\n");
+ return zlog_init(NULL);
+ }
+
+ if (access(conf_path, R_OK) != -1)
+ {
+
+ int rc = zlog_init(conf_path);
+ if (rc)
+ {
+ printf("init zlog by %s failed\n", conf_path);
+ return -1;
+ }
+ else
+ {
+ strcpy(global_conf_filepath, conf_path);
+ zlog_profile();
+ }
+ return rc;
+ }
+ return -1;
+}
+
+
+
+int MESA_handle_runtime_log_reconstruction(const char *conf_path)
+{
+ char zlog_rule_conf_content[MAX_HANDLE_LOG_PATH + 1];
+ time_t t;
+ struct tm local_time;
+ if (access(conf_path, R_OK) != -1)
+ {
+ int rc = zlog_reload(conf_path);
+ #ifdef DEBUG
+ static unsigned char weekday_str[7][4] =
+ {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+
+ static unsigned char month_str[12][4] = {"Jan", "Feb", "Mar", "Apr",
+ "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+ if (!rc)
+ {
+ strcpy(global_conf_filepath, conf_path);
+ zlog_profile();
+ if (g_zlog_conf_fp != -1)
+ {
+ time(&t);
+ if (NULL != (localtime_r(&t, &local_time)))
+ {
+ snprintf(zlog_rule_conf_content, sizeof(zlog_rule_conf_content),
+ "\n%s %s %d %02d:%02d:%02d %d, RECONSTRUCTION to %s\n", weekday_str[local_time.tm_wday],
+ month_str[local_time.tm_mon], local_time.tm_mday, local_time.tm_hour, local_time.tm_min, local_time.tm_sec, local_time.tm_year + 1900, conf_path);
+ write(g_zlog_conf_fp, zlog_rule_conf_content, strlen(zlog_rule_conf_content));
+ fsync(g_zlog_conf_fp);
+ }
+ }
+ }
+#endif
+ return rc;
+ }
+ return -1;
+}
+
+void MESA_handle_runtime_log_destruction()
+{
+ zlog_fini();
+ if (g_zlog_conf_fp != -1)
+ {
+ unlink(tmp_conf_filepath);
+ close(g_zlog_conf_fp);
+ }
+}