使用Qt C++封装设计一个spdlog日志系统,要求功能齐全,在打印到控制台的内容要详细具体到那个文件哪一行,颜色区分,可自由选择打印到控制台还是打印到日志文件,也可以同时打印,程序运行时每隔2秒刷新一次日志文件,保证日志文件的实时性。并且限制文件的大小和数量达到自动轮换效果

时间: 2024-02-18 07:01:56 浏览: 25
以下是一个使用Qt C++封装的spdlog日志系统的示例代码: ```cpp #include <QObject> #include <QTimer> #include <QString> #include <spdlog/spdlog.h> #include <spdlog/sinks/basic_file_sink.h> #include <spdlog/sinks/stdout_color_sinks.h> class QtSpdLogger : public QObject { Q_OBJECT public: explicit QtSpdLogger(QObject *parent = nullptr, QString logFileName = "example.log", qint64 logFileSize = 1048576, int maxLogFiles = 5); ~QtSpdLogger(); void logDebug(QString message); void logInfo(QString message); void logWarn(QString message); void logError(QString message); private: std::shared_ptr<spdlog::logger> m_logger; QTimer m_timer; QString m_logFileName; qint64 m_logFileSize; int m_maxLogFiles; void initLogger(); void rotateLogFiles(); }; QtSpdLogger::QtSpdLogger(QObject *parent, QString logFileName, qint64 logFileSize, int maxLogFiles) : QObject(parent), m_logFileName(logFileName), m_logFileSize(logFileSize), m_maxLogFiles(maxLogFiles) { initLogger(); connect(&m_timer, &QTimer::timeout, this, &QtSpdLogger::rotateLogFiles); m_timer.start(2000); } QtSpdLogger::~QtSpdLogger() { m_logger->flush(); } void QtSpdLogger::initLogger() { // Create console sink with color auto consoleSink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); consoleSink->set_level(spdlog::level::trace); // Create file sink auto fileSink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(m_logFileName.toStdString(), m_logFileSize, m_maxLogFiles); fileSink->set_level(spdlog::level::trace); // Create combined logger with console and file sink spdlog::sinks_init_list sinkList = { consoleSink, fileSink }; m_logger = std::make_shared<spdlog::logger>("logger", sinkList); m_logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%L%$] [%s:%#] %v"); m_logger->set_level(spdlog::level::trace); } void QtSpdLogger::logDebug(QString message) { m_logger->debug(message.toStdString()); } void QtSpdLogger::logInfo(QString message) { m_logger->info(message.toStdString()); } void QtSpdLogger::logWarn(QString message) { m_logger->warn(message.toStdString()); } void QtSpdLogger::logError(QString message) { m_logger->error(message.toStdString()); } void QtSpdLogger::rotateLogFiles() { m_logger->flush(); spdlog::rotating_logger_mt("logger", m_logFileName.toStdString(), m_logFileSize, m_maxLogFiles); } ``` 使用该日志系统的示例代码: ```cpp #include <QCoreApplication> #include "QtSpdLogger.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QtSpdLogger logger(nullptr, "example.log", 1048576, 5); logger.logDebug("This is a debug message."); logger.logInfo("This is an info message."); logger.logWarn("This is a warning message."); logger.logError("This is an error message."); return a.exec(); } ``` 该日志系统将在控制台和日志文件中输出相同的日志信息,控制台的日志信息将使用颜色进行区分,日志文件将每隔2秒钟刷新一次,同时受限制的文件大小和数量将自动轮换。日志信息的格式如下: ``` [2021-07-27 11:05:19.327] [DEBUG] [main.cpp:12] This is a debug message. [2021-07-27 11:05:19.327] [INFO] [main.cpp:13] This is an info message. [2021-07-27 11:05:19.327] [WARN] [main.cpp:14] This is a warning message. [2021-07-27 11:05:19.327] [ERROR] [main.cpp:15] This is an error message. ```

相关推荐

最新推荐

recommend-type

Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例及QDataStream的使用方法

主要介绍了Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例,需要的朋友可以参考下
recommend-type

基于QT C++实现的数据结构软件设计报告

哈工大(威海)计算机科学与技术学院 软件设计程序II的实验报告,基于QT,C++实现的简单饮食健康助手小程序,具有一定的数据结构知识的构建。原作者,可私聊源码。
recommend-type

基于Linux/Qt的智能家居系统设计

该系统采用飞思卡尔公司ARM Cortex A8系列的i.MX51处理器作为MCU,在其上移植嵌入式Linux作为软件开发平台,并利用Qt相关技术为基础设计友好的用户界面,实现了ARM板的各功能模块与服务器端的交互。系统同时具备数字...
recommend-type

Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例

主要介绍了Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例,需要的朋友可以参考下
recommend-type

Qt实现保存、浏览、预览、打印功能的示例代码

下面小编就为大家分享一篇Qt实现保存、浏览、预览、打印功能的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。