Apache Commons Logging的运行时发现算法有什么问题
Dave Syer(SpringSource)在他的博客中写道:
不幸的是,关于共享资源日志记录最糟糕的事情,以及使它在新工具中不受欢迎的原因,也是运行时发现算法。
为什么?其运行时发现算法存在什么问题?性能?
Dave Syer(SpringSource)在他的博客中写道:
不幸的是,关于共享资源日志记录最糟糕的事情,以及使它在新工具中不受欢迎的原因,也是运行时发现算法。
为什么?其运行时发现算法存在什么问题?性能?
为什么?其运行时发现算法存在什么问题?性能?
不,这不是性能,而是类加载器的痛苦。JCL 发现过程依赖于类装入器黑客在运行时查找日志记录框架,但这种机制会导致许多问题,包括意外行为、难以调试的类装入问题,从而导致复杂性增加。Ceki(Log4J,SLF4J和Logback的作者)在采用commons-logging API之前再次思考(其中还提到了JCL观察到的内存泄漏问题),很好地捕获了这一点。
这就是创建使用静态绑定的SLF4J的原因。
Ceki是SLF4J的作者,你可能会认为他的文章有偏见,但相信我,他们不是,他提供了很多参考(证据)来证明他的观点。
总结一下:
Commons logging是一个轻量级的日志记录立面,它位于重型日志记录API之上,可以是log4j,java.util.logging或其他受支持的日志记录API。
发现算法是公共日志记录用于确定您在运行时使用的日志记录 API,以便它可以通过其 API 将日志调用定向到底层日志记录 API。这样做的好处是,如果要创建执行日志记录的库,则不希望将库的用户绑定到任何特定的重度日志记录系统。代码的调用者可以通过log4j,java.util.logging等配置日志记录,共享资源日志记录将在运行时转发到该API。
公共记录的常见抱怨:
在复杂的类路径层次结构中感知到的更大的复杂性和不可预测性,没有任何可感知的好处,这使得共享资源日志记录的用户感到不安。鉴于这种选择可能强加给您,也不会让用户产生同情心。请参阅本文,了解反对使用共享资源日志记录的令人信服的论据。