• Qt中利用qDebug()记日志到文件


    新增log.h文件,在main函数中包含进来。

    log.h代码如下:

    #ifndef LOG_H
    #define LOG_H
     
    #include <QFile>
    #include <QTextStream>
    #include <QDateTime>
    #include <QMutex>
     
    //默认调试级别为warning,即小于warning级别的都不会写入日志文件
    //只有release版本的时候,才会输出到日志,debug版本正常输出到终端。
    namespace QT_LOG
    {//默认文件名为当前时间命名的log文件
        static int m_LogLevel = 1;
        static QString m_LogFile = QString("%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
        QMutex m_LogMutex;
    
        void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg /*char *msg*/)
        {
            if (type < m_LogLevel)//设置输出日志级别,小于该级别,将不会写入日志文件,默认是warning级别,即debug信息不会写入日志文件
            {
                return;
            }
     
            QString log_info;
            switch (type) 
            {
            case QtDebugMsg:
                log_info = QString("%1:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"),msg);
                break;
     
            case QtWarningMsg:
                log_info = QString("%1[Warning]:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"),msg);
                break;
     
            case QtCriticalMsg:
                log_info = QString("%1[Critical]:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"),msg);
                break;
     
            case QtFatalMsg:
                log_info = QString("%1[Fatal]:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"),msg);
                abort();
            }
                    //为了线程安全
            m_LogMutex.lock();
     
            QFile outFile(m_LogFile);
            outFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
            QTextStream ts(&outFile);
            ts << log_info << endl;
            outFile.close();
     
            m_LogMutex.unlock();
        }
        //默认调试级别为warning及以上才会写入日志文件,默认log文件名为程序启动时间命名的log文件
        void logInit(QString logFile = "",int logLevel = 0)
        {
            //#ifndef _DEBUG  //实现debug版本的时候,输出到终端;release版本的时候输出到日志文件
                if ((logLevel < 0) || (logLevel > 3))
                {
                    m_LogLevel = 1;
                }
                else
                {
                    m_LogLevel = logLevel;
                }
                
                if (!logFile.isEmpty())
                {
                    m_LogFile = logFile;
                }
     
                qInstallMessageHandler(customMessageHandler);
            //#endif
        }
    };
     
     
    #endif // LOG_H

      在main函数中增加以下代码:

    int main(int argc, char *argv[])
    {
        if (argc > 1)
        {//设置log文件名为可执行文件名,如果程序启动时有参数,则认为参数为调试级别,否则,按默认级别
            QT_LOG::logInit(QString(argv[0]).split(QDir::separator()).last().remove(".exe") + ".log",QString(argv[1]).toUInt());
        }
        else
        {
    
            QT_LOG::logInit(QString(argv[0]).split(QDir::separator()).last().remove(".exe") + ".log");
        }
    
        QApplication a(argc, argv);
        
    
        MainWidget w;
        w.show();
    
        return a.exec();
    }

    打印效果如下:

    2020-04-20 14:03:29:"无法连接到服务器Unknown error"
    2020-04-20 14:05:08:"127.0.0.1" 20121 500
    2020-04-20 14:05:08:From main thread:  0x2f50
    2020-04-20 14:05:08:Controller's thread is : 0x2f50
    2020-04-20 14:05:08:m_tcpThread: QThread(0xb6fd94)
    2020-04-20 14:05:08:start running: "127.0.0.1" 20121 500
    2020-04-20 14:05:08:"127.0.0.1" : 20121 QAbstractSocket::UnconnectedState
    2020-04-20 14:05:10:"无法连接到服务器Unknown error"
    2020-04-20 14:05:26:"20121:erro:The remote host closed the connection"
    2020-04-20 14:05:26:"127.0.0.1" :: 20121
  • 相关阅读:
    robotframework笔记9
    robotframework笔记8
    Spring预处理
    WebStrom快捷键
    json死循环问题
    java线程与缓存
    oss文件删除策略
    Eclipse自动编译问题
    将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)
    将 JAR 转为 EXE – JSMOOTH 的使用教程(第二期)(转载)
  • 原文地址:https://www.cnblogs.com/Joezhang433/p/12737589.html
Copyright © 2020-2023  润新知