diff --git a/README.md b/README.md index 0607a88..e37816c 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,8 @@ logging是一个轻量级的简单易用C语言日志库,支持日志级别、 #include "logging.h" int main() { - Logging *log = createLogging(); // 创建日志对象 - - Logger *logger = log->getLogger("testLogger",LOG_DEBUG); //获取日志控制器 - - logger->addHandler(consoleHandler("test")); //为日志对象添加控制台处理器 + Logging *log = newLogging(); + Logger *logger = log->getLogger("testLogger", LOG_DEBUG); logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); @@ -30,7 +27,7 @@ int main() { logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - destroyLogging(log); + log->destroyLogging(log); return 0; } ``` @@ -40,11 +37,10 @@ int main() { #include "logging.h" int main() { - // Your code goes here - Logging *log = createLogging(); + Logging *log = newLogging(); Logger *logger = log->getLogger("testLogger",LOG_DEBUG); - logger->addHandler(consoleHandler("test")); //为日志对象添加文件处理器 + logger->addHandler(loggingFileHandler("test")); //为日志对象添加文件处理器 logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); @@ -52,7 +48,7 @@ int main() { logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - destroyLogging(log); + log->destroyLogging(log); return 0; } ``` @@ -67,12 +63,11 @@ int main() { 将拦截到的日志重定向到专属文件处理器中 ```c #include "logging.h" - +#include int main() { - Logging *log = createLogging(); - Logger *logger = log->getLogger("testLogger",LOG_DEBUG); - logger->addHandler(consoleHandler("test")); + Logging *log = newLogging(); + Logger *logger = log->getLogger("testLogger", LOG_DEBUG); logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); @@ -80,25 +75,29 @@ int main() { logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - char *test1[] = {"123", "你好"};//要拦截的字符串 - //添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中 - log_Interceptor * tint = substringInterceptor(test1,2,LOG_DEBUG,fileHandler("被拦截")); + char *test1[] = {"123", "你好"}; // 要拦截的字符串 + // 添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中 + log_Interceptor *tint = + loggingSubStringInterceptor(test1, 2, LOG_DEBUG, loggingFileHandler("被拦截")); + logger->addInterceptor(tint); + + printf("\n"); printf("Interceptor added\n"); + printf("\n"); logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); logger->fatal("This is an fatal message"); - logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - destroyLogging(log); + log->destroyLogging(log); return 0; } ``` -![](docs/img/![](2024-08-13-22-20-18.png).png) -![](docs/img/2024-08-13-22-21-37.png) +![](docs/img/2024-09-21-11-44-25.png) +![](docs/img/2024-09-21-11-44-06.png) # build diff --git a/conanfile.py b/conanfile.py index 52156f5..66ed435 100644 --- a/conanfile.py +++ b/conanfile.py @@ -8,7 +8,7 @@ import os class loggingRecipe(ConanFile): name = "logging" - version = "0.2.2" + version = "0.2.3" license = "MIT" author = "321640253@qq.com" url = "https://github.com/WangZhongDian/logging.git" diff --git a/docs/img/![](2024-08-13-22-20-18.png).png b/docs/img/![](2024-08-13-22-20-18.png).png deleted file mode 100644 index a981785..0000000 Binary files a/docs/img/![](2024-08-13-22-20-18.png).png and /dev/null differ diff --git a/docs/img/2024-08-13-22-21-37.png b/docs/img/2024-08-13-22-21-37.png deleted file mode 100644 index c8c816e..0000000 Binary files a/docs/img/2024-08-13-22-21-37.png and /dev/null differ diff --git a/docs/img/2024-09-21-11-44-06.png b/docs/img/2024-09-21-11-44-06.png new file mode 100644 index 0000000..f74ec5b Binary files /dev/null and b/docs/img/2024-09-21-11-44-06.png differ diff --git a/docs/img/2024-09-21-11-44-25.png b/docs/img/2024-09-21-11-44-25.png new file mode 100644 index 0000000..98e1912 Binary files /dev/null and b/docs/img/2024-09-21-11-44-25.png differ diff --git a/include/logging.h b/include/logging.h index 22d6b43..7f2d8c8 100644 --- a/include/logging.h +++ b/include/logging.h @@ -28,10 +28,10 @@ typedef struct Logger { typedef struct Logging { Logger *(*getLogger)(const char *name, log_level level); log_status (*setLevel)(Logger *logger, log_level level); + Logger *(*getCurrentLogger)(void); + log_status (*destroyLogging)(struct Logging *logging); } Logging; -Logging *createLogging(); // 创建日志类对象 -log_status destroyLogging(Logging *logging); // 销毁日志类对象 -Logger *getCurrentLogger(void); // 获取当前日志记录器 +Logging *newLogging(); // 创建日志类对象 #endif // __LOGGING_H__ \ No newline at end of file diff --git a/include/logging/logging-handler.h b/include/logging/logging-handler.h index 2be8f46..06c1dd7 100644 --- a/include/logging/logging-handler.h +++ b/include/logging/logging-handler.h @@ -11,7 +11,7 @@ typedef struct log_Handler { } log_Handler; -log_Handler* fileHandler(const char* name); -log_Handler* consoleHandler(); +log_Handler* loggingFileHandler(const char* name); +log_Handler* loggingConsoleHandler(); #endif //__LOGGING_HANDLER_H__ \ No newline at end of file diff --git a/include/logging/logging-interceptor.h b/include/logging/logging-interceptor.h index c9d8504..a8f2fd6 100644 --- a/include/logging/logging-interceptor.h +++ b/include/logging/logging-interceptor.h @@ -12,9 +12,9 @@ typedef struct log_Interceptor { } log_Interceptor; -log_Interceptor *substringInterceptor(char *keywords[], - int count, - log_level level, - log_Handler *handler); +log_Interceptor *loggingSubStringInterceptor(char *keywords[], + int count, + log_level level, + log_Handler *handler); #endif // __LOGGING_INTERCEPTOR_H__ \ No newline at end of file diff --git a/src/handler/logging-handler-console.c b/src/handler/logging-handler-console.c index 7435784..f8e9482 100644 --- a/src/handler/logging-handler-console.c +++ b/src/handler/logging-handler-console.c @@ -23,9 +23,8 @@ static void outputConsoleHandler(log_Handler *handler, const char *message) { /** * @brief :控制台日志处理器 - * @param */ -log_Handler *consoleHandler() { +log_Handler *loggingConsoleHandler() { log_Handler *handler = (log_Handler *)malloc(sizeof(log_Handler)); handler->stream = stdout; diff --git a/src/handler/logging-handler-file.c b/src/handler/logging-handler-file.c index c06b994..58b1d51 100644 --- a/src/handler/logging-handler-file.c +++ b/src/handler/logging-handler-file.c @@ -8,8 +8,6 @@ /** * @brief 文件日志处理器释放组件 - * @param - * @return */ static void __freeFileHandler(log_Handler *handler) { fclose(handler->stream); @@ -18,8 +16,8 @@ static void __freeFileHandler(log_Handler *handler) { /** * @brief 文件日志处理器输出组件 - * @param - * @return + * @param handler 文件日志处理器 + * @param message 消息 */ static void outputFileHandler(log_Handler *handler, const char *message) { fputs(message, handler->stream); @@ -27,10 +25,10 @@ static void outputFileHandler(log_Handler *handler, const char *message) { /** * @brief 文件日志处理器 - * @param - * @return + * @param name 文件名 + * @return log_Handler * */ -log_Handler *fileHandler(const char *name) { +log_Handler *loggingFileHandler(const char *name) { char new_file_name[100]; sprintf(new_file_name, "%s.log", name); diff --git a/src/interceptor/logging-interceptor-substr.c b/src/interceptor/logging-interceptor-substr.c index 8b0ca99..c7deb19 100644 --- a/src/interceptor/logging-interceptor-substr.c +++ b/src/interceptor/logging-interceptor-substr.c @@ -1,6 +1,6 @@ /******************************************** * @Date: 2024 08 12 - * @Description: 日志拦截器 + * @Description: 子串拦截器 *********************************************/ #include "logging/logging-interceptor.h" @@ -98,10 +98,10 @@ static void _freeSubstring(log_Interceptor *interceptor) { /** * @description : 子字符串拦截器 */ -log_Interceptor *substringInterceptor(char *keywords[], - int count, - log_level level, - log_Handler *handler) { +log_Interceptor *loggingSubStringInterceptor(char *keywords[], + int count, + log_level level, + log_Handler *handler) { log_Interceptor *interceptor = (log_Interceptor *)malloc(sizeof(log_Interceptor)); interceptor->_dispose = _disposeSubstring; diff --git a/src/logging.c b/src/logging.c index 92d2991..c343aa1 100644 --- a/src/logging.c +++ b/src/logging.c @@ -2,7 +2,6 @@ * @Date: 2024 08 12 * @Description: 日志模块 ********************************************/ - #include "logging.h" #include "logging/logging-handler.h" #include @@ -10,9 +9,8 @@ #include #include -Logger *G_LOGGER = NULL; - #define RED "\033[0;31m" +#define RED_B "\033[0;41m" #define GREEN "\033[0;32m" #define YELLOW "\033[0;33m" #define BLUE "\033[0;34m" @@ -24,6 +22,8 @@ Logger *G_LOGGER = NULL; #define LOG_BUFFER_SIZE 1024 +Logger *G_LOGGER = NULL; + static void getTimeStr(char *timeStr) { time_t t = time(NULL); struct tm *p = localtime(&t); @@ -96,10 +96,17 @@ _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); + sprintf(logStr, + "%s: %s %s%s%s %s\n", + G_LOGGER->name, + timeStr, + color, + level, + RESET, + message); else - sprintf(logStr, "%s %s %s\n", timeStr, level, message); + sprintf( + logStr, "%s: %s %s %s\n", G_LOGGER->name, timeStr, level, message); handler->output(handler, logStr); } @@ -112,7 +119,7 @@ static void fatal(const char *message, ...) { va_start(args, message); vsprintf(logStr, message, args); va_end(args); - _builtin_log("Fatal", RED, logStr, args); + _builtin_log("Fatal", RED_B, logStr, args); } } @@ -168,10 +175,13 @@ static void debug(const char *message, ...) { */ static Logger *getLogger(const char *name, log_level level) { if (G_LOGGER != NULL) { + G_LOGGER->name = name; + G_LOGGER->level = level; return G_LOGGER; } - + Logger *logger = (Logger *)malloc(sizeof(Logger)); + // 方法 logger->fatal = fatal; logger->error = error; logger->warning = warning; @@ -181,8 +191,9 @@ static Logger *getLogger(const char *name, log_level level) { logger->addHandler = addHandler; logger->addInterceptor = addInterceptor; + // 属性 logger->level = level; - logger->handler = consoleHandler(name); + logger->handler = loggingConsoleHandler(); logger->name = name; logger->interceptor = NULL; @@ -190,16 +201,6 @@ static Logger *getLogger(const char *name, log_level level) { return G_LOGGER; } -/** - * @description :创建一个日志对象 - * @return :Logging* 返回一个日志对象 - */ -Logging *createLogging() { - Logging *logging = (Logging *)malloc(sizeof(Logging)); - logging->getLogger = getLogger; - return logging; -} - /** * @description :销毁日志对象 */ @@ -233,3 +234,15 @@ Logger *getCurrentLogger(void) { } return G_LOGGER; } + +/** + * @description :创建一个日志对象 + * @return :Logging* 返回一个日志对象 + */ +Logging *newLogging() { + Logging *logging = (Logging *)malloc(sizeof(Logging)); + logging->getLogger = getLogger; + logging->destroyLogging = destroyLogging; + logging->getCurrentLogger = getCurrentLogger; + return logging; +} \ No newline at end of file diff --git a/tests/test_interceptor.c b/tests/test_interceptor.c index 67a1b0d..8ba1541 100644 --- a/tests/test_interceptor.c +++ b/tests/test_interceptor.c @@ -2,7 +2,7 @@ #include int main() { - Logging *log = createLogging(); + Logging *log = newLogging(); Logger *logger = log->getLogger("testLogger", LOG_DEBUG); logger->info("This is an info message"); @@ -14,9 +14,13 @@ int main() { char *test1[] = {"123", "你好"}; // 要拦截的字符串 // 添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中 log_Interceptor *tint = - substringInterceptor(test1, 2, LOG_DEBUG, fileHandler("被拦截")); + loggingSubStringInterceptor(test1, 2, LOG_DEBUG, loggingFileHandler("被拦截")); + logger->addInterceptor(tint); + + printf("\n"); printf("Interceptor added\n"); + printf("\n"); logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); @@ -24,6 +28,6 @@ int main() { logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - destroyLogging(log); + log->destroyLogging(log); return 0; } \ No newline at end of file diff --git a/tests/test_simple.c b/tests/test_simple.c index 0646b12..71628ba 100644 --- a/tests/test_simple.c +++ b/tests/test_simple.c @@ -1,17 +1,15 @@ #include "logging.h" - int main() { - Logging *log = createLogging(); - Logger *logger = log->getLogger("testLogger",LOG_DEBUG); - + Logging *log = newLogging(); + Logger *logger = log->getLogger("testLogger", LOG_DEBUG); + logger->info("This is an info message"); logger->error("你好,这是一个错误消息%s", "123"); logger->fatal("This is an fatal message"); logger->debug("This is a debug message"); logger->warning("This is a warning message%s", "123"); - - destroyLogging(log); + log->destroyLogging(log); return 0; } \ No newline at end of file