山东济南公司网站,国际物流公司网站,公司网站建设怎么选择,网站一键备案新建一个log.h
#ifndef LOG_H
#define LOG_H#include QFile
#include QTextStream
#include QDateTime
#include QMutex
#include QDir//选择屏幕打印还是输出到文件可以根据这个宏控制或者控制函数调用位置都可以
//#define _DEBUG
…新建一个log.h
#ifndef LOG_H
#define LOG_H#include QFile
#include QTextStream
#include QDateTime
#include QMutex
#include QDir//选择屏幕打印还是输出到文件可以根据这个宏控制或者控制函数调用位置都可以
//#define _DEBUG
//默认调试级别为warning即小于warning级别的都不会写入日志文件
//只有release版本的时候才会输出到日志debug版本正常输出到终端。
namespace QT_LOG
{
//默认文件名为当前时间命名的log文件
static int m_logLevel 1;
static QString m_logFile QString(./log/%1.log).arg(QDateTime::currentDateTime().toString(yyyyMMddhhmmss));
QMutex m_logMutex;void createLOG(){QString logFolderPath QDir::currentPath() /log;QDir logFolder(logFolderPath);if(!logFolder.exists()){logFolder.mkpath(logFolderPath);}
}void debugMsgHandler(QtMsgType type , const QMessageLogContext context , const QString msg)
{//设置输出日志级别小于该级别将不会写入日志文件默认是warning级别即debug信息不会写入日志文件if (type m_logLevel) {return;}QString log_info;switch (type){case QtDebugMsg:log_info QString(%1[Debug]:).arg(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss));break;case QtWarningMsg:return;log_info QString(%1[Warning]:).arg(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss));break;case QtCriticalMsg:log_info QString(%1[Critical]:).arg(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss));break;case QtFatalMsg:log_info QString(%1[Fatal]:).arg(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss));abort();case QtInfoMsg:log_info QString(%1[Info]:).arg(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss));break;}log_info QString(context.file) QString(context.line) QString(%1).arg(msg);//为了线程安全m_logMutex.lock();createLOG();QFile outFile(m_logFile);if (outFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {QTextStream ts(outFile);ts log_info Qt::endl;}outFile.close();m_logMutex.unlock();
}//默认调试级别为warning及以上才会写入日志文件默认log文件名为程序启动时间命名的log文件
void logInit(QString logFile , int logLevel 0)
{
#ifndef _DEBUG //实现debug版本的时候输出到终端release版本的时候输出到日志文件if ((logLevel 0) || (logLevel 3)) {m_logLevel 1;}else {m_logLevel logLevel;}if (!logFile.isEmpty()) {m_logFile logFile;}qInstallMessageHandler(debugMsgHandler);
#endif
}
}#endif // LOG_H在main.cpp使用
#include widget.h
#include QApplication
#include log.h //导入接口int main(int argc, char *argv[])
{QApplication a(argc, argv);QT_LOG::logInit(); //使用日志保存功能Widget w;w.show();return a.exec();
}