admin管理员组

文章数量:1446760

拿来即用的脚手架:日志记录器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文件, 可以直接通过以下命令进行集成:

代码语言:javascript代码运行次数:0运行复制
# 注意修改文件路径
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: 其用于控制回调输出,默认关闭。回调输出可以将日志信息传递给用户自定义的回调函数,以便进行进一步处理。但是需要主动设置对应的回调函数。

补充说明

为满足用户可能存在的输出、控制台输出、回调输出的需求,日志记录器的实现方式,目前有两种:

  • 方案一:使用一个内置记录器,配备多个槽;
  • 方案二:使用多个内置记录器,每个记录器对应一个槽;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-12,如有侵权请联系 cloudcommunity@tencent 删除配置权限日志函数内存

本文标签: 拿来即用的脚手架日志记录器1