#include "logmessage.h"
#include <QDateTime.h>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
#include <QTextCodec>
QString CLogMessage::m_logPath;
QMutex CLogMessage::m_mutex;
CLogMessage::CLogMessage()
{
}
/**
* @brief LogMessage::install 重定向QT的消息输出
* @param log_path 指定输出log,NULL改变输出形式
*/
void CLogMessage::install(QString log_path)
{
m_mutex.lock();
m_logPath = log_path;
qInstallMessageHandler(logMessageOut);
m_mutex.unlock();
}
/**
* @brief LogMessage::uninstall。还原QT的消息输出
*/
void CLogMessage::uninstall()
{
m_mutex.lock();
qInstallMessageHandler(0);
m_mutex.unlock();
}
/**
* @brief LogMessage::logMessageOut
* @param type
* @param context
* @param msg
* @par 说明
* @code
* qDebug()//调试消息
* qInfo()//信息消息
* qWarning()//警告消息和可恢复的错误
* qCritical()//关键错误和系统错误
* qFatal()//致命错误
* @endcode
*/
void CLogMessage::logMessageOut(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
m_mutex.lock();
QByteArray localMsg = msg.toLocal8Bit();
QString strMsg("");
switch(type)
{
case QtDebugMsg:
strMsg = QString("Debug");
break;
case QtWarningMsg:
strMsg = QString("Warning");
break;
case QtCriticalMsg:
strMsg = QString("Critical");
break;
case QtFatalMsg:
strMsg = QString("Fatal");
break;
case QtInfoMsg:
strMsg = QString("Info");
break;
}
// 设置输出信息
QString message = QString("[%1]:{%2} File:%3 Line:%4 Function:%5 DateTime:%6")
.arg(strMsg).arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function)
.arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd")
);
// 输出至文件
QFile file(m_logPath);
if(true == file.open(QIODevice::ReadWrite | QIODevice::Append))
{
QTextStream stream(&file);
stream << message << "\r\n";
file.flush();
file.close();
}
else
{
// 转换到中文编码,用于控制台显示
QTextCodec *codec = QTextCodec::codecForName("GBK");
QByteArray encodedStr = codec->fromUnicode(message);
fprintf(stderr, "%s",encodedStr.data());
}
// 模仿qFatal
if(type == QtFatalMsg)
abort();
m_mutex.unlock();
}
qt qInstallMessageHandler 自定义消息输出示例
需积分: 0 60 浏览量
2023-10-12
23:14:45
上传
评论
收藏 4KB 7Z 举报
bugmoo
- 粉丝: 12
- 资源: 8
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈