spdlog 生成日志

使用 spdlog 实现日志功能,并自定义日期格式非常简单。spdlog 提供了灵活的日志格式配置,可以通过模式字符串指定日期和时间的输出格式。

实现步骤

  1. 安装 spdlog

    • 通过 vcpkg 安装:vcpkg install spdlog

    • 或者直接下载头文件:spdlog GitHub

  2. 配置日志格式

    • 使用 spdlog::set_pattern 设置日志格式,支持日期、时间、日志级别、消息等。

  3. 创建日志器

    • 使用 spdlog::basic_logger_mt 创建文件日志器。

    • 使用 spdlog::stdout_color_mt 创建控制台日志器。

  4. 记录日志

    • 使用 spdlog::debugspdlog::infospdlog::warnspdlog::error 记录不同级别的日志。

示例代码

以下是一个完整的示例,展示如何使用 spdlog 实现带日期格式的日志功能:

 

#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>

int main() {
    try {
        // 创建文件日志器
        auto file_logger = spdlog::basic_logger_mt("file_logger", "app.log");

        // 创建控制台日志器
        auto console_logger = spdlog::stdout_color_mt("console");

        // 设置全局日志器
        spdlog::set_default_logger(file_logger);

        // 设置日志格式
        spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v");

        // 设置日志级别
        spdlog::set_level(spdlog::level::debug);

        // 记录日志
        spdlog::debug("This is a debug message.");
        spdlog::info("This is an info message.");
        spdlog::warn("This is a warning message.");
        spdlog::error("This is an error message.");

        // 同时输出到控制台
        console_logger->info("This message is also printed to the console.");
    } catch (const spdlog::spdlog_ex &ex) {
        // 捕获并处理 spdlog 异常
        std::cerr << "Log initialization failed: " << ex.what() << std::endl;
        return 1;
    }

    return 0;
}

代码说明

  1. 日志格式

    • spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v")

      • %Y-%m-%d:日期,格式为 年-月-日

      • %H:%M:%S.%e:时间,格式为 时:分:秒.毫秒

      • %^%l%$:日志级别,带颜色高亮。

      • %v:日志消息。

  2. 日志级别

    • spdlog::set_level(spdlog::level::debug):设置日志级别为 debug,记录所有级别的日志。

  3. 日志输出

    • 日志会同时输出到文件 (app.log) 和控制台。

  4. 异常处理

    • 捕获 spdlog::spdlog_ex 异常,确保日志初始化失败时程序不会崩溃。

日志文件输出示例

app.log 文件内容:

复制

[2023-10-15 14:30:45.123] [debug] This is a debug message.
[2023-10-15 14:30:45.124] [info] This is an info message.
[2023-10-15 14:30:45.125] [warning] This is a warning message.
[2023-10-15 14:30:45.126] [error] This is an error message.

控制台输出示例:

复制

[2023-10-15 14:30:45.123] [debug] This is a debug message.
[2023-10-15 14:30:45.124] [info] This is an info message.
[2023-10-15 14:30:45.125] [warning] This is a warning message.
[2023-10-15 14:30:45.126] [error] This is an error message.
[2023-10-15 14:30:45.127] [info] This message is also printed to the console.

进一步优化

  1. 异步日志
    如果需要更高的性能,可以使用异步日志器:

    cpp

    复制

    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "async_app.log");
  2. 日志文件滚动
    使用 spdlog::rotating_logger_mt 实现日志文件滚动:

    cpp

    复制

    auto rotating_logger = spdlog::rotating_logger_mt("rotating_logger", "rotating_app.log", 1048576 * 5, 3);
  3. 多日志器
    可以创建多个日志器,分别用于不同的日志目标(如文件、控制台、网络等)。


总结

通过 spdlog,您可以轻松实现带日期格式的日志功能,并支持多目标输出(文件、控制台等)。spdlog 的高性能和灵活性使其成为 Qt 和 C++ 项目中的理想选择。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伍心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值