Qt自带的日志重定向机制

简介: Qt自带的日志重定向机制
//Qt5开始提供了日志上下文信息输出,比如输出当前打印消息所在的代码文件、行号、函数名等。
//如果是release还需要在pro中加上 DEFINES += QT_MESSAGELOGCONTEXT 才能输出上下文,默认release关闭的。
//切记不要在日志钩子函数中再写qdebug之类的,那样就死循环了。
//日志重定向一般就三种处理
//1: 输出到日志文件比如txt文本文件。
//2: 存储到数据库,可以分类存储,以便相关人员查询分析。
//3: 重定向到网络,对方用小工具连接程序后,所有打印信息通过tcp发过去。
//日志重定向
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
void Log(QtMsgType type, const QMessageLogContext &context, const QString &msg)
#else
void Log(QtMsgType type, const char *msg)
#endif
{
    //加锁,防止多线程中qdebug太频繁导致崩溃
    static QMutex mutex;
    QMutexLocker locker(&mutex);
    QString content;
    //这里可以根据不同的类型加上不同的头部用于区分
    switch (type) {
        case QtDebugMsg:
            content = QString("%1").arg(msg);
            break;
        case QtWarningMsg:
            content = QString("%1").arg(msg);
            break;
        case QtCriticalMsg:
            content = QString("%1").arg(msg);
            break;
        case QtFatalMsg:
            content = QString("%1").arg(msg);
            break;
    }
    //加上打印代码所在代码文件、行号、函数名
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
    if (SaveLog::Instance()->getUseContext()) {
        int line = context.line;
        QString file = context.file;
        QString function = context.function;
        if (line > 0) {
            content = QString("行号: %1  文件: %2  函数: %3\n%4").arg(line).arg(file).arg(function).arg(content);
        }
    }
#endif
    //将内容传给函数进行处理
    SaveLog::Instance()->save(content);
}
//安装日志钩子,输出调试信息到文件,便于调试
void SaveLog::start()
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
    qInstallMessageHandler(Log);
#else
    qInstallMsgHandler(Log);
#endif
}
//卸载日志钩子
void SaveLog::stop()
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
    qInstallMessageHandler(0);
#else
    qInstallMsgHandler(0);
#endif
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
9月前
|
开发工具 git C++
Qt的简易日志库实现及封装
Qt的简易日志库实现及封装
|
9月前
|
Windows
Qt安装消息处理qInstallMessageHandler输出详细日志
Qt安装消息处理qInstallMessageHandler输出详细日志
129 0
|
10月前
|
Java C++
Qt+QtWebApp开发笔记(二):http服务器日志系统介绍、添加日志系统至Demo测试
上一篇使用QtWebApp的基于Qt的轻量级http服务器实现了一个静态网页返回的Demo,网页服务器很重要的就是日志,因为在服务器类上并没有直接返回,所以,本篇先把日志加上。
|
Shell
2>&1 &:后台运行将日志中的标准错误2重定向到标准输出1中
2>&1 &:后台运行将日志中的标准错误2重定向到标准输出1中
187 0
QT软件开发: QPlainTextEdit当做日志显示窗口
QT软件开发: QPlainTextEdit当做日志显示窗口
572 0
QT软件开发: QPlainTextEdit当做日志显示窗口
QT应用编程: QDebug输出重定向到日志文件
QT应用编程: QDebug输出重定向到日志文件
463 0
|
Java Spring
把Hybris安装时输出的日志重定向到一个本地文件中
把Hybris安装时输出的日志重定向到一个本地文件中
86 0
|
Shell
2>&1 &:后台运行将日志中的标准错误2重定向到标准输出1中
2>&1 &:后台运行将日志中的标准错误2重定向到标准输出1中
127 0
|
Windows
Qt日志库Log4Qt的使用,支持文件名/行号/函数名的log打印输出
Qt日志库Log4Qt的使用,支持文件名/行号/函数名的log打印输出
1217 0
|
IDE 开发工具 C++
Qt日志重定向qInstallMessageHandler,输出Log至文件及网络
Qt日志重定向qInstallMessageHandler,输出Log至文件及网络
856 0

推荐镜像

更多