Qt提供了qDebug、qWarning、qCritical、qFatal、qInfo等不同类别的日志记录函数
qlogging.h中声明了一个日志处理函数
typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
通过qInstallMessageHandler可以安装自己的日志处理器
QtMessageHandler qInstallMessageHandler(QtMessageHandler);
默认的日志处理器是将msg输出到stderr标准错误,如果我们想记录到日志文件中,可以参考下面代码示例:
#include <QDateTime>
void myLogHandler(QtMsgType type, const QMessageLogContext & ctx, const QString & msg){
char szType[16];
switch (type) {
case QtDebugMsg:
strcpy(szType, "Debug");
break;
case QtInfoMsg:
strcpy(szType, "Info");
break;
case QtWarningMsg:
strcpy(szType, "Warning");
break;
case QtCriticalMsg:
strcpy(szType, "Critical");
break;
case QtFatalMsg:
strcpy(szType, "Fatal");
}
QString strLog = QString::asprintf("[%s] [%s]:%s [%s:%d - %s]\n",
QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toLocal8Bit().data(),
szType,
msg.toUtf8().data(),
ctx.file,ctx.line,ctx.function);
QString strLogFilePath = QCoreApplication::applicationDirPath() + "/" +
QCoreApplication::applicationName() + ".log";
FILE* fp = fopen(strLogFilePath.toLocal8Bit().data(), "a");
if (fp){
fseek(fp, 0, SEEK_END);
if (ftell(fp) > (2 << 20)){
fclose(fp);
fp = fopen(strLogFilePath.toLocal8Bit().data(), "w");
}
}
if (fp){
fputs(strLog.toLocal8Bit().data(), fp);
fclose(fp);
}
}
#include <QApplication>
#include <QLabel>
#include <QDebug>
int main(int argc,char* argv[]){
QApplication app(argc, argv);
qInstallMessageHandler(myLogHandler);
qDebug("app start!");
QLabel label("开启Qt学习之旅");
QFont font = label.font();
font.setPixelSize(48);
label.setFont(font);
label.setAlignment(Qt::AlignCenter);
label.setStyleSheet("background-color: black; color: green;");
label.setGeometry(200,200,400,300);
label.show();
qDebug() << label.text();
qDebug() << label.geometry();
app.exec();
qDebug("app end!");
}
appname.log文件中打印如下:
[2017-11-25 17:59:54.245] [Debug]:app start! [..\core01\main.cpp:66 - int main(int, char**)]
[2017-11-25 17:59:54.298] [Debug]:"开启Qt学习之旅" [..\core01\main.cpp:77 - int main(int, char**)]
[2017-11-25 17:59:54.298] [Debug]:QRect(200,200 400x300) [..\core01\main.cpp:78 - int main(int, char**)]
[2017-11-25 17:59:55.788] [Debug]:app end! [..\core01\main.cpp:82 - int main(int, char**)]