当前位置: 首页 > news >正文

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++ 项目中的理想选择。

 

相关文章:

  • 从零开始在Windows使用VMware虚拟机安装黑群晖7.2系统并实现远程访问
  • .NET 10首个预览版发布:重大改进与新特性概览!
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十三) 优化聊天页面
  • 《机器学习数学基础》补充资料:过渡矩阵和坐标变换推导
  • 华为OD最新机试真题-模拟目录管理-C++-OD统一考试(E卷)
  • R语言和RStudio安装
  • 自学Java-JavaSE基础加强(多线程)
  • 计算机毕设-基于springboot的物流管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • 60页PDF | 四川电信数据湖及数据中台实施方案!(附下载)
  • Spring Boot 3.x 核心注解详解与最佳实践
  • 常见位运算技巧总结:从基础到高阶应用
  • thunder bird 配置邮箱
  • @Async与@EnableAsync有10个定时任务接口,只执行了8个
  • 利用PHP爬虫获取17网(17zwd)商品详情:实战指南
  • 设计模式之迭代器模式
  • 无人机接替通航应急优势及技术分析
  • 【星云 Orbit•STM32F4】13. 探索定时器:基本定时器
  • 碰一碰发视频系统之写卡功能开发了,支持OEM
  • 【Git】linux搭建Gitea配置mysql数据库
  • Redis特性总结
  • 网站中的文字滑动怎么做的/电脑培训机构
  • 可以做lebenslauf的网站/友链购买有效果吗
  • 欧莱雅的网络营销策划方案/seo 资料包怎么获得
  • 池州做网站/百度移动应用
  • 网站开发技术试验总结/活动推广方式
  • 网站营销信息/营销模式有哪些