Arm*_*yan 5 language-agnostic design-patterns
假设在启动时从配置文件加载应用程序的初始设置的典型方案.该应用程序还有一个记录器.记录器的参数(例如,详细程度,日志文件路径等)理想地也存储在配置文件中.然而,例如,还希望配置加载器记录关于参数加载的信息
试图加载参数LogVerbosity.参数不存在.使用默认值:4.
因此,我们看到两个组件之间存在循环依赖关系.配置加载程序需要一个即用型记录器,记录器需要配置参数来初始化自身.在我看来这是一个典型的问题,足以让它有规范的解决方案,但我无法找到任何东西.
当然,人们可以推出一些临时解决方案,但我对最佳行业实践感兴趣.
希望这个问题有道理.
我想说,规范的解决方案是:不要混合日志记录和配置!
想象一下配置文件解析触发了一个错误(但你还不知道!)。您更改配置文件以启用日志记录。现在解析不会触发错误,并且一切看起来都正确,直到您再次禁用日志记录......
因此:更一般地说,原则上,人们希望最大限度地减少调试基础设施(包括日志记录)给程序带来的干扰;在理想情况下,调试功能将与应用程序所做的任何事情正交,以避免导致 heisenbugs。将普通配置与日志配置混合已经违反了这一原则。
但从经验上来说,您可以看到著名的日志记录库是如何工作的:它们都有自己的配置文件,独立于应用程序中进行的任何配置,因此您可以更改日志记录行为,而无需干扰应用程序本身。因此,您可以重复应用程序的有问题的运行,仅更改其日志记录行为,希望不要做任何其他事情。这就是 Log4j 及其端口系列或已经提到的 nlog 的工作原理。
归档时间: |
|
查看次数: |
141 次 |
最近记录: |