# log.c **Repository Path**: frank-yulingfeng/rxi_log.c ## Basic Information - **Project Name**: log.c - **Description**: 一个在C99中实现的简单日志库 - **Primary Language**: C/C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-11-23 - **Last Updated**: 2023-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # log.c 一个简单的C99实现的日志库 ![screenshot](https://cloud.githubusercontent.com/assets/3920290/23831970/a2415e96-0723-11e7-9886-f8f5d2de60fe.png) ## 使用方法 将**[log.c](src/log.c?raw=1)**和**[log.h](src/log.h?raw=1)**添加到现有项目中,并与其一起编译。该库提供了6个类似函数的宏用于记录日志: ```c log_trace(const char *fmt, ...); log_debug(const char *fmt, ...); log_info(const char *fmt, ...); log_warn(const char *fmt, ...); log_error(const char *fmt, ...); log_fatal(const char *fmt, ...); ``` 每个函数都接受一个printf格式字符串,后跟其他参数: ```c log_trace("Hello %s", "world") ``` 结果是将给定格式的行打印到stderr: ``` 20:18:26 TRACE src/main.c:11: Hello world ``` #### log_set_quiet(bool enable) 可以通过将`true`传递给`log_set_quiet()`函数来启用安静模式。当启用此模式时,库将不会向`stderr`输出任何内容,但仍会写入文件和回调(如果已设置)。 #### log_set_level(int level) 可以使用`log_set_level()`函数设置当前的日志级别。低于给定级别的所有日志都不会被写入`stderr`。默认级别为`LOG_TRACE`,即不忽略任何日志。 #### log_add_fp(FILE *fp, int level) 可以使用`log_add_fp()`函数将一个或多个文件指针提供给库,以便将日志写入这些文件。输出到文件的数据格式如下: ``` 2047-03-11 20:18:26 TRACE src/main.c:11: Hello world ``` 忽略低于给定`level`的任何消息。如果库无法添加文件指针,则返回小于零的值。 #### log_add_callback(log_LogFn fn, void *udata, int level) 可以使用`log_add_callback()`函数将一个或多个回调函数提供给库,回调函数将被调用并传入日志数据。回调函数接收一个`log_Event`结构体,其中包含`line`行号、`filename`文件名、`fmt`字符串、`va` printf va\_list、`level`和给定的`udata`。 #### log_set_lock(log_LockFn fn, void *udata) 如果日志将从多个线程中写入,可以设置锁函数。如果应获取锁,则该函数传递布尔值`true`,如果应释放锁,则传递布尔值`false`,以及给定的`udata`值。 #### const char* log_level_string(int level) 将给定的日志级别名称作为字符串返回。 #### LOG_USE_COLOR 如果使用`-DLOG_USE_COLOR`编译库,则在打印时将使用ANSI颜色转义代码。 ## 许可证 此库是自由软件,您可以在MIT许可下重新分发或修改它。有关详情,请参阅[LICENSE](LICENSE)。