3、日志格式需要固定;
代码实现
使用函数**QtMessageHandler qInstallMessageHandler(QtMessageHandler);**来实现,是全局的;
参考说明文档首先定义并实现函数 MessWriteLog :
void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
日志等级:
-
qDebug:调试信息
-
qWarning:警告信息
-
qCritical:错误信息
具体实现:
//写日志功能
void MessWriteLog(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
//定义日志文件存放路径
QString logDir = QApplication::applicationDirPath() + “\RunLog\” + QDateTime::currentDateTime().toString(“yyyy_MM_dd”)+“\”;
QString logFile;
QDir curDir(logDir);
if(!curDir.exists(logDir))//如果路径不存在则创建
{
curDir.mkpath(logDir);
qDebug() << logDir;
}
static QMutex mutex;//互斥量
mutex.lock();
QString contextType;//日志类型
switch(type)
{
case QtDebugMsg:
logFile=logDir+“Debug”;
contextType = QString(“Debug”);
break;
case QtWarningMsg:
logFile=logDir+“Warning”;
contextType = QString(“Warning”);
break;
case QtCriticalMsg:
logFile=logDir+“Critical”;
contextType = QString(“Critical”);
break;
case QtFatalMsg:
logFile=logDir+“Fatal”;
contextType = QString(“Fatal”);
}
QString contextInfo = QString(“[%1: %2]”).arg(QString(context.file)).arg(context.line);//代码所在文件及行数
QString contextTime = QDateTime::currentDateTime().toString(“yyyy-MM-dd hh:mm:ss.mmm”);//当前时间
QString mess = QString(“%1: [%2] %3: %4”).arg(contextTime).arg(contextType).arg(contextInfo).arg(msg);//一行日志信息
QFile contextFile(logFile+“.log”);
contextFile.open(QIODevice::WriteOnly | QIODevice::Append);//以只写或追加方式打开文件
QTextStream contextStream(&contextFile);//定义文件流
contextStream << mess << “\r\n”;//将文件流写入文件
contextFile.flush();
contextFile.close();
mutex.unlock();//释放互斥量
}
main函数中调用:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qInstallMessageHandler(MessWriteLog);//安装消息处理程序
MainWindow w;
w.show();
return a.exec();
}
程序调用
-
MainWindow::MainWindow(QWidget *parent)
- QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//打印日志到文件中
qDebug(“This is a debug message”);
qWarning(“This is a warning message”);
qCritical(“This is a critical message”);
}
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
找小编(vip1024c)领取
.(img-WyvkpnKk-1721719755001)]
Mysql面试题汇总(一)
[外链图片转存中…(img-D0XbDtQH-1721719755001)]
Mysql面试题汇总(二)
[外链图片转存中…(img-J6kqaZyi-1721719755002)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-mLrCkocl-1721719755002)]
找小编(vip1024c)领取