C++ 日志管理 spdlog 使用笔记

Part.I Introduction

spdlog 是一个开源的 C++ 日志管理工具,Git 上面的地址为

Git 仓库:https://github.com/gabime/spdlog

在这里插入图片描述

Chap.I 预备知识

下面是使用 spdlog 前需要了解的一些东西

  • 日志等级:trace(T) < debug(D) < info(I) < warn(W) < err(E) < critical(C ) < offoff 表示关闭,举个例子,如果设置的日志等级为 info,那么 debug 和 trace 的信息将不会显示,只会显示等级大于等于 info 的日志。默认的日志等级为 info
  • 日志类型:CONSOLEROTATINGBASICDAILY

Chap.II 常用语句

下面是一些常用语句

spdlog::set_pattern("[%Y-%m-%d %T] [%^%L%$] %v");		// 设置日志格式
SPDLOG_TRACE("Some trace message with param {}", 42);	// 这两个好像不会输出,改变日志等级也不会,spdlog::trace 就可以
SPDLOG_DEBUG("Some debug message with param {}", 42);	
SPDLOG_INFO("Some info message with param {}", 42);		// 不同等级的日志输出
SPDLOG_WARN("Some warn message with param {}", 42);
SPDLOG_ERROR("Some error message with param {}", 42);
SPDLOG_CRITICAL("Some critical message with param {}", 42);
spdlog::info("Welcome to spdlog!");						// 或者用这种格式
spdlog::set_level(spdlog::level::info);					// 设置日志输出等级

SPDLOG_LEVEL_TRACE()
SPDLOG_LEVEL_DEBUG()
SPDLOG_LEVEL_INFO()
SPDLOG_LEVEL_WARN()
SPDLOG_LEVEL_ERROR()
SPDLOG_LEVEL_CRITICAL()

Part.II 使用

使用的时候,只需要 include/ 文件夹就行了。比如,使用 VS Studio 可以选中项目→右键→属性→C/C++→常规→附加包含目录→编辑→把include/ 文件的路径加入进去即可。

实际上,上面这种方法几乎适用于以 VS Studio 作为编译环境的,所有三方库的添加。 另外,还可以用 cmake 来添加。

Chap.I 简单使用

根据官方说明文档,可直接这样使用,

#include <iostream>
#include "spdlog/spdlog.h"

using namespace std;

int main()
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);

    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");

    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");

    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");

    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
    getchar();
}

Chap.II 自定义日志格式

spdlog 默认的输出格式为:

[2014-31-10 23:46:59.678] [info] [my_loggername] Some message

要定制输出格式,可以调用:

spdlog::set_pattern(pattern_string);
//示例
spdlog::set_pattern("***[%H:%M:%S %z] [thread %t] %v***");

或者实现自己的格式化器:

spdlog::set_formatter(std::make_shared<my_custom_formatter>());

输出格式的Pattern中可以有若干%开头的标记,含义如下表:

标记说明
%v实际需要被日志记录的文本,如果文本中有{占位符}会被替换
%t线程标识符
%P进程标识符
%n日志记录器名称
%l日志级别
%L日志级别简写
%^转换为大写字母
%$转换为彩色输出
%a简写的周几,例如Thu
%A周几,例如Thursday
%b简写的月份,例如Aug
%B月份,例如August
%c日期时间,例如 Thu Aug 2315:35:46 2014
%C两位年份,例如14
%Y四位年份,例如2014
%D或%xMM/DD/YY格式日期,例如"08/23/14
%m月份,1-12之间
%d月份中的第几天,1-31之间
%H24小时制的小时,0-23之间
%l12小时制的小时,1-12之间
%M分钟,0-59
%S秒,0-59
%e当前秒内的毫秒,0-999
%f当前秒内的微秒,0-999999
%F当前秒内的纳秒,0-999999999
%pAM或者PM
%r12小时时间,例如 02:55:02 pm
%R等价于%H:%M,例如23:55
%T或%XHH:MM:SS
%z时区UTC偏移,例如+02:00
%+表示默认格式

下面是笔者常用的设置

spdlog::set_pattern("[%Y-%m-%d %T] [%^%L%$] %v");
SPDLOG_INFO("Some info message with param {}", 42);
// -------------- 样式如下 ---------------
[2023-07-07 12:16:41] [I] Some info message with param 42

Part.III 问题&解决方案

Chap.I 如果文件存在则删除

在原 log 文件存在的情况下,使用 spdlog 会报错。所以需要自己添加代码把原 log 文件给删除。

#include <sys/stat.h>

struct stat buffer;
if (stat(str_log_name.c_str(), &buffer) == 0)
{// if the file exists, remove it.
    remove(str_log_name.c_str());
}

Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值