相关疑难解决方法(0)

C++如何在Boost Global Logger上设置严重性过滤器

我已经尝试了几天来创建一个Boost Global Logger以便在整个应用程序中使用,但我似乎无法在Global Logger中设置严重性级别.

重要:

请看下面安德烈的回答......它被标记为步骤(a)和(b)但我仍然没有做到正确!


在这里的Boost文档中

...拥有一个或多个全局记录器以便在需要时在每个地方轻松访问它们会更方便.在这方面,std :: cout就是这种记录器的一个很好的例子.

该库提供了一种声明全局记录器的方法,可以像std :: cout一样访问它们.实际上,此功能可用于任何记录器,包括用户定义的记录器.声明了全局记录器后,可以确保从应用程序代码的任何位置对此记录器实例进行线程安全访问.该库还保证全局记录器实例即使跨模块边界也是唯一的.这允许甚至在可以编译到不同模块中的仅头部组件中采用日志记录.


无论您用于声明记录器的宏如何,都可以使用logger标记的静态get函数获取记录器实例:

src::severity_logger_mt< >& lg = my_logger::get();
Run Code Online (Sandbox Code Playgroud)

我从Boost Logger大师安德烈发现,我的问题是严重性类型不匹配.

您已使用默认模板参数实例化severity_logger_mt,因此严重性级别属性的类型为int.您的枚举值将转换为int并发送到日志记录核心.您尚未设置任何接收器,因此默认使用默认接收器.接收器尝试从日志记录中提取严重性级别属性值,但未能这样做,因为它期望严重性级别为boost :: log :: trivial :: severity_level类型.在失败之后,接收器回退到boost :: log :: trivial :: severity_level :: info严重性.

如果要将枚举用于严重性级别,则必须:

------------------------------------(现在,这是答案!!!!) - -------------------------------------

(a)在记录器模板参数中指定它

(b)使用知道你的枚举的格式化程序设置一个接收器.

但我无法弄清楚如何做到这一点,因为即使在尝试遵循他的指示之后,严重性级别看起来像接收器仍然会回落到boost :: log :: trivial :: severity_level :: info severity.任何人都可以帮我弄清楚如何在我的全局记录器中正确设置严重性?这是代码:

HEADER

#include <boost/log/trivial.hpp>
#include <boost/log/sources/global_logger_storage.hpp>

enum severity_level
{
    normal,
    warning,
    error,
    critical
};

BOOST_LOG_GLOBAL_LOGGER(logger, boost::log::sources::severity_logger_mt< severity_level >)
Run Code Online (Sandbox Code Playgroud)

CPP

#include "GlobalLogger.h"

#include <boost/log/expressions/formatters/date_time.hpp> …
Run Code Online (Sandbox Code Playgroud)

c++ logging boost

5
推荐指数
1
解决办法
4088
查看次数

标签 统计

boost ×1

c++ ×1

logging ×1