QT实时输出日志的方法
前言
Qt开发过程中经常需要输出调试日志,这些日志分为五个级别:qDebug、qWarning、qInfo、qCritical、qFatal。这些日志在调试过程中我们可以在开发工具的程序输出窗口查看,而实际使用的release版本脱离开发环境后则没办法显示这些信息。如果能在release版本中也将这些信息打印出来的话就可以方便后续程序维护及bug定位。
本文介绍两种方法,一种是将日志信息重定向输出到txt文件,另外一种是定向输出到界面控件QTextEdit上,并且根据日志类别控制信息显示的颜色。
`
简述
消息处理程序是一个函数,用于打印调试信息、警告信息、严重错误和致命的错误的消息。Qt库(debug模式)包含成百上千的警告信息打印,当发生内部错误时(通常是无效的函数参数)。Qt在release模式下构建还包含这些警告,除非在编译时设置QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT。如果你实现自己的消息处理程序,就可以完全控制这些消息。
缺省的消息处理程序向标准输出打印消息。如果是一个致命的消息,应用程序就会立即中止。
仅可以定义一个消息处理程序,因为这通常是在应用范围的基础上进行的,以控制调试输出。
调用qInstallMessageHandler(0)可以恢复消息处理程序。
调试级别
Q包含用于警告和调试文本的全局宏:
qDebug() :调试消息
qInfo():信息消息
qWarning():警告消息和可恢复的错误
qCritical():关键错误和系统错误
qFatal():致命错误
一、输出到txt文件
代码示例:
void outputMessage2file(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
static QMutex mutex;
mutex.lock();
QString text;
switch(type)
{
case QtDebugMsg: text = QString("Debug:"); break;
case QtWarningMsg: text = QString("Warning:"); break;
case QtCriticalMsg: text = QString("Critical:"); break;
case QtFatalMsg: text = QString("Fatal:"); break;
}
QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context