1. 程式人生 > >Qt:重定向QDebug輸出到檔案,並附上日期

Qt:重定向QDebug輸出到檔案,並附上日期

介紹

程式碼比較簡單,就是一個函式,在main中呼叫即可

函式申明

void setDebugOutput(const QString &targetFilePath, const bool &argDateFlag = false);

函式實現

void setDebugOutput(const QString &rawTargetFilePath_, const bool &argDateFlag_)
{
    static QString rawTargetFilePath;
    static bool argDateFlag;

    rawTargetFilePath = rawTargetFilePath_;
    argDateFlag = argDateFlag_;

    class HelperClass
    {
    public
: static void messageHandler(QtMsgType type, const QMessageLogContext &, const QString &message_) { QString message; switch ( type ) { case QtDebugMsg: { message = message_; break
; } case QtWarningMsg: { message.append("Warning: "); message.append(message_); break; } case QtCriticalMsg: { message.append("Critical: "
); message.append(message_); break; } case QtFatalMsg: { message.append("Fatal: "); message.append(message_); break; } default: { break; } } QString currentTargetFilePath; if ( argDateFlag ) { currentTargetFilePath = rawTargetFilePath.arg( ( ( argDateFlag ) ? ( QDateTime::currentDateTime().toString("yyyy_MM_dd") ) : ( "" ) ) ); } else { currentTargetFilePath = rawTargetFilePath; } if ( !QFileInfo::exists( currentTargetFilePath ) ) { QDir().mkpath( QFileInfo( currentTargetFilePath ).path() ); } QFile file( currentTargetFilePath ); file.open( QIODevice::WriteOnly | QIODevice::Append ); QTextStream textStream( &file ); textStream << QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss" ) << ": " << message << endl; } }; qInstallMessageHandler( HelperClass::messageHandler ); }

注意:記得include需要的標頭檔案

函式使用

  • 不動態追加日期
setDebugOutput( "/Users/jason/desktop/log/all.log" );
  • 動態追加日期
setDebugOutput( "/Users/jason/desktop/log/%1.log", true );