Qt:重定向QDebug輸出到檔案,並附上日期
阿新 • • 發佈:2019-02-02
介紹
程式碼比較簡單,就是一個函式,在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 );