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 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=9C=AA=E9=87=8A=E6=94=BEbug=EF=BC=8C=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E9=87=8A=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); From 96a417ba93ec1aca18764f7af1c6fb17410251d4 Mon Sep 17 00:00:00 2001 From: youmetme <321640253@qq.com> Date: Wed, 14 Aug 2024 13:02:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=99=A8=E7=BB=93=E6=9E=84=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/logging.h | 4 +++- src/logging-handler.c | 17 ++++++++++++++--- src/logging-interceptor.c | 8 +++++--- src/logging.c | 2 +- test_package/test_interceptor.c | 1 - 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/include/logging.h b/include/logging.h index b3e706e..fc79b75 100644 --- a/include/logging.h +++ b/include/logging.h @@ -23,9 +23,10 @@ typedef enum { } log_status; typedef struct log_Handler { - void* out; + void* stream; bool apply_color; void (*_free)(struct log_Handler* handler);//释放资源 + void (*output)(struct log_Handler* handler,const char* message); } log_Handler; @@ -34,6 +35,7 @@ typedef struct log_Interceptor { log_Handler* handler; //拦截目标处理器 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 2a0e958..17023b9 100644 --- a/src/logging-handler.c +++ b/src/logging-handler.c @@ -11,10 +11,14 @@ * @return */ static void __freeFileHandler(log_Handler* handler){ - fclose(handler->out); + fclose(handler->stream); free(handler); } +static void outputFileHandler(log_Handler *handler, const char * message){ + fputs(message,handler->stream); +} + /** * @description :文件日志处理器 * @param @@ -25,18 +29,24 @@ log_Handler* fileHandler(const char* name){ sprintf(new_file_name, "%s.log", name); FILE* fp = fopen(new_file_name, "at"); log_Handler* handler = (log_Handler*)malloc(sizeof(log_Handler)); - handler->out = fp; + handler->stream = fp; handler->apply_color = false; handler->_free = __freeFileHandler; + handler->output = outputFileHandler; return handler; } + static void __freeConsoleHandler(log_Handler* handler){ free(handler); } +static void outputConsoleHandler(log_Handler* handler,const char * message){ + fputs(message,handler->stream); +} + /** * @description :控制台日志处理器 * @param @@ -44,8 +54,9 @@ static void __freeConsoleHandler(log_Handler* handler){ */ log_Handler* consoleHandler(const char* name){ log_Handler* handler = (log_Handler*)malloc(sizeof(log_Handler)); - handler->out = stdout; + handler->stream = stdout; handler->apply_color = true; handler->_free = __freeConsoleHandler; + handler->output = outputConsoleHandler; return handler; } \ No newline at end of file diff --git a/src/logging-interceptor.c b/src/logging-interceptor.c index 51d0a58..41f96db 100644 --- a/src/logging-interceptor.c +++ b/src/logging-interceptor.c @@ -51,6 +51,11 @@ static bool kmp_search(char *substr, char *master) { } +/** +* @description 处理 +* @param +* @return +*/ static bool _disposeSubstring(char* level,const char *message, ...){ int count = 0; @@ -61,9 +66,6 @@ static bool _disposeSubstring(char* level,const char *message, ...){ while (G_keywords[count] != NULL) { if (kmp_search(G_keywords[count],(char*)message)) { - if(G_interceptor->handler != NULL) { - - } return true; } count++; diff --git a/src/logging.c b/src/logging.c index 8fd3d3e..6d16545 100644 --- a/src/logging.c +++ b/src/logging.c @@ -88,7 +88,7 @@ static void _builtin_log(char* level, const char *color, const char* message, .. if (handler->apply_color) sprintf(logStr, "%s %s%s%s %s\n", timeStr, color,level,RESET, message); else sprintf(logStr, "%s %s %s\n", timeStr, level, message); - fputs(logStr, handler->out); + handler->output(handler,logStr); } diff --git a/test_package/test_interceptor.c b/test_package/test_interceptor.c index 7261f6f..befddb3 100644 --- a/test_package/test_interceptor.c +++ b/test_package/test_interceptor.c @@ -1,6 +1,5 @@ #include "logging.h" - int main() { Logging *log = createLogging(); Logger *logger = log->getLogger("testLogger",LOG_DEBUG);