qt 调试打印 格式化输出、重定向等技巧
1 自定义消息处理器 qInstallMessageHandler
qInstallMessageHandler(myMsgOutput);
- 安装消息处理器
- 重定向到文件
- 指定文件最大大小
- 格式化输出
#include <qapplication.h>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QtMsgHandler>
#include <QMessageLogContext>
#include <QMutex>
LoggerManager::LoggerManager(QObject *parent) : QObject(parent)
{
qInstallMessageHandler(myMsgOutput);
}
void LoggerManager:: myMsgOutput(QtMsgType type, const QMessageLogContext &context, const QString& msg)
{
fprintf(stdout, "%s\n", msg.toLocal8Bit().constData());
fflush(stdout);
static QMutex mutex;
mutex.lock();
QString time=QDateTime::currentDateTime().toString(QString("[yyyy-MM-dd HH:mm:ss:zzz]"));
QString mmsg;
QFileInfo codefile(context.file);
QString codeFileName = codefile.fileName();
QString msgFormat = QString("%1\tfile:%2:%3 func:%4\n<<<<---\t%5--->>>\n").arg(time).arg(codeFileName).arg(context.line).arg(context.function).arg(msg);
switch(type)
{
case QtDebugMsg:
mmsg=QString("Debug %1").arg(msgFormat);
break;
case QtInfoMsg:
mmsg=QString("Info %1").arg(msgFormat);
break;
case QtWarningMsg:
mmsg=QString("Warning %1").arg(msgFormat);
break;
case QtCriticalMsg:
mmsg=QString("Critical %1").arg(msgFormat);
break;
case