QT:qInstallMessageHandler打印日志重定向

目录

1、qInstallMessageHandler含义

2、实例:

3、调试级别Q包含用于警告和调试文本的全局宏:

4、打印日志,如何使用


1、qInstallMessageHandler含义

(1)此函数在使用Qt消息处理程序之前已定义。返回一个指向前一个消息处理程序。

(2)消息处理程序是一个函数,用于打印qDebug,qWarning,qCritical和qFatal的错误消息。Qt库(调试模块)包含成百上千的警告信息,打印时(通常是无效的函数参数)发生内部错误。Qt构建在release模式下还包含一些除了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT之外的警告已经设置在编译。如果你实现自己的消息处理程序,需要完全控制这些消息。

(3)在X11或Windows下的调试器,缺省的消息处理程序向标准输出打印消息。如果这是一个致命的消息,应用程序立即中止。

(4)只有一个消息处理程序可以被定义,因为这通常是在应用程序的基础上完成控制调试输出。

(5)恢复消息处理程序,调用qInstallMessageHandler(0)。

2、实例:


static QMutex g_qmutex; // 互斥锁
QString g_LogDirPath = "/log/";

void outputMessage(QtMsgType type, const QMessageLogContext& Context, const QString &data )
{
    if(g_qmutex.tryLock(10)==false)
    {
        return;
    }

    QString msg(data);
    QString text;

    switch(static_cast<int>(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 current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
    QString current_date = QString("[%1]").arg(current_date_time);
    QString message = QString("%1 %2 %3").arg(current_date).arg(text).arg(msg);

    QString file_time = QDate::currentDate().toString("yyyyMMdd");
    QString file_name1  = QString(g_LogDirPath+"LogTWSDNetPay%1.log").arg(file_time);

    QFile file(file_name1);
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&file);
    text_stream << message << "\r\n";
    file.flush();
    file.close();
    g_qmutex.unlock();

    (void)Context;
}

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
    MainWindow::instance();


    qInstallMessageHandler(outputMessage);


    return a.exec();
}

3、调试级别
Q包含用于警告和调试文本的全局宏:

qDebug()
调试消息

qInfo()
信息消息

qWarning()
警告消息和可恢复的错误

qCritical()
关键错误和系统错误

qFatal()
致命错误

如果包含头文件<QDebug>,就可以将所述qDebug()宏用作一个输出流。

4、打印日志,如何使用

qDebug() << __LINE__ << __FUNCTION__ << "删除日志:" << rmFileName;

自动就会把当前要输出的日志内容,写到重定向的文件里面。

猜你喜欢

转载自blog.csdn.net/bigger_belief/article/details/131952648