2015-10-07 55 views
1

Boost.Log使用全局单例“core”所有日志消息通过的对象。看来,在单独的线程上有两个独立的任务并不是直接的,它们具有独立且可独立配置的日志堆栈。有没有办法使用Boost.Log实现多个独立的日志记录系统?

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

我的应用程序是动态链接C++,建立在VC++ 2015/Windows和GCC 4.8.4/Ubuntu上。

回答

1

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

此方案在Boost.Log中使用channel loggers实施。通道记录器有一个称为“通道”的属性,用于标识日志记录的来源。您可以使用“频道”属性lambda expressionscustom function构建过滤器。

+0

谢谢,这似乎是一个很好的方法。 [这个答案](http://stackoverflow.com/a/31442245/385094)到一个不同的问题(也被@andrey)证明与攻击问题的方法大致相同。我想我可以根据你的建议实施我想要做的事情。 – Boinst

相关问题