为什么会使用以下的某个包而不是其他的呢?
- Java Logging(Java日志)
- Commons Logging(通用日志)
- Log4j
- SLF4j
- Logback
为什么会使用以下的某个包而不是其他的呢?
按api出现的时间顺序(就我所知):
logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
// Note that it's actually *more* efficient than this - see Huxi's comment below...
logger.debug("The entry is " + entry + ".");
}
请参考对问题“记录错误的最佳实践是什么?”的答案,特别是:
使用Commons Logging可能会存在一些潜在的类加载问题。
Log4J和SLF4J是由同一个人开发的,通过在Log4J中发现的问题进行学习。
Commons Logging概述解释了它存在的原因:在您无法控制底层日志框架的库代码中进行记录非常重要,这对于各种Apache项目非常重要,这些项目将链接到外部应用程序。但是,在您完全控制的内部IT项目中可能并不那么重要。
话虽如此,我和我认识的许多其他开发人员都会写入Commons Logging。原因是为了最小化心理负担:您可以更改项目或工作,而无需学习新的框架(前提是新的工作/项目也使用CL,并且/或者您可以说服他们转换到它)。
此外,围绕您使用的任何框架创建自己的包装器也有一定的价值。正如此处所描述的那样,我喜欢使用LogWrapper对象来提供自定义字符串化(重要),并最小化日志记录语句的视觉杂乱程度(不太重要)。
通常情况下,我会默认使用Log4J。
如果我不介意依赖于Java 1.4,我会使用Java Logging,但我仍然更喜欢使用Log4J。
如果我正在增强已经使用Commons Logging的东西,我会继续使用它。