diff options
| author | wangmenglan <[email protected]> | 2022-01-17 17:27:59 +0800 |
|---|---|---|
| committer | wangmenglan <[email protected]> | 2022-01-17 17:27:59 +0800 |
| commit | ff694442c01595082b7fc949d930f7ad9e14eb90 (patch) | |
| tree | 5ec89bf9ffaf848cb5bbee1753bfed8e2506cd0a | |
| parent | 174a57e01fb0c8f70aa8389fe5f8c4d7dcf39c6a (diff) | |
日志逻辑实现,时间通过clock_gettime, 线程安全通过互斥锁
| -rw-r--r-- | old_version.c | 194 | ||||
| -rw-r--r-- | src/MESA_handle_logger.c | 26 |
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 ; } |
