Qt 日志之Qdebug 二次封装类

2024-05-10 06:38
文章标签 日志 封装 qt 二次 qdebug

本文主要是介绍Qt 日志之Qdebug 二次封装类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单的日志库可以用Qdebug做一个注册InstallMessageHandle,还有一种是使用开源的日志库,如Boost 库,Log4Qt 等。开源这些日志功能比较强大,Qdebug的话做些本地运行日志跟踪状态,还是足够的。

根据日期生成文件夹
文件夹存放日志,按时间命名,大于1024 * 1024 * 4 ,(4M)自动新建文件。大小可以根据具体项目更改.
文件自动新增
时间,文件名+行号+level +信息 :
[18:03:58.210][..\testQdebug\main.cpp-11][Info]: test qDebug
[18:03:58.253][..\testQdebug\main.cpp-12][Info]: test qInfo 
[18:06:16.301][..\testQdebug\main.cpp-11][Info]: test qDebug
[18:06:16.301][..\testQdebug\main.cpp-12][Info]: test qInfo 
[18:06:16.302][..\testQdebug\main.cpp-13][Error]: test qCritical 

只需包含如下头文件:
使用时:
CLog::InstallLog(); 初始化
qDebug()<<QStringLiteral"中文消息";
qError()<<…;

#ifndef CLOG_H
#define CLOG_H
/*
文件夹存放日志,按时间命名,大于1024 * 1024 * 4 ,(4M)自动新建文件;大小可以根据具体项目更改.
日志信息格式:  [时间][文件名-行号][level]: 信息
使用示例如下:
#include "mainwindow.h"
#include <QApplication>
#include "clog.h"
int main(int argc, char *argv[])
{QApplication a(argc, argv);//初始化CLog::InstallLog();MainWindow w;w.show();//使用如下qDebug() << "test qDebug";qInfo() << "test qInfo ";qCritical() <<"test qCritical ";return a.exec();
}
*/
#pragma once
//by karlchan cgs
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QMutex>
#include <QMutexLocker>static int gIndex = 0;
class CLog
{
public:CLog();~CLog();public:static void InstallLog(){makesureDir();makesureIndex();qInstallMessageHandler(CLog::outputMessage);};
protected:private:static void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg){static QMutex mutex;QMutexLocker locker(&mutex);QString	strDir = QApplication::applicationDirPath() + "/../Log/" + QDateTime::currentDateTime().toString("yyyyMMdd");QString text;switch (type){case QtWarningMsg:text = QString("[Warning]:");break;case QtInfoMsg:case QtDebugMsg:text = QString("[Info]:");break;case QtFatalMsg:case QtCriticalMsg:text = QString("[Error]:");}QString context_info = QString("[%1-%2]").arg(QString(context.file)).arg(context.line);QString current_date_time = QDateTime::currentDateTime().toString("[hh:mm:ss.z]");//yyyy-MM-ddQString current_date = QDateTime::currentDateTime().toString("yyyyMMdd");//zcurrent_date += QString("_%1").arg(gIndex, 3, 10, QChar('0'));QString message = QString("%0%1%2 %3").arg(current_date_time).arg(context_info).arg(text).arg(msg);QString strPath = strDir + "/" + current_date + ".log";QFileInfo fi(strPath);if (fi.size() >= (1024 * 1024 * 10)){gIndex++;current_date = QDateTime::currentDateTime().toString("yyyyMMdd");//zcurrent_date += QString("_%1").arg(gIndex, 3, 10, QChar('0'));}strPath = strDir + "/" + current_date + ".log";QFile file(strPath);if (file.open(QIODevice::WriteOnly | QIODevice::Append)){QTextStream text_stream(&file);text_stream << message << "\r\n";file.flush();file.close();}}static void makesureDir(){QString strDir;strDir = QApplication::applicationDirPath() + "/../Log/";QDir dir(strDir);if (!dir.exists()){dir.mkdir(strDir);}strDir = QApplication::applicationDirPath() + "/../Log/" + QDateTime::currentDateTime().toString("yyyyMMdd");dir.setPath(strDir);if (!dir.exists()){dir.mkdir(strDir);}qDebug()<<strDir;};static void makesureIndex(){QString	strDir = QApplication::applicationDirPath() + "/../Log/" + QDateTime::currentDateTime().toString("yyyyMMdd");QDir dir(strDir);dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);QFileInfoList list = dir.entryInfoList();foreach (auto var,list){QFileInfo fi(var.absoluteFilePath());if (fi.size() >= (1024 * 1024 * 10)){gIndex++;}}};
};#endif // CLOG_H

 

这篇关于Qt 日志之Qdebug 二次封装类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975715

相关文章

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用