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

相关文章

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JAVA Log 日志级别和使用配置示例

《JAVALog日志级别和使用配置示例》本文介绍了Java中主流的日志框架,包括Logback和Log4j2,并详细解释了日志级别及其使用场景,同时,还提供了配置示例和使用技巧,如正确的日志记录方... 目录一、主流日志框架1. Logback (推荐)2. Log4j23. SLF4J + Logback

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

tomcat日志中文乱码问题及解决方案

《tomcat日志中文乱码问题及解决方案》文章主要介绍了在使用Tomcat时遇到的乱码问题及其解决方法,页面输出乱码可能由于server.xml配置、HTML标签、编程输出编码不一致引起,解决方法包括... 目录一、页面输出乱码1.server.XML配置未注明编码格式2.catalina.bawww.cp

Qt实现删除布局与布局切换功能

《Qt实现删除布局与布局切换功能》在Qt应用开发中,动态管理布局是一个常见需求,比如根据用户操作动态删除某个布局,或在不同布局间进行切换,本文将详细介绍如何实现这些功能,并通过完整示例展示具体操作,需... 目录一、Qt动态删除布局1. 布局删除的注意事项2. 动态删除布局的实现步骤示例:删除vboxLay

Mysql利用binlog日志恢复数据实战案例

《Mysql利用binlog日志恢复数据实战案例》在MySQL中使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法,:本文主要介绍Mysql利用binlog日志恢复数据... 目录mysql binlog核心配置解析查看binlog日志核心配置项binlog核心配置说明查看当前所

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日