Qt日志输出到文件
Qt日志输出到文件#include <QApplication>#include <QLibraryInfo>#include "mainwindow.h"#include <QDateTime>#include <QDebug>#include <fstream>// std::ofstreamstd::ofstream g_Outpu
·
Qt日志输出到文件
#include <QApplication>
#include <QLibraryInfo>
#include "mainwindow.h"
#include <QDateTime>
#include <QDebug>
#include <fstream> // std::ofstream
std::ofstream g_OutputDebug;
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QString text;
switch(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;
default:
text = QString("Debug: ");
}
QString context_info = QString("F:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件信息L行数
QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
QString current_date = QString("(%1)").arg(current_date_time);
std::string message = qPrintable(QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(current_date).arg(msg));
g_OutputDebug << message << "\r\n"; // std::ofstream
// 解锁
mutex.unlock();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// Qt的一个宏,消除未使用变量的警告,无实际作用
// 定义为,#define Q_UNUSED(x) (void)x
Q_UNUSED( argc );
Q_UNUSED( argv );
QString strDir = QCoreApplication::applicationDirPath()+"/Log/";
QDir dir(strDir);
if(!dir.exists())
{
dir.mkdir(strDir);
}
//注册MessageHandler
qInstallMessageHandler(outputMessage); //注册MessageHandler
g_OutputDebug.open(qPrintable(strDir+QString(QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")))), std::ios::out | std::ios::trunc);
MainWindow w;
a.connect(&a,SIGNAL(lastWindowClosed()),&a,SLOT(qiut())); //这两句解决程序退出时崩溃,好像并没有什么卵用(#^.^#)
w.setAttribute(Qt::WA_QuitOnClose,true);
w.setWindowTitle(QString::fromLocal8Bit("中断缺陷检测"));
w.show();
return a.exec();
}
更多推荐



所有评论(0)