* #feat 增强Fatal级别的底色,修改logging类的方法

* 更新版本号
This commit is contained in:
youmetme
2024-09-21 15:21:53 +08:00
committed by GitHub
parent 6765dd1214
commit 86cf4c4526
15 changed files with 84 additions and 73 deletions

View File

@@ -18,11 +18,8 @@ logging是一个轻量级的简单易用C语言日志库支持日志级别、
#include "logging.h" #include "logging.h"
int main() { int main() {
Logging *log = createLogging(); // 创建日志对象 Logging *log = newLogging();
Logger *logger = log->getLogger("testLogger", LOG_DEBUG);
Logger *logger = log->getLogger("testLogger",LOG_DEBUG); //获取日志控制器
logger->addHandler(consoleHandler("test")); //为日志对象添加控制台处理器
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
@@ -30,7 +27,7 @@ int main() {
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
destroyLogging(log); log->destroyLogging(log);
return 0; return 0;
} }
``` ```
@@ -40,11 +37,10 @@ int main() {
#include "logging.h" #include "logging.h"
int main() { int main() {
// Your code goes here Logging *log = newLogging();
Logging *log = createLogging();
Logger *logger = log->getLogger("testLogger",LOG_DEBUG); Logger *logger = log->getLogger("testLogger",LOG_DEBUG);
logger->addHandler(consoleHandler("test")); //为日志对象添加文件处理器 logger->addHandler(loggingFileHandler("test")); //为日志对象添加文件处理器
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
@@ -52,7 +48,7 @@ int main() {
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
destroyLogging(log); log->destroyLogging(log);
return 0; return 0;
} }
``` ```
@@ -67,12 +63,11 @@ int main() {
将拦截到的日志重定向到专属文件处理器中 将拦截到的日志重定向到专属文件处理器中
```c ```c
#include "logging.h" #include "logging.h"
#include <stdio.h>
int main() { int main() {
Logging *log = createLogging(); Logging *log = newLogging();
Logger *logger = log->getLogger("testLogger",LOG_DEBUG); Logger *logger = log->getLogger("testLogger", LOG_DEBUG);
logger->addHandler(consoleHandler("test"));
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
@@ -80,25 +75,29 @@ int main() {
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
char *test1[] = {"123", "你好"};//要拦截的字符串 char *test1[] = {"123", "你好"}; // 要拦截的字符串
//添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中 // 添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中
log_Interceptor * tint = substringInterceptor(test1,2,LOG_DEBUG,fileHandler("被拦截")); log_Interceptor *tint =
loggingSubStringInterceptor(test1, 2, LOG_DEBUG, loggingFileHandler("被拦截"));
logger->addInterceptor(tint); logger->addInterceptor(tint);
printf("\n");
printf("Interceptor added\n"); printf("Interceptor added\n");
printf("\n");
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
logger->fatal("This is an fatal message"); logger->fatal("This is an fatal message");
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
destroyLogging(log); log->destroyLogging(log);
return 0; return 0;
} }
``` ```
![](docs/img/![](2024-08-13-22-20-18.png).png) ![](docs/img/2024-09-21-11-44-25.png)
![](docs/img/2024-08-13-22-21-37.png) ![](docs/img/2024-09-21-11-44-06.png)
# build # build

View File

@@ -8,7 +8,7 @@ import os
class loggingRecipe(ConanFile): class loggingRecipe(ConanFile):
name = "logging" name = "logging"
version = "0.2.2" version = "0.2.3"
license = "MIT" license = "MIT"
author = "321640253@qq.com" author = "321640253@qq.com"
url = "https://github.com/WangZhongDian/logging.git" url = "https://github.com/WangZhongDian/logging.git"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -28,10 +28,10 @@ typedef struct Logger {
typedef struct Logging { typedef struct Logging {
Logger *(*getLogger)(const char *name, log_level level); Logger *(*getLogger)(const char *name, log_level level);
log_status (*setLevel)(Logger *logger, log_level level); log_status (*setLevel)(Logger *logger, log_level level);
Logger *(*getCurrentLogger)(void);
log_status (*destroyLogging)(struct Logging *logging);
} Logging; } Logging;
Logging *createLogging(); // 创建日志类对象 Logging *newLogging(); // 创建日志类对象
log_status destroyLogging(Logging *logging); // 销毁日志类对象
Logger *getCurrentLogger(void); // 获取当前日志记录器
#endif // __LOGGING_H__ #endif // __LOGGING_H__

View File

@@ -11,7 +11,7 @@ typedef struct log_Handler {
} log_Handler; } log_Handler;
log_Handler* fileHandler(const char* name); log_Handler* loggingFileHandler(const char* name);
log_Handler* consoleHandler(); log_Handler* loggingConsoleHandler();
#endif //__LOGGING_HANDLER_H__ #endif //__LOGGING_HANDLER_H__

View File

@@ -12,9 +12,9 @@ typedef struct log_Interceptor {
} log_Interceptor; } log_Interceptor;
log_Interceptor *substringInterceptor(char *keywords[], log_Interceptor *loggingSubStringInterceptor(char *keywords[],
int count, int count,
log_level level, log_level level,
log_Handler *handler); log_Handler *handler);
#endif // __LOGGING_INTERCEPTOR_H__ #endif // __LOGGING_INTERCEPTOR_H__

View File

@@ -23,9 +23,8 @@ static void outputConsoleHandler(log_Handler *handler, const char *message) {
/** /**
* @brief :控制台日志处理器 * @brief :控制台日志处理器
* @param
*/ */
log_Handler *consoleHandler() { log_Handler *loggingConsoleHandler() {
log_Handler *handler = (log_Handler *)malloc(sizeof(log_Handler)); log_Handler *handler = (log_Handler *)malloc(sizeof(log_Handler));
handler->stream = stdout; handler->stream = stdout;

View File

@@ -8,8 +8,6 @@
/** /**
* @brief 文件日志处理器释放组件 * @brief 文件日志处理器释放组件
* @param
* @return
*/ */
static void __freeFileHandler(log_Handler *handler) { static void __freeFileHandler(log_Handler *handler) {
fclose(handler->stream); fclose(handler->stream);
@@ -18,8 +16,8 @@ static void __freeFileHandler(log_Handler *handler) {
/** /**
* @brief 文件日志处理器输出组件 * @brief 文件日志处理器输出组件
* @param * @param handler 文件日志处理器
* @return * @param message 消息
*/ */
static void outputFileHandler(log_Handler *handler, const char *message) { static void outputFileHandler(log_Handler *handler, const char *message) {
fputs(message, handler->stream); fputs(message, handler->stream);
@@ -27,10 +25,10 @@ static void outputFileHandler(log_Handler *handler, const char *message) {
/** /**
* @brief 文件日志处理器 * @brief 文件日志处理器
* @param * @param name 文件名
* @return * @return log_Handler *
*/ */
log_Handler *fileHandler(const char *name) { log_Handler *loggingFileHandler(const char *name) {
char new_file_name[100]; char new_file_name[100];
sprintf(new_file_name, "%s.log", name); sprintf(new_file_name, "%s.log", name);

View File

@@ -1,6 +1,6 @@
/******************************************** /********************************************
* @Date: 2024 08 12 * @Date: 2024 08 12
* @Description: 日志拦截器 * @Description: 子串拦截器
*********************************************/ *********************************************/
#include "logging/logging-interceptor.h" #include "logging/logging-interceptor.h"
@@ -98,10 +98,10 @@ static void _freeSubstring(log_Interceptor *interceptor) {
/** /**
* @description : 子字符串拦截器 * @description : 子字符串拦截器
*/ */
log_Interceptor *substringInterceptor(char *keywords[], log_Interceptor *loggingSubStringInterceptor(char *keywords[],
int count, int count,
log_level level, log_level level,
log_Handler *handler) { log_Handler *handler) {
log_Interceptor *interceptor = log_Interceptor *interceptor =
(log_Interceptor *)malloc(sizeof(log_Interceptor)); (log_Interceptor *)malloc(sizeof(log_Interceptor));
interceptor->_dispose = _disposeSubstring; interceptor->_dispose = _disposeSubstring;

View File

@@ -2,7 +2,6 @@
* @Date: 2024 08 12 * @Date: 2024 08 12
* @Description: 日志模块 * @Description: 日志模块
********************************************/ ********************************************/
#include "logging.h" #include "logging.h"
#include "logging/logging-handler.h" #include "logging/logging-handler.h"
#include <stdio.h> #include <stdio.h>
@@ -10,9 +9,8 @@
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
Logger *G_LOGGER = NULL;
#define RED "\033[0;31m" #define RED "\033[0;31m"
#define RED_B "\033[0;41m"
#define GREEN "\033[0;32m" #define GREEN "\033[0;32m"
#define YELLOW "\033[0;33m" #define YELLOW "\033[0;33m"
#define BLUE "\033[0;34m" #define BLUE "\033[0;34m"
@@ -24,6 +22,8 @@ Logger *G_LOGGER = NULL;
#define LOG_BUFFER_SIZE 1024 #define LOG_BUFFER_SIZE 1024
Logger *G_LOGGER = NULL;
static void getTimeStr(char *timeStr) { static void getTimeStr(char *timeStr) {
time_t t = time(NULL); time_t t = time(NULL);
struct tm *p = localtime(&t); struct tm *p = localtime(&t);
@@ -96,10 +96,17 @@ _builtin_log(char *level, const char *color, const char *message, ...) {
// 判断处理器是否应用颜色 // 判断处理器是否应用颜色
if (handler->apply_color) if (handler->apply_color)
sprintf( sprintf(logStr,
logStr, "%s %s%s%s %s\n", timeStr, color, level, RESET, message); "%s: %s %s%s%s %s\n",
G_LOGGER->name,
timeStr,
color,
level,
RESET,
message);
else 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); handler->output(handler, logStr);
} }
@@ -112,7 +119,7 @@ static void fatal(const char *message, ...) {
va_start(args, message); va_start(args, message);
vsprintf(logStr, message, args); vsprintf(logStr, message, args);
va_end(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) { static Logger *getLogger(const char *name, log_level level) {
if (G_LOGGER != NULL) { if (G_LOGGER != NULL) {
G_LOGGER->name = name;
G_LOGGER->level = level;
return G_LOGGER; return G_LOGGER;
} }
Logger *logger = (Logger *)malloc(sizeof(Logger)); Logger *logger = (Logger *)malloc(sizeof(Logger));
// 方法
logger->fatal = fatal; logger->fatal = fatal;
logger->error = error; logger->error = error;
logger->warning = warning; logger->warning = warning;
@@ -181,8 +191,9 @@ static Logger *getLogger(const char *name, log_level level) {
logger->addHandler = addHandler; logger->addHandler = addHandler;
logger->addInterceptor = addInterceptor; logger->addInterceptor = addInterceptor;
// 属性
logger->level = level; logger->level = level;
logger->handler = consoleHandler(name); logger->handler = loggingConsoleHandler();
logger->name = name; logger->name = name;
logger->interceptor = NULL; logger->interceptor = NULL;
@@ -190,16 +201,6 @@ static Logger *getLogger(const char *name, log_level level) {
return G_LOGGER; return G_LOGGER;
} }
/**
* @description :创建一个日志对象
* @return :Logging* 返回一个日志对象
*/
Logging *createLogging() {
Logging *logging = (Logging *)malloc(sizeof(Logging));
logging->getLogger = getLogger;
return logging;
}
/** /**
* @description :销毁日志对象 * @description :销毁日志对象
*/ */
@@ -233,3 +234,15 @@ Logger *getCurrentLogger(void) {
} }
return G_LOGGER; 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;
}

View File

@@ -2,7 +2,7 @@
#include <stdio.h> #include <stdio.h>
int main() { int main() {
Logging *log = createLogging(); Logging *log = newLogging();
Logger *logger = log->getLogger("testLogger", LOG_DEBUG); Logger *logger = log->getLogger("testLogger", LOG_DEBUG);
logger->info("This is an info message"); logger->info("This is an info message");
@@ -14,9 +14,13 @@ int main() {
char *test1[] = {"123", "你好"}; // 要拦截的字符串 char *test1[] = {"123", "你好"}; // 要拦截的字符串
// 添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中 // 添加拦截器,将拦截到的日志重定向到拦截器的专属处理器中
log_Interceptor *tint = log_Interceptor *tint =
substringInterceptor(test1, 2, LOG_DEBUG, fileHandler("被拦截")); loggingSubStringInterceptor(test1, 2, LOG_DEBUG, loggingFileHandler("被拦截"));
logger->addInterceptor(tint); logger->addInterceptor(tint);
printf("\n");
printf("Interceptor added\n"); printf("Interceptor added\n");
printf("\n");
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
@@ -24,6 +28,6 @@ int main() {
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
destroyLogging(log); log->destroyLogging(log);
return 0; return 0;
} }

View File

@@ -1,17 +1,15 @@
#include "logging.h" #include "logging.h"
int main() { int main() {
Logging *log = createLogging(); Logging *log = newLogging();
Logger *logger = log->getLogger("testLogger",LOG_DEBUG); Logger *logger = log->getLogger("testLogger", LOG_DEBUG);
logger->info("This is an info message"); logger->info("This is an info message");
logger->error("你好,这是一个错误消息%s", "123"); logger->error("你好,这是一个错误消息%s", "123");
logger->fatal("This is an fatal message"); logger->fatal("This is an fatal message");
logger->debug("This is a debug message"); logger->debug("This is a debug message");
logger->warning("This is a warning message%s", "123"); logger->warning("This is a warning message%s", "123");
destroyLogging(log); log->destroyLogging(log);
return 0; return 0;
} }