From d2a2b933a5dbf6b0bb8b6213db7c3969875ed7e4 Mon Sep 17 00:00:00 2001 From: youmetme <321640253@qq.com> Date: Tue, 13 Aug 2024 22:43:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90=E6=9C=AA?= =?UTF-8?q?=E9=87=8A=E6=94=BEbug=EF=BC=8C=E7=AE=80=E5=8C=96=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/logging.h | 2 -- src/logging-handler.c | 10 +++++++--- src/logging-interceptor.c | 11 +++++++---- src/logging.c | 19 ++++++++----------- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/logging.h b/include/logging.h index f10ab5a..b3e706e 100644 --- a/include/logging.h +++ b/include/logging.h @@ -25,7 +25,6 @@ typedef enum { typedef struct log_Handler { void* out; bool apply_color; - bool need_free; //是否有资源释放需求 void (*_free)(struct log_Handler* handler);//释放资源 } log_Handler; @@ -33,7 +32,6 @@ typedef struct log_Handler { typedef struct log_Interceptor { log_level level; //拦截级别 log_Handler* handler; //拦截目标处理器 - bool need_free; //是否有资源释放需求 bool (*_dispose)(char* level,const char *message, ...); //拦截触发器 void (*_free)(struct log_Interceptor* Interceptor); //释放资源 } log_Interceptor; diff --git a/src/logging-handler.c b/src/logging-handler.c index a9d9570..2a0e958 100644 --- a/src/logging-handler.c +++ b/src/logging-handler.c @@ -12,6 +12,7 @@ */ static void __freeFileHandler(log_Handler* handler){ fclose(handler->out); + free(handler); } /** @@ -26,12 +27,16 @@ log_Handler* fileHandler(const char* name){ log_Handler* handler = (log_Handler*)malloc(sizeof(log_Handler)); handler->out = fp; handler->apply_color = false; - handler->need_free = true; handler->_free = __freeFileHandler; return handler; } +static void __freeConsoleHandler(log_Handler* handler){ + free(handler); +} + + /** * @description :控制台日志处理器 * @param @@ -41,7 +46,6 @@ log_Handler* consoleHandler(const char* name){ log_Handler* handler = (log_Handler*)malloc(sizeof(log_Handler)); handler->out = stdout; handler->apply_color = true; - handler->need_free = false; - handler->_free = NULL; + handler->_free = __freeConsoleHandler; return handler; } \ No newline at end of file diff --git a/src/logging-interceptor.c b/src/logging-interceptor.c index 19758ff..51d0a58 100644 --- a/src/logging-interceptor.c +++ b/src/logging-interceptor.c @@ -9,7 +9,7 @@ static log_Interceptor* G_interceptor = NULL; static char **G_keywords = NULL; -void get_next(char *str, int *next) { +static void get_next(char *str, int *next) { next[1] = 0; int i=1; int j=0; @@ -24,7 +24,7 @@ void get_next(char *str, int *next) { } -bool kmp_search(char *substr, char *master) { +static bool kmp_search(char *substr, char *master) { int i = 0; int j = 0; int substrlen = strlen(substr); @@ -73,7 +73,7 @@ static bool _disposeSubstring(char* level,const char *message, ...){ } /** -* @description : 释放内存 +* @description : 完成拦截器自我释放内存 */ static void _freeSubstring(log_Interceptor* interceptor) { int sum = 0; @@ -84,6 +84,10 @@ static void _freeSubstring(log_Interceptor* interceptor) { free(G_keywords); G_keywords = NULL; + if(interceptor->handler != NULL){ + interceptor->handler->_free(interceptor->handler); + } + free(interceptor); } @@ -93,7 +97,6 @@ static void _freeSubstring(log_Interceptor* interceptor) { log_Interceptor* substringInterceptor(char *keywords[], int count, log_level level, log_Handler* handler) { log_Interceptor* interceptor = (log_Interceptor*)malloc(sizeof(log_Interceptor)); interceptor->_dispose = _disposeSubstring; - interceptor->need_free = true; interceptor->handler = handler; interceptor->level = level; interceptor->_free = _freeSubstring; diff --git a/src/logging.c b/src/logging.c index 5442907..8fd3d3e 100644 --- a/src/logging.c +++ b/src/logging.c @@ -40,10 +40,8 @@ static void addHandler(log_Handler* handler){ return; } - if(G_LOGGER->handler->need_free){ - G_LOGGER->handler->_free(G_LOGGER->handler); - } - free(G_LOGGER->handler); + G_LOGGER->handler->_free(G_LOGGER->handler); + G_LOGGER->handler = handler; } @@ -56,10 +54,8 @@ void addInterceptor(log_Interceptor* Interceptor){ return; } - if(G_LOGGER->interceptor->need_free){ - G_LOGGER->interceptor->_free(G_LOGGER->interceptor); - } - free(G_LOGGER->interceptor); + G_LOGGER->interceptor->_free(G_LOGGER->interceptor); + G_LOGGER->interceptor = Interceptor; } @@ -182,6 +178,8 @@ static Logger* getLogger(const char* name, log_level level){ return G_LOGGER; } + + /** * @description :创建一个日志对象 * @return :Logging* 返回一个日志对象 @@ -201,12 +199,11 @@ log_status destroyLogging(Logging* logging){ } if (G_LOGGER != NULL){ if (G_LOGGER->handler != NULL){ - if(G_LOGGER->handler->need_free)G_LOGGER->handler->_free(G_LOGGER->handler); - free(G_LOGGER->handler); + G_LOGGER->handler->_free(G_LOGGER->handler); } if (G_LOGGER->interceptor != NULL){ - if(G_LOGGER->interceptor->need_free)G_LOGGER->interceptor->_free(G_LOGGER->interceptor); + G_LOGGER->interceptor->_free(G_LOGGER->interceptor); } free(G_LOGGER);