summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangmenglan <[email protected]>2022-01-17 17:27:59 +0800
committerwangmenglan <[email protected]>2022-01-17 17:27:59 +0800
commitff694442c01595082b7fc949d930f7ad9e14eb90 (patch)
tree5ec89bf9ffaf848cb5bbee1753bfed8e2506cd0a
parent174a57e01fb0c8f70aa8389fe5f8c4d7dcf39c6a (diff)
日志逻辑实现,时间通过clock_gettime, 线程安全通过互斥锁
-rw-r--r--old_version.c194
-rw-r--r--src/MESA_handle_logger.c26
2 files changed, 20 insertions, 200 deletions
diff --git a/old_version.c b/old_version.c
deleted file mode 100644
index 1774cfe..0000000
--- a/old_version.c
+++ /dev/null
@@ -1,194 +0,0 @@
-#include "MESA_handle_logger.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include<sys/stat.h>
-
-typedef struct log_handle_t
-{
- int runtime_log_level;
- FILE *fp;
- char runtime_log_file[1200];
-} log_handle_t;
-
-#define LOGMSG_MAX_LEN 4096
-
-const int HANDLE_LOGGER_VERSION_20190218 = 1;
-
-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"};
-
-static int create_dir(const char *dir_path, int path_len)
-{
- if(dir_path == NULL)
- return -1;
-
- char *buf = (char *)calloc(path_len+1, 1);
- int ret = -1;
-
- memcpy(buf, dir_path, path_len);
- if(access(buf, R_OK) != 0)
- {
- if(mkdir(buf, 0755)!= 0)
- ret = -1;
- else
- ret = 0;
- }
- else
- ret = 1;
- free(buf);
- buf = NULL;
- return ret;
-}
-
-static int create_path(const char *path, int path_len)
-{
- const char *p_cur = path;
- int i = 0;
-
- if(create_dir(path, path_len) >= 0)
- return 0;
-
- for(;i<=path_len;i++,p_cur++)
- {
- if(*p_cur == '/')
- {
- if(create_dir(path, i+1) < 0)
- return -1;
- }
- }
- return 0;
-}
-
-void *MESA_create_runtime_log_handle(const char *file_path, int level)
-{
- if(file_path == NULL)
- return NULL;
-
- FILE *fp = NULL;
- log_handle_t *p_handle = NULL;
-
- //creating file_path failed, return NULL
- char *p_path = rindex(file_path, '/');
- if(p_path != 0)
- {
- if(create_path(file_path, p_path - file_path) < 0)
- return NULL;
- }
- if(NULL == (fp = fopen(file_path, "w")))
- return NULL;
-
- //fclose(fp);
- //remove(file_path);
- p_handle = (log_handle_t *)calloc(sizeof(log_handle_t), 1);
-
- if(p_handle == NULL)
- return NULL;
-
- strncpy(p_handle->runtime_log_file, file_path, 1024);
- p_handle->runtime_log_file[1024] = '\0';
- p_handle->runtime_log_level = level;
- //p_handle->fp = fp;
- return (void *)p_handle;
-}
-
-void MESA_destroy_runtime_log_handle(void *handle)
-{
- if(handle != NULL)
- {
- log_handle_t *p_handle = (log_handle_t *)handle;
- if (p_handle->fp != NULL)
- {
- fclose(p_handle->fp);
- p_handle->fp = NULL;
- }
- free(handle);
- handle = NULL;
- }
-
- return;
-}
-
-void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...)
-{
- char buf[LOGMSG_MAX_LEN + 1];
- time_t t;
- int len;
- va_list ap;
- FILE *fp;
- struct tm local_time;
- char tmp_log_file_name[1400];
- log_handle_t *p_handle = (log_handle_t *)handle;
-
- if(p_handle == NULL || p_handle->runtime_log_file == NULL)return;
-
- if(level < p_handle->runtime_log_level) return;
-
- time(&t);
- if(NULL == (localtime_r(&t, &local_time))) return;
- len = snprintf(buf, sizeof(buf), "%s %s %d %02d:%02d:%02d %d", 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);
- //len = strlen(buf);
-
- switch(level)
- {
- case RLOG_LV_DEBUG:
- len += snprintf(buf + len,
- LOGMSG_MAX_LEN - len, ", %s, ", "DEBUG");
- break;
-
- case RLOG_LV_INFO:
- len += snprintf(buf + len,
- LOGMSG_MAX_LEN - len, ", %s, ", "INFO");
- break;
-
- case RLOG_LV_FATAL:
- len += snprintf(buf + len,
- LOGMSG_MAX_LEN - len, ", %s, ", "FATAL");
- break;
-
- default:
- len += snprintf(buf + len,
- LOGMSG_MAX_LEN - len, ", %s, ", "UNKNOWN");
- break;
- }
-
- if(0 >= LOGMSG_MAX_LEN - len) return;
-
- len += snprintf(buf + len, LOGMSG_MAX_LEN - len, "%s, ", module);
-
- if(0 >= LOGMSG_MAX_LEN - len) return;
-
- va_start(ap, fmt);
- len += vsnprintf(buf + len, LOGMSG_MAX_LEN - len, fmt, ap);
- va_end(ap);
-
- if(0 >= LOGMSG_MAX_LEN - len) return;
-
- len += snprintf(buf + len, LOGMSG_MAX_LEN - len, "\n");
-
-
- sprintf(tmp_log_file_name, "%s.%04d-%02d-%02d", p_handle->runtime_log_file,
- local_time.tm_year + 1900, local_time.tm_mon + 1,
- local_time.tm_mday);
-
- if(p_handle->fp == NULL)
- {
- if(NULL == (fp = fopen(tmp_log_file_name, "a"))) return;
-
- p_handle->fp = fp;
- }
- if (0 > fprintf(p_handle->fp, "%s", buf))
- {
- fclose(p_handle->fp);
- p_handle->fp = NULL;
- }
- return;
-}
diff --git a/src/MESA_handle_logger.c b/src/MESA_handle_logger.c
index 499cdfa..a80c3a7 100644
--- a/src/MESA_handle_logger.c
+++ b/src/MESA_handle_logger.c
@@ -21,6 +21,7 @@ typedef struct log_handle_t
int printed;
int missed;
long begin;
+ pthread_mutex_t mutex;
int runtime_log_level;
zlog_category_t *zc;
@@ -208,6 +209,7 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level)
p_handle->burst = 10;
p_handle->interval = 5;
+ pthread_mutex_init(&p_handle->mutex,NULL);
return (void *)p_handle;
}
@@ -223,7 +225,7 @@ void MESA_destroy_runtime_log_handle(void *handle)
return;
}
-long time_update(long time)
+void time_update(long time)
{
long ret = 0;
struct timespec current = {0, 0};
@@ -234,11 +236,12 @@ long time_update(long time)
p_handle->printed = 0;
p_handle->missed = 0;
}
- return ret;
+ return ;
}
void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...)
{
+ int ret = 0;
struct timespec timer = {0, 0};
log_handle_t *p_handle = (log_handle_t *)handle;
@@ -246,6 +249,8 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const
if(p_handle->zc == NULL)return;
+ if (pthread_mutex_trylock(&p_handle->mutex) != 0)return;
+
if (!p_handle->begin)
{
clock_gettime(CLOCK_MONOTONIC, &timer);
@@ -254,15 +259,24 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const
time_update(p_handle->begin + p_handle->interval);
- if (p_handle->burst && p_handle->burst > p_handle->printed) {
+ if (p_handle->burst && p_handle->burst > p_handle->printed)
+ {
p_handle->printed++;
+ ret = 1;
+ }
+ else
+ {
+ p_handle->missed++;
+ }
+ pthread_mutex_unlock(&p_handle->mutex);
+
+ if (ret)
+ {
va_list ap;
va_start(ap, fmt);
vzlog(p_handle->zc, p_handle->runtime_log_file, strlen(p_handle->runtime_log_file), module, strlen(module), __LINE__, level, fmt, ap);
va_end(ap);
- } else {
- p_handle->missed++;
- }
+ }
return ;
}