commit bd72ed874bcc84c2972e3ce4975f4c106149dca6 Author: youmetme <321640253@qq.com> Date: Mon Aug 12 12:28:43 2024 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdea02f --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +.vscode/** +bin +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0d70c16 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required( VERSION 3.28) + +project(Logging) + + +aux_source_directory(${CMAKE_SOURCE_DIR}/src SRC) + +set(LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) +set(ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin) + +include_directories(${CMAKE_SOURCE_DIR}/include) + +# add_library(${PROJECT_NAME} ${SRC}) +# add_library(${PROJECT_NAME} SHARED ${SRC}) + + +add_executable(${PROJECT_NAME}main main.c ${SRC}) + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/include/logging.h b/include/logging.h new file mode 100644 index 0000000..f067567 --- /dev/null +++ b/include/logging.h @@ -0,0 +1,57 @@ + +#ifndef __LOGGING_H +#define __LOGGING_H + +#include +#include +#include +#include +#include + +typedef enum { + LOG_ERROR, + LOG_WARNING, + LOG_INFO, + LOG_DEBUG, +} log_level; + +typedef enum { + L_ERROR, + L_OK, +} log_status; + +typedef struct Handler { + FILE* file; + log_level level; +} log_Handler; + + +//日志操作器 +typedef struct Logger +{ + log_level level; + log_Handler* handler; + void (*error)(const char* format, ...); + void (*warning)(const char* format, ...); + void (*info)(const char* format, ...); + void (*debug)(const char* format, ...); +} Logger; + + +//日志类对象 +typedef struct Logging { + Logger* (*getLogger)(const char* name, log_level level); + log_status (*setLevel)(Logger* logger, log_level level); + // void (*addFormat)(const char* format); + // void (*addFilter)(const char* filter); + void (*addHandler)(log_Handler* handler); +} Logging; + + + +Logging* createLogging(); + + +log_Handler* fileHandler(const char* name,log_level level); + +#endif // __LOGGING_H \ No newline at end of file diff --git a/main.c b/main.c new file mode 100644 index 0000000..5d5a325 --- /dev/null +++ b/main.c @@ -0,0 +1,14 @@ +#include "logging.h" + + +int main() { + // Your code goes here + Logging *log = createLogging(); + Logger *logger = log->getLogger("testLogger",LOG_INFO); + logger->info("This is an info message"); + logger->error("This is an error message"); + logger->debug("This is a debug message"); + logger->warning("This is a warning message"); + + return 0; +} \ No newline at end of file diff --git a/src/logging-handler.c b/src/logging-handler.c new file mode 100644 index 0000000..d0e1edd --- /dev/null +++ b/src/logging-handler.c @@ -0,0 +1,16 @@ + +#include "logging.h" + + + + + + +log_Handler* fileHandler(const char* name,log_level level){ + FILE* fp = fopen(name, "w"); + log_Handler* handler = (log_Handler*)malloc(sizeof(log_Handler)); + handler->file = fp; + handler->level = level; + + return handler; +} \ No newline at end of file diff --git a/src/logging.c b/src/logging.c new file mode 100644 index 0000000..3f7446a --- /dev/null +++ b/src/logging.c @@ -0,0 +1,101 @@ +#include "logging.h" + + + +Logger* G_LOGGER = NULL; + +#define RED "\033[0;31m" +#define GREEN "\033[0;32m" +#define YELLOW "\033[0;33m" +#define BLUE "\033[0;34m" +#define RESET "\033[0m" +#define CYAN "\033[0;36m" +#define MAGENTA "\033[0;35m" +#define WHITE "\033[0;37m" +#define BLACK "\033[0;30m" + + + +static void getTimeStr(char * timeStr){ + time_t t = time(NULL); + struct tm* p = localtime(&t); + char _timeStr[18]; + strftime(_timeStr, sizeof(_timeStr), "%Y-%m-%d %H:%M:%S", p); + strcpy(timeStr, _timeStr); +} + + +static void addHandler(log_Handler* handler){ + if (G_LOGGER == NULL){ + return; + } + G_LOGGER->handler = handler; +} + + +//*************************记录日志******************************* */ +static void error(const char* format, ...){ + if (G_LOGGER->level >= LOG_ERROR){ + char timeStr[18]; + getTimeStr(timeStr); + printf("%sError%s %s %s\n",RED,RESET, timeStr, format); + } + +} + +static void warning(const char* format, ...){ + if (G_LOGGER->level >= LOG_WARNING){ + char timeStr[18]; + getTimeStr(timeStr); + printf("%sWarning%s %s %s\n",YELLOW,RESET, timeStr, format); + } + +} + +static void info(const char* format, ...){ + if (G_LOGGER->level >= LOG_INFO){ + char timeStr[18]; + getTimeStr(timeStr); + printf("%sInfo%s %s %s\n",GREEN,RESET, timeStr, format); + } +} + +static void debug(const char* format, ...){ + if (G_LOGGER->level >= LOG_DEBUG){ + char timeStr[18]; + getTimeStr(timeStr); + printf("%sDebug%s %s %s\n",CYAN,RESET, timeStr, format); + } +} +//*************************记录日志******************************* */ + + +/** +* @description :获取一个日志操作对象 +* @param +* @return +*/ +static Logger* getLogger(const char* name, log_level level){ + Logger* logger = (Logger*)malloc(sizeof(Logger)); + logger->error = error; + logger->warning = warning; + logger->info = info; + logger->debug = debug; + + logger->level = level; + logger->handler = NULL; + + G_LOGGER = logger; + return G_LOGGER; +} + +/** +* @description :创建一个日志对象 +* @return :Logging* 返回一个日志对象 +*/ +Logging* createLogging(){ + Logging* logging = (Logging*)malloc(sizeof(Logging)); + logging->getLogger = getLogger; + logging->addHandler = addHandler; + return logging; +} \ No newline at end of file