C++高易用日志库实现
这篇文章是一个 C++ 日志库的落地使用说明,核心覆盖“如何接入、如何配置、如何控制等级、如何输出格式化日志”。接入与构建流程给出仓库目录结构说明,并区分依赖源码与已编译库文件位置。提供了在 CMake 中添加头文件路径、库路径、链接库的最小接入配置。同时说明了 logger 与 fmt 动态库的手动编译和落库建议。运…
使用教程如何添加到项目中使用 输入以下命令得到项目文件git clone https://github.com/ACking-you/my-logger.git 项目目录如下: dependencies:整个项目的外部依赖,以源码形式存在(比如fmt库)。 lib:整个项目已经打包好的库文件,我打包的是动态库,如有静态库需要请自行编译。库的名称为logger和fmt。 其余均为项目关键源码,就Logger.cpp和Logger.h两个。main.cc是项目运行测试代码。CMake配置 由于本人对 cmake 的 install 指令了解的并不深入,所以本库并不支持最后的 make install ,为了防止大伙编译库的长时间等待,我已经编译好了动态库版本,所以直接拿去用即可(当然不排除环境的不兼容,所以可能还是需要手动编译)。 如果你clone本项目和你的项目为同级目录,请在你的cmake文件中添加下面的代码,然后再链接这两个库便可得到本库的所有支持。include_directories(../my-logger)#具体为本项目的根目录,可用相对路径也可用绝对。此处是为了方便搜索头文件 link_directories(../my-logger/lib)#路径说明同上,该路径为链接库的目录 .... target_link_libraries(${CMAKE_PROJECT_NAME} logger fmt)#添加对应的链接库 注意:如果你不需要使用fmt库中的高级功能,那么你可以不链接fmt库,如果需要使用其高级功能进行打印(比如支持打印std::map等标准库容器),那么请链接fmt库。库的编译 下面为logger库的编译命令:mkdir build-logger cd build-logger cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON make 输入上面的命令后,会在 build-logger 文件夹中生成对应的动态库(不定义第二个变量时默认编译静态库)。建议把这个生成的动态库移动到这个项目 lib 目录中,方便在使用时只需添加之前的cmake代码。 下面为fmt库的编译命令(由于该库较大,编译时间可能较久,我的电脑用了将近十分钟):mkdir build-fmt cd build-fmt cmake ../dependencies/fmt/ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON 同样会在 build-fmt 目录生成对应的动态库,建议同样放入该项目lib目录中,注意 fmt 库的动态库是由多个文件构成,这多个文件都需要被放在一起。如何使用库如何配置 如下,为整个日志的所有配置项目,当然你也可以不进行配置,也有对应的默认值#include"Logger.h" int main(){ Config::Set({ .print_flag = LstdFlags | lblog::LthreadId, //设置打印的内容,有日期、时间、文件名(长、短)、行号、线程id这些选项可选 (默认为LstdFlags包含Ldata | Ltime | Lshortname | Lline .output_prefix = "my", //设置输出日志的前缀名,默认为空 .output_file = "./log.txt", //设置输出日志的文件,默认为空 .is_console = true //设置是否输出到控制台,默认为true }); } 注意:如果需要调用此配置函数进行配置,需要在所有打印日志宏调用之前,且同一个进程请不要使用两次配置(因为整个配置是一个单例,配置的更改在同一个进程中会是非线程安全的行为)。精确控制输出等级 我们的库共提供以下五种宏来进行日志的打印:debug、info、warn、error、fatal 使用debug进行日志输出的,在release模式下将不再进行输出。 我们同样也可以通过手动定义对应的宏控制日志输出等级。 如下:#define LOG_LIMIT_WARN #include "Logger.h" int main(){ debug("hhh"); //无效 info("hhh"); //无效 warn("hhh"); //有效 error("hhh"); //有效 fatal("hhh"); //有效 } 同理也可以通过 LOG_LIMIT_ERROR 控制至少是error等级才输出日志。日志输出介绍 前面介绍了基本的日志的控制,接下来介绍打印输出的功能,以debug和info为例: 本日志的最终输出使用的是C++第三方库 fmt ,虽然在C++20中它…
正在初始化 WebAssembly 引擎…
首次编译原生模块可能需要数秒
就绪后,页面交互将以接近原生的速度运行