ZBLOG

9.6. Filters eProsima Fast DDS logging module allows for log entry filtering when consuming the logs, so that an application execution output can be limited to specific areas of interest. Beside the Verbosity Level, Fast DDS provides three differ...

这段文字详细介绍了eProsima Fast DDS日志模块的过滤功能,允许用户根据特定条件来筛选日志条目,从而更好地控制应用程序的输出。以下是对每个部分的解释:

日志过滤器

eProsima Fast DDS提供了三种不同类型的日志过滤功能,以便在消费日志时可以限制输出到特定感兴趣的领域。这些过滤器按顺序应用,包括:

  1. 类别过滤(Category Filtering)
  2. 文件名过滤(File Name Filtering)
  3. 内容过滤(Content Filtering)

需要注意的是,这些过滤器按照上述顺序进行应用,即文件名过滤仅适用于与类别过滤模式匹配的条目,而内容过滤则只适用于同时与类别和文件名过滤模式匹配的条目。

9.6.1 类别过滤

通过使用正则表达式,可以根据日志条目的类别组件进行筛选。在每次准备消费一个条目时,都会使用std::regex_search()来应用类别过滤。要设置类别过滤,可以使用成员函数Log::SetCategoryFilter()。示例代码如下:

// 使用正则表达式设置筛选
Log::SetCategoryFilter(std::regex("(CATEGORY_1)|(CATEGORY_2)"));

// 这些将被消费
EPROSIMA_LOG_ERROR(CATEGORY_1, "First log entry");
// 这些也将被消费
EPROSIMA_LOG_ERROR(CATEGORY_2, "Second log entry");
// 这些将不会被消费
EPROSIMA_LOG_ERROR(CATEGORY_3, "Third log entry");

上面的示例会产生以下输出:

2020-05-27 15:07:05.771 [CATEGORY_FILTER_1 Error] First log entry -> Function main
2020-05-27 15:07:05.771 [CATEGORY_FILTER_2 Error] Second log entry -> Function main

9.6.2 文件名过滤

同样,可以根据文件上下文组件进行筛选,使用正则表达式来定义需要匹配的文件名。要启用文件名报告并设置文件名滤波器,可以如下操作:

// 文件:example.cpp

// 启用文件名和行号报告
Log::ReportFilenames(true);

// 设置正则表达式以使文件名必须匹配"example"
Log::SetFilenameFilter(std::regex("example"));
// 将被消费
EPROSIMA_LOG_ERROR(CATEGORY, "First log entry");

// 设置正则表达式以使文件名必须匹配"other"
Log::SetFilenameFilter(std::regex("other"));
// 将不会被消费
EPROSIMA_LOG_ERROR(CATEGORY, "Second log entry");

该示例会生成如下输出:

2020-05-27 15:07:05.771 [CATEGORY Error] First log entry (example.cpp:50) -> Function main

注意:即使禁用了文件上下文组件,仍然会应用文件名滤波器。

9.6.3 内容过滤

可以根据消息组件进行内容筛选,同样使用正则表达式。通过调用Log::SetErrorStringFilter()函数来设置内容滤波器。例如:

// 设置正则表达式,使消息组件必须匹配"First"
Log::SetErrorStringFilter(std::regex("First"));
// 将被消费
EPROSIMA_LOG_ERROR(CATEGORY, "First log entry");
// 将不会被消费
EPROSIMA_LOG_ERROR(CATEGORY, "Second log entry");

该示例会生成如下输出:

2020-05-27 15:07:05.771 [CATEGORY Error] First log entry -> Function main

9.6.4 重置日志滤波器

可以通过调用Log::Reset()成员函数重置日志模块的所有滤波器。重置操作包含以下几项内容:

  • 将详细级别设置为 Log::Kind::Error
  • 禁用文件上下文组件。
  • 启用函数名称组件。
  • 清除所有已定义的滤波器。
  • 清除所有消费者,并根据CMake选项 LOG_CONSUMER_DEFAULT 恢复默认消费者。

总之,这一部分涵盖了如何使用不同类型的滤波器对eProsima Fast DDS日志记录进行精确控制,有助于开发者调试和监控系统状态,同时减少无关信息对重要信息处理过程中的干扰。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21497

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?