在C++中,没有事实上的标准日志记录工具。根据我的经验,商店也会推出自己的产品。然而,当试图创建可重用的软件组件时,这会产生一些问题。如果您的系统中的一切都依赖于日志组件,这将降低软件的可重用性,基本上会迫使任何下游项目使用您的日志框架以及他们真正想要的组件。
IOC (依赖注入)并不能真正解决这个问题,因为您的组件需要依赖于日志记录抽象。日志记录组件本身可能会添加对文件I/O、触发机制和其他可能不需要的依赖关系的依赖关系。
向您的专有日志记录框架添加依赖项是否会牺牲组件的可重用性?
我在Java中读取参数化日志记录,据说它在执行延迟计算时使用参数化日志记录而不是级联。
所以而不是
logger.debug("My text is" + x);
用途:
logger.debug("My text is {}", x);
如果只将跟踪级别设置为info日志,那么为什么在第一个场景中会发生连接呢?
另外,如果我在日志中有一个耗时的函数,就可以说它使用:
logger.debug("My text is {}", () -> compute());
而不是
logger.debug("My text is {}"
我有一些相对较大的遗留方法,我想进行重构。它符合Michael Feather的"Working Effectively With Legacy Code“中指定的"Bulleted method”类型,因此它可以以相当直接的方式被分成几个连续的方法。但是它的每个连续步骤都会输出一些日志消息,并且形成该消息需要比该步骤本身多得多的数据。所以当我尝试提取方法时,我最终得到的方法有,比如说,6个参数。如果我删除了这些日志语句,我的方法将只有一个参数。所以我实际上不能重构任何东西。而且我不被允许删除日志语句。
方法的一部分看起来像这样:
// much of code before