您当前的位置: 首页 >  qt

龚建波

暂无认证

  • 3浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt使用QLoggingCategory管理打印

龚建波 发布时间:2020-07-15 23:47:34 ,浏览量:3

0.简介

QLoggingCategory在运行时表示某个日志记录类别(由字符串标识),可以将消息类别配置为启用或禁用。Qt有六种消息类型,四个普通的QtDebugMsg、QtInfoMsg、QtWarningMsg、QtCriticalMsg,外加两个特殊的QtFatalMsg和QtSystemMsg,一般操作四个普通的消息类型。

1.基本使用

头文件中使用宏声明

#include 
Q_DECLARE_LOGGING_CATEGORY(mylog)

源文件中使用宏定义

Q_LOGGING_CATEGORY(mylog, "mymodule.mylog")
//也可以加上初始日志级别
Q_LOGGING_CATEGORY(mylog, "mymodule.mylog", QtWarningMsg)

配置注意事项,日志记录类别字符串的命名(mymodule.mylog那一串)

  • 仅使用字母和数字。
  • 使用点将类别进一步划分为公共区域。
  • 避免类别名称:debuginfowarning,和critical
  • 带有qt前缀的类别名称仅保留用于Qt模块。

可以设置全局过滤规则,使用字符串匹配

(下面代码把宏定义时设置的Warning级别覆盖了,现在所有类别都会输出) 

QLoggingCategory::setFilterRules("mymodule.mylog*=true");

多个规则字符串用换行符分隔,每一行格式为: [.] = true|false 

多次调用这个函数的话会以最后一次为准,所以多个设置要么放到一个规则配置,要么单独对指定QLoggingCategory设置。

也可以安装过滤器

在这种情况下,将忽略所有过滤器规则

(参照文档示例,注意install一个无效的过滤器会使用默认的并返回,这样就拿到了默认的)

QLoggingCategory::CategoryFilter old_filter;
//除了指定的都用默认的过滤器
void new_filter_func(QLoggingCategory *category)
{
    if (qstrcmp(category->categoryName(), "mymodule.mylog") == 0)
        category->setEnabled(QtDebugMsg, true);
    else
        old_filter(category);
}

// ... ...
void main()
{
    old_filter=QLoggingCategory::installFilter(nullptr);
    QLoggingCategory::installFilter(new_filter_func);
}

使用方式

(可以用qCDebug、qCInfo、qCWarning、qCCritical来使用自己定义的QLoggingCategory)

//默认的QLoggingCategory或qt.xx来管理     
qDebug()            
关注
打赏
1655829268
查看更多评论
0.2385s