我可以从最终产品中删除Boost.log V2的所有效果吗?

时间:2017-03-21 14:31:14

标签: c++ logging boost

我正在为我们的软件开发选择一个日志系统。我们正在广泛使用Bo​​ost,因此显而易见的选项是boost.log V2

但在我选择将其用于我的团队之前,我有一些问题,我在文档中找不到答案:

1-我可以从生成的代码中完全删除它的效果吗?例如,假设我有这个代码,我需要它以这种方式进行调试:

 int main()
{
     for( int i=0;i<100;i++)
     {
         int j=doSomething(i);
         BOOST_LOG_TRIVIAL(trace) << << "I=2<<i <<" j="<<j;
      }
}

有没有办法在上面的代码中删除日志系统的效果,所以我不会因为使用它而失去任何性能?

2-我可以在添加严重性的同时向日志记录添加部分吗?我的代码有几个部分,我们随时都在处理一个部分。我希望能够设置日志记录来记录特定部分的数据,而不是整个应用程序,可能有几个部分,可能有数百个日志记录条目,需要根据我正在处理的部分进行过滤。

3-将不同的日志记录发送到不同的接收器的可能性,例如一些日志记录进入控制台而另一些日志记录进入文件?

1 个答案:

答案 0 :(得分:0)

  

我可以从生成的代码中完全删除它的效果吗?

如果你的意思是在编译阶段删除任何Boost.Log的使用(例如通过预处理器开关),那么不,Boost.Log不提供。您必须实现自己的支持,包括Boost.Log初始化的条件编译和您自己的日志记录宏,在编译时禁用日志记录时会扩展为空。

如果您只是在不删除编译时依赖关系的情况下完全禁用日志,那么您可以使用core::set_logging_enabledfilters。检查每个日志记录的条件仍然会有很小的性能成本,但不会生成日志记录。

  

我可以在添加严重性的同时向日志记录添加部分吗?

是的,您可以使用channels。您可以对通道名称应用过滤器,以选择要保留的消息和要抑制的消息。 Here是一个相关的答案。

  

将不同的日志记录发送到不同的接收器的可能性,例如一些日志记录进入控制台而另一些日志记录进入文件?

是的,再次,这可以通过渠道和过滤器来实现。请参阅上面链接的SO答案。