Qt::日志处理
// 自定义消息处理 qInstallMessageHandler(comfunc::myMessageOutput);
void comfunc::myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { //修改日志消息内容 QString logMsg = msg; if(logMsg.simplified().length() == 0) //过滤掉空消息 { return; } if(logMsg[0] =='\"' && logMsg[logMsg.size()-1] == '\"') { logMsg = logMsg.mid(1,logMsg.length()-2);//去除消息中的冒号 } QString logType; switch(type) { case QtDebugMsg: logType = QString("DEBUG"); break; case QtInfoMsg: logType = QString("INFO"); break; case QtWarningMsg: logType = QString("WARN"); break; case QtCriticalMsg: logType = QString("ERROR"); break; case QtFatalMsg: logType = QString("Fatal"); break; default: logType = QString("UNKNOWN"); break; } QString current_Date_Time = QDateTime::currentDateTime().toString("MM/dd hh:mm:ss.zzz"); QString message = QString("%1|%2|%3|%4|%5\n").arg(current_Date_Time).arg(logType).arg(context.function).arg(context.line).arg(logMsg); //生成日志文件 static QMutex mutex; //添加互斥锁,便于在多线程情况的使用 mutex.lock(); //加锁 QDir::setCurrent(QCoreApplication::applicationDirPath());//设置当前目录 static QString LogName = "./mylog.log"; QFile file(LogName); if(file.size() >= 100*1024*1024)//如果日志文件超过100M,则另写一个 { file.rename(LogName, LogName+QDateTime::currentDateTime().toString("_yyyyMMddhhmmss.log")); file.setFileName(LogName); } if(file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { QTextStream text_stream(&file); text_stream << message; file.flush();//将任何缓存数据刷新到文件中 file.close(); } mutex.unlock(); //解锁 }