Java Logging与Log4J [关闭]


134

仍然值得将log4j库添加到Java 5项目中只是为了记录日志,例如具有一些不错的过渡设置的文件异常。还是标准的util.logging工具也可以完成这项工作?

你怎么看?


有关要考虑的众多log4j 1.2锁定问题,请参见stackoverflow.com/a/13144054/603516
Vadzim

Answers:


115

我想说您可能对util.logging满足您所描述的需求。

对于一个好的决策树,看看Log4j vs java.util.logging

问题一:您是否期望Log4j具有JUL所不具备的任何聪明处理程序,例如SMTPHandler,NTEventLogHandler或任何非常方便的FileHandler?

问题二:您是否看到自己想要频繁切换日志输出的格式?您会需要一种简单,灵活的方法吗?换句话说,您是否需要Log4j的PatternLayout?

问题三:在将应用程序编译并部署到生产环境中之后,您是否肯定需要更改应用程序中复杂日志记录配置的功能?您的配置听起来是否像是“来自该类的严重消息通过电子邮件发送给支持人员;来自一类类的严重消息被记录到我们服务器上的系统日志守护进程中;来自另一类类的警告消息被记录了下来到网络驱动器A上的文件;然后来自任何地方的所有消息都记录到网络驱动器B上的文件中?”?而且您是否看到自己每两天进行一次调整?

如果您可以对上述任何一个问题回答“是”,请使用Log4j。如果您对所有人都回答肯定的话,JUL将绰绰有余,并且已经很方便地包含在SDK中。

就是说,这些天几乎所有项目都似乎已经结束,包括log4j,仅仅是因为其他一些库正在使用它。


1
基于问卷的出色答案。给每个人自己根据需要。
HopeKingKing

43

我建议您使用Java简单日志记录外观(SLF4J)。它支持包括Log4J在内的各种提供程序,并且可以替代Apache Commons Logging。


6
Commons Logging有什么问题?
Bart van Heukelom

5
@Bart面包车Heukelom和评论upvoters -读articles.qos.ch/thinkAgain.html
斯蒂芬ç

4
@Stephen C:感谢您提供信息,尽管我前一段时间了解到这一点,并且现在可以使用SLF4J。(顺便说一句,我的评论是一个真实的问题,而不是保守的说法)
Bart van Heukelom

1
@ Bart,Commons Logging使用动态发现要使用的包。SLF4J的使用(或过去)需要后端中的类完全加载。
托尔比约恩Ravn的安德森

21

Log4j已经存在很长时间了,并且运行良好。我没有科学研究来支持它,但是基于我在大量客户端上所看到的,很容易看到日志框架比我使用的日志框架更多。它已经存在了很长一段时间,并没有被Next Big Logging Framework所取代,后者有所说明。

设置起来非常简单,而且学习基本的附加器(输出)也很简单。有一个完整的主机附加程序可用,包括:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

再加上其他。编写自己的附加程序也不难。此外,每个附加程序都具有很大的灵活性,可让您专门控制日志中的输出。

需要注意的是,除了使用log4j之外,当我使用apache commons日志记录时,我还遇到了一系列的类加载器问题。它仅用于一个特定的应用程序,但是我发现单独使用log4j较简单,而不是像使用commons日志记录那样使用抽象层时具有灵活性。

请参阅本文以获取 更多详细信息

祝好运!


17

java.util.logging提供了一个全面的日志记录程序包,而没有其他一些程序包带来的额外负担。


5
另外,它是默认包含的并由Java本身使用(因此无论如何您都会拥有它!)
有QUIT-Anony-Mousse 2012年



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.