拿来即用的脚手架:日志记录器1
您好,我是昊天,国内某头部音频公司的C++主程,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。
本文思路来源于读者交流群,某位读者朋友出一系列的拿来即用的脚手架,如INI文件的封装解析、JSON文件的封装解析、日志模块、内存池等。本文作为第三篇——日志记录器。
关于之前两个子项目INI文件和内存池,如果感兴趣可参看文末的阅读链接。
之前推荐过两个日志库,分别是spdlog和quill。如果感兴趣可参看文末的链接。但是由于quill的性能高、Header-only、支持多线程、支持多种日志格式等特性,所以本文所述的日志记录器,是以quill为基础进行封装的。
需求描述
为了满足该项目真正的成为一个脚手架项目的要求,本项目期望满足如下的需求:
- 跨平台:支持Windows、Linux、macOS等主流操作系统;
- 易用性:便于集成到项目中,直接使用对应的日志宏即可输出日志
- 功能全:
- 支持多种方式的日志输出:本地文件输出、控制台输出、回调输出;且用户可自主选择输出方式;
- 支持不同层级的日志输出:DEBUG、INFO、WARNING、ERROR;
- 信息全:日志本是为了便于解决问题,所以日志的信息应该尽可能全,包括时间、进程ID、线程ID、文件名、行号、日志级别、日志内容等。
使用说明
使用
本项目使用 CMakeList 进行组织,准备了quill_logger.cmake
文件, 可以直接通过以下命令进行集成:
# 注意修改文件路径
include(${CMAKE_CURRENT_SOURCE_DIR}/quill_logger/quill_logger.cmake)
按照如上方式集成完后,便可以通过如下方式使用该日志记录器
代码语言:javascript代码运行次数:0运行复制#include <iostream>
#include "QuillLogger.h"//需要包含的头文件
int main()
{
//使用日志宏
QUILL_LOGGER_LOG_DEBUG("Hello, world!");
QUILL_LOGGER_LOG_INFO("info logger to log");
return 0;
}
配置
按照如上使用方法仅可保证编译通过,但是能否正常输出日志,还取决于当前项目属性和该日志记录器的配置。
关于日志输出
该日志记录器支持多种方式的日志输出,如本地文件输出、控制台输出、回调输出。用户可根据自己的需求进行配置。日志输出模式由三个选项控制,分别为:
- CONSOLE_LOG_ENABLE :其用于控制控制台输出,默认情况下只有在debug模式下才会输出到控制台;如果需要在其他模式下也将日志输出到控制台,请将该选项设置为ON。
- FILE_LOG_ENABLE:其用于控制本地文件输出,默认关闭。 本地文件输出可将日志写入到指定的文件中。值得注意的是:
- 需要指定本地文件的路径。在代码中搜索关键字
log_file_path
进行修改即可。可依次修改windows、linux、macos下的路径。如果需要更加细化平台的路径,则需要由用户自行配置。 - 请确认文件路径具备读写权限,若权限不足则无法输出本地日志文件
- 关于日志文件名,默认会在文件名称后边追加开始书写日志文件的时间,如
log_20250311_122235.txt
。
- 需要指定本地文件的路径。在代码中搜索关键字
- CALLBACK_LOG_ENABLE: 其用于控制回调输出,默认关闭。回调输出可以将日志信息传递给用户自定义的回调函数,以便进行进一步处理。但是需要主动设置对应的回调函数。
补充说明
为满足用户可能存在的输出、控制台输出、回调输出的需求,日志记录器的实现方式,目前有两种:
- 方案一:使用一个内置记录器,配备多个槽;
- 方案二:使用多个内置记录器,每个记录器对应一个槽;