我正在为我们的软件开发选择一个日志系统。我们正在广泛使用Boost,因此显而易见的选项是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-将不同的日志记录发送到不同的接收器的可能性,例如一些日志记录进入控制台而另一些日志记录进入文件?
答案 0 :(得分:0)
我可以从生成的代码中完全删除它的效果吗?
如果你的意思是在编译阶段删除任何Boost.Log的使用(例如通过预处理器开关),那么不,Boost.Log不提供。您必须实现自己的支持,包括Boost.Log初始化的条件编译和您自己的日志记录宏,在编译时禁用日志记录时会扩展为空。
如果您只是在不删除编译时依赖关系的情况下完全禁用日志,那么您可以使用core::set_logging_enabled或filters。检查每个日志记录的条件仍然会有很小的性能成本,但不会生成日志记录。
我可以在添加严重性的同时向日志记录添加部分吗?
是的,您可以使用channels。您可以对通道名称应用过滤器,以选择要保留的消息和要抑制的消息。 Here是一个相关的答案。
将不同的日志记录发送到不同的接收器的可能性,例如一些日志记录进入控制台而另一些日志记录进入文件?
是的,再次,这可以通过渠道和过滤器来实现。请参阅上面链接的SO答案。