28
README.en.md
28
README.en.md
@@ -48,7 +48,7 @@ int main() {
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Logger *logger = newDefaultLogger("testLogger", LOG_DEBUG);
|
Logger *logger = newDefaultLogger("testLogger", LOG_DEBUG);
|
||||||
logger->addHandler(loggingFileHandler("test1", 1024*1024));
|
logger->addHandler(loggingHandlerFile("test1", 1024*1024));
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
log_error("This is an error message%s", "123");
|
log_error("This is an error message%s", "123");
|
||||||
@@ -61,9 +61,9 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Logging Interceptor
|
### Logging filter
|
||||||
> Support adding custom interceptors, currently with built-in substring interceptors
|
> Support adding custom interceptors, currently with built-in substring interceptors
|
||||||
> The function of an interceptor is to redirect intercepted logs to the interceptor's dedicated processor
|
> The function of an filter is to redirect intercepted logs to the filter's dedicated processor
|
||||||
|
|
||||||
|
|
||||||
#### example
|
#### example
|
||||||
@@ -83,16 +83,16 @@ int main() {
|
|||||||
|
|
||||||
char *test1[] = {"123", "tt", NULL};
|
char *test1[] = {"123", "tt", NULL};
|
||||||
|
|
||||||
log_Interceptor *tint = loggingSubStringInterceptor(
|
log_filter *tint = loggingFilterSubStr(
|
||||||
test1,
|
test1,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor", 1024 * 1024),
|
loggingHandlerFile("test_interceptor", 1024 * 1024),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
logger->addInterceptor(tint);
|
logger->addFilter(tint);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Interceptor added\n");
|
printf("filter added\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
@@ -124,26 +124,26 @@ int main() {
|
|||||||
|
|
||||||
char *test1[] = {"This",NULL};
|
char *test1[] = {"This",NULL};
|
||||||
|
|
||||||
log_Interceptor *tint = loggingSubStringInterceptor(
|
log_filter *tint = loggingFilterSubStr(
|
||||||
test1,
|
test1,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor", 1024 * 1024),
|
loggingHandlerFile("test_interceptor", 1024 * 1024),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
logger->addInterceptor(tint);
|
logger->addFilter(tint);
|
||||||
|
|
||||||
char *test2[] = {"123",NULL};
|
char *test2[] = {"123",NULL};
|
||||||
|
|
||||||
log_Interceptor *tint1 = loggingSubStringInterceptor(
|
log_filter *tint1 = loggingFilterSubStr(
|
||||||
test2,
|
test2,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor1", 1024 * 1024),
|
loggingHandlerFile("test_interceptor1", 1024 * 1024),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
logger->addInterceptor(tint1);
|
logger->addFilter(tint1);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Interceptor added\n");
|
printf("filter added\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -51,7 +51,7 @@ int main() {
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Logger *logger = newDefaultLogger("testLogger", LOG_DEBUG);
|
Logger *logger = newDefaultLogger("testLogger", LOG_DEBUG);
|
||||||
logger->addHandler(loggingFileHandler("test1", 1024*1024));
|
logger->addHandler(loggingHandlerFile("test1", 1024*1024));
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
log_error("This is an error message%s", "123");
|
log_error("This is an error message%s", "123");
|
||||||
@@ -87,16 +87,16 @@ int main() {
|
|||||||
|
|
||||||
char *test1[] = {"123", "tt", NULL};
|
char *test1[] = {"123", "tt", NULL};
|
||||||
|
|
||||||
log_Interceptor *tint = loggingSubStringInterceptor(
|
log_filter *tint = loggingFilterSubStr(
|
||||||
test1,
|
test1,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor", 1024 * 1024),
|
loggingHandlerFile("test_interceptor", 1024 * 1024),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
logger->addInterceptor(tint);
|
logger->addFilter(tint);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Interceptor added\n");
|
printf("filter added\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
@@ -128,26 +128,26 @@ int main() {
|
|||||||
|
|
||||||
char *test1[] = {"This",NULL};
|
char *test1[] = {"This",NULL};
|
||||||
|
|
||||||
log_Interceptor *tint = loggingSubStringInterceptor(
|
log_filter *tint = loggingFilterSubStr(
|
||||||
test1,
|
test1,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor", 1024 * 1024),
|
loggingHandlerFile("test_interceptor", 1024 * 1024),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
logger->addInterceptor(tint);
|
logger->addFilter(tint);
|
||||||
|
|
||||||
char *test2[] = {"123",NULL};
|
char *test2[] = {"123",NULL};
|
||||||
|
|
||||||
log_Interceptor *tint1 = loggingSubStringInterceptor(
|
log_filter *tint1 = loggingFilterSubStr(
|
||||||
test2,
|
test2,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor1", 1024 * 1024),
|
loggingHandlerFile("test_interceptor1", 1024 * 1024),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
logger->addInterceptor(tint1);
|
logger->addFilter(tint1);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Interceptor added\n");
|
printf("filter added\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import os
|
|||||||
|
|
||||||
class loggingRecipe(ConanFile):
|
class loggingRecipe(ConanFile):
|
||||||
name = "logging"
|
name = "logging"
|
||||||
version = "0.4.1"
|
version = "0.5.0"
|
||||||
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"
|
||||||
|
|||||||
@@ -5,20 +5,20 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "logging/logging-core.h"
|
#include "logging/logging-core.h"
|
||||||
|
#include "logging/logging-filter.h"
|
||||||
#include "logging/logging-handler.h"
|
#include "logging/logging-handler.h"
|
||||||
#include "logging/logging-interceptor.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct Logger {
|
typedef struct Logger {
|
||||||
log_level level;
|
log_level level;
|
||||||
log_Handler *handler;
|
log_Handler *handler;
|
||||||
log_Interceptor *interceptor;
|
log_filter *filter;
|
||||||
const char *name;
|
const char *name;
|
||||||
bool (*addHandler)(log_Handler *handler);
|
bool (*addHandler)(log_Handler *handler);
|
||||||
bool (*addInterceptor)(log_Interceptor *Interceptor);
|
bool (*addFilter)(log_filter *filter);
|
||||||
} Logger;
|
} Logger;
|
||||||
|
|
||||||
void log_fatal(const char *format, ...);
|
void log_fatal(const char *format, ...);
|
||||||
|
|||||||
41
include/logging/logging-filter.h
Normal file
41
include/logging/logging-filter.h
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#ifndef __LOGGING_INTERCEPTOR_H__
|
||||||
|
#define __LOGGING_INTERCEPTOR_H__
|
||||||
|
|
||||||
|
#include "logging-core.h"
|
||||||
|
#include "logging-handler.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct log_filter {
|
||||||
|
log_level level;
|
||||||
|
log_Handler *handler;
|
||||||
|
bool jump_out;
|
||||||
|
bool (*_dispose)(struct log_filter *filter,
|
||||||
|
log_level level,
|
||||||
|
const char *message,
|
||||||
|
...);
|
||||||
|
void (*_free)(struct log_filter *filter);
|
||||||
|
struct log_filter *next;
|
||||||
|
} log_filter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 子字符串过滤器
|
||||||
|
* @param keywords: 关键字数组
|
||||||
|
* @param count: 关键字数组长度
|
||||||
|
* @param level: 过滤截日志等级
|
||||||
|
* @param handler: 日志处理器,用于处理过滤下来的日志
|
||||||
|
* @return log_filter *
|
||||||
|
*/
|
||||||
|
log_filter *loggingFilterSubStr(char *keywords[],
|
||||||
|
log_level level,
|
||||||
|
log_Handler *handler,
|
||||||
|
bool jump_out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // __LOGGING_INTERCEPTOR_H__
|
||||||
@@ -14,8 +14,20 @@ typedef struct log_Handler {
|
|||||||
void (*output)(struct log_Handler *handler, const char *message);
|
void (*output)(struct log_Handler *handler, const char *message);
|
||||||
} log_Handler;
|
} log_Handler;
|
||||||
|
|
||||||
log_Handler *loggingFileHandler(const char *name, unsigned int max_size);
|
/**
|
||||||
log_Handler *loggingConsoleHandler();
|
* @brief 文件处理器
|
||||||
|
* @param name 文件名
|
||||||
|
* @param max_size 文件最大大小
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
log_Handler *loggingHandlerFile(const char *name, unsigned int max_size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 控制台处理器
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
log_Handler *loggingHandlerConsole();
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
#ifndef __LOGGING_INTERCEPTOR_H__
|
|
||||||
#define __LOGGING_INTERCEPTOR_H__
|
|
||||||
|
|
||||||
#include "logging-core.h"
|
|
||||||
#include "logging-handler.h"
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct log_Interceptor {
|
|
||||||
log_level level;
|
|
||||||
log_Handler *handler;
|
|
||||||
bool jump_out;
|
|
||||||
bool (*_dispose)(struct log_Interceptor *Interceptor,
|
|
||||||
log_level level,
|
|
||||||
const char *message,
|
|
||||||
...);
|
|
||||||
void (*_free)(struct log_Interceptor *Interceptor);
|
|
||||||
struct log_Interceptor *next;
|
|
||||||
} log_Interceptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief 子字符串拦截器
|
|
||||||
* @param keywords: 关键字数组
|
|
||||||
* @param count: 关键字数组长度
|
|
||||||
* @param level: 最低拦截日志等级
|
|
||||||
* @param handler: 日志处理器,用于处理拦截下来的日志
|
|
||||||
* @return log_Interceptor *
|
|
||||||
*/
|
|
||||||
log_Interceptor *loggingSubStringInterceptor(char *keywords[],
|
|
||||||
log_level level,
|
|
||||||
log_Handler *handler,
|
|
||||||
bool jump_out);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __LOGGING_INTERCEPTOR_H__
|
|
||||||
@@ -2,7 +2,7 @@ project(logging)
|
|||||||
|
|
||||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
|
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
|
||||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/handler SRC)
|
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/handler SRC)
|
||||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/interceptor SRC)
|
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/filter SRC)
|
||||||
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/utils SRC)
|
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/utils SRC)
|
||||||
|
|
||||||
if (SHARED)
|
if (SHARED)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "logging/logging-interceptor.h"
|
#include "logging/logging-filter.h"
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -55,20 +55,20 @@ static bool kmp_search(char *substr, char *master) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _disposeSubstring(log_Interceptor *interceptor,
|
static bool _disposeSubstring(log_filter *filter,
|
||||||
log_level level,
|
log_level level,
|
||||||
const char *message,
|
const char *message,
|
||||||
...) {
|
...) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
keywords_t *keyword = (keywords_t *)(interceptor + 1);
|
keywords_t *keyword = (keywords_t *)(filter + 1);
|
||||||
|
|
||||||
if (keyword->key == NULL && keyword->next == NULL) {
|
if (keyword->key == NULL && keyword->next == NULL) {
|
||||||
if (level <= interceptor->level)
|
if (level <= filter->level)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (keyword != NULL && level <= interceptor->level) {
|
while (keyword != NULL && level <= filter->level) {
|
||||||
if (kmp_search(keyword->key, (char *)message))
|
if (kmp_search(keyword->key, (char *)message))
|
||||||
return true;
|
return true;
|
||||||
keyword = keyword->next;
|
keyword = keyword->next;
|
||||||
@@ -77,9 +77,9 @@ static bool _disposeSubstring(log_Interceptor *interceptor,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _freeSubstring(log_Interceptor *interceptor) {
|
static void _freeFilter(log_filter *filter) {
|
||||||
keywords_t *it_keyword =
|
keywords_t *it_keyword =
|
||||||
(keywords_t *)(interceptor + 1); // it_keyword 不是起始地址,请勿free
|
(keywords_t *)(filter + 1); // it_keyword 不是起始地址,请勿free
|
||||||
keywords_t *keyword = it_keyword->next;
|
keywords_t *keyword = it_keyword->next;
|
||||||
keywords_t *next = NULL;
|
keywords_t *next = NULL;
|
||||||
|
|
||||||
@@ -90,30 +90,31 @@ static void _freeSubstring(log_Interceptor *interceptor) {
|
|||||||
keyword = next;
|
keyword = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interceptor->handler != NULL) {
|
if (filter->handler != NULL) {
|
||||||
interceptor->handler->_free(interceptor->handler);
|
filter->handler->_free(filter->handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (it_keyword->key != NULL)
|
if (it_keyword->key != NULL)
|
||||||
free(it_keyword->key);
|
free(it_keyword->key);
|
||||||
free(interceptor);
|
free(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_Interceptor *loggingSubStringInterceptor(char *keywords[],
|
log_filter *loggingFilterSubStr(char *keywords[],
|
||||||
log_level level,
|
log_level level,
|
||||||
log_Handler *handler,
|
log_Handler *handler,
|
||||||
bool jump_out) {
|
bool jump_out) {
|
||||||
log_Interceptor *interceptor =
|
// 分配log_filter和keywords_t的连续内存
|
||||||
(log_Interceptor *)malloc(sizeof(log_Interceptor) + sizeof(keywords_t));
|
log_filter *filter =
|
||||||
interceptor->_dispose = _disposeSubstring;
|
(log_filter *)malloc(sizeof(log_filter) + sizeof(keywords_t));
|
||||||
interceptor->handler = handler;
|
filter->_dispose = _disposeSubstring;
|
||||||
interceptor->level = level;
|
filter->handler = handler;
|
||||||
interceptor->jump_out = jump_out;
|
filter->level = level;
|
||||||
interceptor->_free = _freeSubstring;
|
filter->jump_out = jump_out;
|
||||||
|
filter->_free = _freeFilter;
|
||||||
|
|
||||||
keywords_t *keyword = (keywords_t *)(interceptor + 1);
|
keywords_t *keyword = (keywords_t *)(filter + 1);
|
||||||
keyword->key = NULL;
|
keyword->key = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
if (keywords[count] != NULL) {
|
if (keywords[count] != NULL) {
|
||||||
keyword->key = strdup(keywords[count]);
|
keyword->key = strdup(keywords[count]);
|
||||||
count++;
|
count++;
|
||||||
@@ -128,5 +129,5 @@ log_Interceptor *loggingSubStringInterceptor(char *keywords[],
|
|||||||
}
|
}
|
||||||
keyword->next = NULL;
|
keyword->next = NULL;
|
||||||
|
|
||||||
return interceptor;
|
return filter;
|
||||||
}
|
}
|
||||||
@@ -2,19 +2,19 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static void __freeConsoleHandler(log_Handler *handler) { free(handler); }
|
static void __freeHandlerConsole(log_Handler *handler) { free(handler); }
|
||||||
|
|
||||||
static void outputConsoleHandler(log_Handler *handler, const char *message) {
|
static void __outputHandlerConsole(log_Handler *handler, const char *message) {
|
||||||
fputs(message, handler->stream);
|
fputs(message, handler->stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_Handler *loggingConsoleHandler() {
|
log_Handler *loggingHandlerConsole() {
|
||||||
log_Handler *handler = (log_Handler *)malloc(sizeof(log_Handler));
|
log_Handler *handler = (log_Handler *)malloc(sizeof(log_Handler));
|
||||||
|
|
||||||
handler->stream = stdout;
|
handler->stream = stdout;
|
||||||
handler->apply_color = true;
|
handler->apply_color = true;
|
||||||
handler->_free = __freeConsoleHandler;
|
handler->_free = __freeHandlerConsole;
|
||||||
handler->output = outputConsoleHandler;
|
handler->output = __outputHandlerConsole;
|
||||||
|
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ static void outputFileHandler(log_Handler *handler, const char *message) {
|
|||||||
changeFile(handler);
|
changeFile(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_Handler *loggingFileHandler(const char *name, unsigned int max_size) {
|
log_Handler *loggingHandlerFile(const char *name, unsigned int max_size) {
|
||||||
char new_file_name[FILE_NAME_MAX_SIZE];
|
char new_file_name[FILE_NAME_MAX_SIZE];
|
||||||
int suffix = 0;
|
int suffix = 0;
|
||||||
unsigned int file_size;
|
unsigned int file_size;
|
||||||
|
|||||||
@@ -38,23 +38,23 @@ static bool addHandler(log_Handler *handler) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool addInterceptor(log_Interceptor *Interceptor) {
|
static bool addFilter(log_filter *filter) {
|
||||||
if (G_LOGGER == NULL || Interceptor == NULL) {
|
if (G_LOGGER == NULL || filter == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (G_LOGGER->interceptor == NULL) {
|
if (G_LOGGER->filter == NULL) {
|
||||||
G_LOGGER->interceptor = Interceptor;
|
G_LOGGER->filter = filter;
|
||||||
G_LOGGER->interceptor->next = NULL;
|
G_LOGGER->filter->next = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_Interceptor *it = G_LOGGER->interceptor;
|
log_filter *it = G_LOGGER->filter;
|
||||||
while (it->next != NULL) {
|
while (it->next != NULL) {
|
||||||
it = it->next;
|
it = it->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
it->next = Interceptor;
|
it->next = filter;
|
||||||
Interceptor->next = NULL;
|
filter->next = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,8 +104,8 @@ static void _builtin_cope(log_level level_e,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_Interceptor *it = G_LOGGER->interceptor;
|
log_filter *it = G_LOGGER->filter;
|
||||||
log_Handler *handler = G_LOGGER->handler;
|
log_Handler *handler = G_LOGGER->handler;
|
||||||
|
|
||||||
while (it != NULL) {
|
while (it != NULL) {
|
||||||
if (it->_dispose(it, level_e, message)) {
|
if (it->_dispose(it, level_e, message)) {
|
||||||
@@ -180,17 +180,17 @@ Logger *newDefaultLogger(const char *name, log_level level) {
|
|||||||
return G_LOGGER;
|
return G_LOGGER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger *logger = (Logger *)malloc(sizeof(Logger));
|
Logger *logger = (Logger *)malloc(sizeof(Logger));
|
||||||
|
|
||||||
logger->addHandler = addHandler;
|
logger->addHandler = addHandler;
|
||||||
logger->addInterceptor = addInterceptor;
|
logger->addFilter = addFilter;
|
||||||
|
|
||||||
logger->level = level;
|
logger->level = level;
|
||||||
logger->handler = loggingConsoleHandler();
|
logger->handler = loggingHandlerConsole();
|
||||||
logger->name = name;
|
logger->name = name;
|
||||||
logger->interceptor = NULL;
|
logger->filter = NULL;
|
||||||
|
|
||||||
G_LOGGER = logger;
|
G_LOGGER = logger;
|
||||||
return G_LOGGER;
|
return G_LOGGER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,9 +203,9 @@ log_status destroyDefaultLogger(void) {
|
|||||||
G_LOGGER->handler->_free(G_LOGGER->handler);
|
G_LOGGER->handler->_free(G_LOGGER->handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_LOGGER->interceptor != NULL) {
|
if (G_LOGGER->filter != NULL) {
|
||||||
log_Interceptor *it = G_LOGGER->interceptor;
|
log_filter *it = G_LOGGER->filter;
|
||||||
log_Interceptor *next = NULL;
|
log_filter *next = NULL;
|
||||||
while (it != NULL) {
|
while (it != NULL) {
|
||||||
next = it->next;
|
next = it->next;
|
||||||
it->_free(it);
|
it->_free(it);
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#include "logging-utils.h"
|
#include "logging-utils.h"
|
||||||
#include <time.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 获取当前时间字符串
|
* @brief 获取当前时间字符串
|
||||||
* @param timeStr 存储时间字符串缓冲区指针
|
* @param timeStr 存储时间字符串缓冲区指针
|
||||||
*/
|
*/
|
||||||
void getTimeStr(char *timeStr) {
|
void getTimeStr(char *timeStr) {
|
||||||
time_t t = time(NULL);
|
time_t t = time(NULL);
|
||||||
struct tm *p = localtime(&t);
|
struct tm *p = localtime(&t);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ project(test)
|
|||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
#测试简单基本应用
|
#测试简单基本应用
|
||||||
add_executable(${PROJECT_NAME}simple test_simple.c)
|
add_executable(${PROJECT_NAME}simple test-simple.c)
|
||||||
target_link_libraries(${PROJECT_NAME}simple logging)
|
target_link_libraries(${PROJECT_NAME}simple logging)
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
add_test(test_simple ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}simple)
|
add_test(test_simple ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}simple)
|
||||||
@@ -12,10 +12,10 @@ elseif(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
#测试拦截器
|
#测试拦截器
|
||||||
add_executable(${PROJECT_NAME}interceptor test_interceptor.c)
|
add_executable(${PROJECT_NAME}filter test-filter.c)
|
||||||
target_link_libraries(${PROJECT_NAME}interceptor logging)
|
target_link_libraries(${PROJECT_NAME}filter logging)
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
add_test(test_interceptor ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}interceptor)
|
add_test(test_filter ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}filter)
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
add_test(test_interceptor ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}interceptor.exe)
|
add_test(test_filter ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}filter.exe)
|
||||||
endif()
|
endif()
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
#include "logging/logging-core.h"
|
#include "logging/logging-core.h"
|
||||||
|
#include "logging/logging-filter.h"
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@@ -13,28 +14,28 @@ int main() {
|
|||||||
log_debug("This is a debug message");
|
log_debug("This is a debug message");
|
||||||
log_warning("This is a warning message%s", "123");
|
log_warning("This is a warning message%s", "123");
|
||||||
|
|
||||||
char *test1[] = {"This", NULL};
|
char *test1[] = {"This", NULL};
|
||||||
|
|
||||||
log_Interceptor *tint = loggingSubStringInterceptor(
|
log_filter *tint =
|
||||||
test1,
|
loggingFilterSubStr(test1,
|
||||||
LOG_DEBUG,
|
LOG_DEBUG,
|
||||||
loggingFileHandler("test_interceptor", 1024 * 1024),
|
loggingHandlerFile("test_interceptor", 1024 * 1024),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
logger->addInterceptor(tint);
|
logger->addFilter(tint);
|
||||||
|
|
||||||
char *test2[] = {"123", NULL};
|
char *test2[] = {"123", NULL};
|
||||||
|
|
||||||
log_Interceptor *tint1 = loggingSubStringInterceptor(
|
log_filter *tint1 = loggingFilterSubStr(
|
||||||
test2,
|
test2,
|
||||||
LOG_ERROR,
|
LOG_ERROR,
|
||||||
loggingFileHandler("test_interceptor1", 1024 * 1024),
|
loggingHandlerFile("test_interceptor1", 1024 * 1024),
|
||||||
true);
|
true);
|
||||||
|
|
||||||
logger->addInterceptor(tint1);
|
logger->addFilter(tint1);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Interceptor added\n");
|
printf("filter added\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
log_info("This is an info message");
|
log_info("This is an info message");
|
||||||
Reference in New Issue
Block a user