【问题标题】:Is there a way to implement multiple independent logging systems with Boost.Log?有没有办法用 Boost.Log 实现多个独立的日志系统?
【发布时间】:2015-10-07 00:04:45
【问题描述】:

Boost.Log 使用全局单例“core”对象,所有日志消息都通过该对象传递。这样看来,在具有有效独立且可单独配置的日志堆栈的单独线程上拥有两个独立任务并不简单。

例如,假设 A 类和 B 类都调用 C 类,并且所有三个类都执行日志记录。但是,我希望将 A 类发起的工作记录到文件“a.log”中,并将 B 类发起的工作记录到文件“b.log”中。 在 Boost.Log 中是否有惯用的方法来实现此结果?

我的应用程序是动态链接 C++,基于 VC++ 2015/Windows 和 GCC 4.8.4/Ubuntu。

【问题讨论】:

    标签: c++ logging boost-log


    【解决方案1】:

    是的,Boost.Log 通过属性和过滤支持这个用例。基本上,您需要做的是有两个文件接收器 - 用于 a.log 和 b.log。在每个接收器中,您需要设置一个过滤器,它只会传递以特殊方式标记的日志记录 - 通过具有特殊属性值。然后将记录器添加到 A 类和 B 类,并确保记录器具有您在设置的过滤器中检查的具有不同值的特殊属性。

    这个场景是用 Boost.Log 中的channel loggers 实现的。通道记录器有一个名为“通道”的属性,用于标识日志记录的来源。您可以使用 lambda expressionscustom function 的“频道”属性构建过滤器。

    【讨论】:

    • 谢谢,这似乎是个好方法。 this answer 对另一个问题(也由@andrey 提出)结果证明与解决问题的方式几乎相同。我想我将能够按照您的建议实施我想做的事情。
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2011-10-26
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多