是否有办法实现多个独立的日志系统与Boost.Log

Is there a way to implement multiple independent logging systems with Boost.Log?

本文关键字:日志 系统 Log Boost 独立 实现 是否      更新时间:2023-10-16

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

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

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

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

这个场景是用Boost.Log中的通道记录器实现的。通道日志记录器有一个名为"channel"的属性,它标识日志记录的来源。您可以使用带有lambda表达式或自定义函数的"Channel"属性来构造过滤器。