这段文字详细介绍了eProsima Fast DDS日志模块的过滤功能,允许用户根据特定条件来筛选日志条目,从而更好地控制应用程序的输出。以下是对每个部分的解释:
日志过滤器
eProsima Fast DDS提供了三种不同类型的日志过滤功能,以便在消费日志时可以限制输出到特定感兴趣的领域。这些过滤器按顺序应用,包括:
- 类别过滤(Category Filtering)
- 文件名过滤(File Name Filtering)
- 内容过滤(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助手提供,问题来源于学员提问