QT重定向用于日志记录-创新互联

前言
一个良好的应用程序应该具有日志记录系统,这样便于后期维护和发布程序后追踪错误,常用的日志框架如log4、logplus等可以自己下载使用,本文主要讲述QT重定向记录日志的方法。
思路及代码
QT4中使用
Q_CORE_EXPORT QT_DEPRECATED QtMsgHandler qInstallMsgHandler(QtMsgHandler);
QT5中使用
Q_CORE_EXPORT QtMessageHandler qInstallMessageHandler(QtMessageHandler);
定义指针函数用于自定义回调
typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
定义回调函数:
#if (QT_VERSION<= QT_VERSION_CHECK(5,0,0))
void outputLogMessage(QtMsgType type, const char *msg)
#else
void outputLogMessage(QtMsgType type, const QMessageLogContext& context, const QString& msg)
#endif
{//转发给单例的成员函数
	LogManage::getInstance()->outputLog(type, context, msg);
}

成员函数自定义:

创新互联是一家专注于成都网站设计、成都做网站与策划设计,木兰网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:木兰等地区。木兰做网站价格咨询:18982081108
void LogManage::outputLog(QtMsgType type, const QMessageLogContext &, const QString &msg)
{//加锁,防止多线程中qdebug太频繁导致崩溃
	QMutex mutex;
	QMutexLocker locker(&mutex);
	QString content;

	//这里可以根据不同的类型加上不同的头部用于区分
	switch (type) {case QtDebugMsg:
		content = QString("[Debug]%1%2").arg(msg).arg(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss]"));
		break;

	case QtWarningMsg:
		content = QString("[Info]%1%2").arg(msg).arg(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss]"));
		break;

	case QtCriticalMsg:
		content = QString("[Critical]%1%2").arg(msg).arg(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss]"));
		break;

	case QtFatalMsg:
		content = QString("[Fatal]%1%2").arg(msg).arg(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss]"));
		break;

	case QtInfoMsg:
		content = QString("[Info]%1%2").arg(msg).arg(QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss]"));
	}
	LogManage::getInstance()->save(content);
}

注册回调函数:

#if (QT_VERSION<= QT_VERSION_CHECK(5,0,0))
	qInstallMsgHandler(outputLogMessage);
#else
	qInstallMessageHandler(outputLogMessage);
#endif

完成上面三个步骤,重定向就完成了,具体的细节比如日志记录方式存储位置可以自己记录。

QString fileName = QString("%1/%2").arg(path).arg("Log");
	QDir* dir = new QDir();
	if (!dir->exists(fileName)) {dir->mkpath(fileName);
	}
	else
	{fileName += QString("/%1.txt").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd"));
		if (this->fileName != fileName) {	this->fileName = fileName;
			if (file->isOpen()) {		file->close();
			}
			file->setFileName(fileName);
			if (!file->open(QIODevice::WriteOnly | QIODevice::Append | QFile::Text))
			{		return;
			}
		}
		QTextStream logStream(file);
		logStream<< content<< "\n";
	}
效果

在这里插入图片描述
在这里插入图片描述
我采用每天记录一个日志文件,显示详细日期等,在大型项目中,可能要考虑txt记录上限问题,我们可以在文件创建中新增文本等方式来记录,在这暂时够用不做过多解析。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻标题:QT重定向用于日志记录-创新互联
URL分享:http://ybzwz.com/article/dhpdds.html