要解决ulog_tag_lvl_filter_set()函数无法按模块(如drv.xxx)过滤日志的问题,可尝试以下方案:
drv.*这样的通配符过滤模块。 // 尝试为每个具体模块单独设置过滤(效率低)
ulog_tag_lvl_filter_set("drv.uart", ULOG_LVL_NONE);
ulog_tag_lvl_filter_set("drv.i2c", ULOG_LVL_NONE);
// ... 添加所有需要过滤的模块通过添加自定义过滤器实现模块级过滤:
#include // for strncmp()
static int ulog_module_filter(rt_uint32_t level, const char *tag) {
// 过滤所有以 "drv." 开头的标签
if (strncmp(tag, "drv.", 4) == 0) {
return 1; // 返回 1 表示丢弃日志
}
return 0; // 返回 0 表示保留日志
}
void setup_log_filter() {
// 添加自定义过滤器
ulog_filter_add(ulog_module_filter);
} drv.xxx日志且无通配符支持。LOG_D("drv.uart", "message"))。#define LOG_TAG "drv.uart"
#define LOG_LVL ULOG_LVL_NONE // 强制关闭该模块日志
#include # 以 RT-Thread env 工具为例
pkgs --upgradeulog_tag_lvl_filter_set()中增加通配符处理逻辑(需修改 ulog 核心代码)。优先尝试自定义过滤器(方案2),它灵活且无需修改每个模块:
// 添加过滤器后,所有 drv.xxx 日志将被丢弃
setup_log_filter();此方法在日志输出前直接拦截,高效简洁,适合动态过滤多个模块。
注意:
ULOG_LVL_NONE在部分 ulog 版本中可能需替换为0或ULOG_LVL_SILENT,请根据实际宏定义调整。
举报
更多回帖