Boost.Log使用全局单例“core”对象,所有日志消息都通过该对象传递。看来,在具有有效独立且可单独配置的日志记录堆栈的单独线程上进行两个独立任务并不是直截了当的。
例如,假设类A和类B都调用类C,并且所有三个类都执行日志记录。但是,我希望将A类启动的工作记录到文件“a.log”,并将B类启动的工作记录到文件“b.log”。 在Boost.Log中有没有一种惯用的方法来实现这个结果?
我的应用程序是动态链接C ++,基于VC ++ 2015 / Windows和GCC 4.8.4 / Ubuntu构建。
答案 0 :(得分:1)
是的,Boost.Log通过属性和过滤支持这个用例。基本上,您需要做的是拥有两个文件接收器 - 用于a.log和b.log。在每个接收器中,您需要设置一个过滤器,该过滤器仅传递以特殊方式标记的日志记录 - 具有特殊属性值。然后将记录器添加到A类和B类,并确保记录器具有特殊属性,该属性具有您在已设置的过滤器中检查的不同值。
此方案在Boost.Log中使用channel loggers实现。通道记录器有一个名为“Channel”的属性,用于标识日志记录的来源。您可以使用带有lambda expressions的“渠道”属性或custom function来构建过滤器。