Java 日志记录与 Log4J [关闭]

Posted

技术标签:

【中文标题】Java 日志记录与 Log4J [关闭]【英文标题】:Java Logging vs Log4J [closed] 【发布时间】:2010-09-07 02:33:12 【问题描述】:

是否仍然值得将 log4j 库添加到 Java 5 项目中只是为了记录 让我们说一些具有一些不错的翻转设置的文件的例外情况。 还是标准的 util.logging 工具也能完成这项工作?

你怎么看?

【问题讨论】:

请参阅***.com/a/13144054/603516 了解要考虑的众多 log4j 1.2 锁定问题。 【参考方案1】:

我会说你可能对你描述的需求使用 util.logging 没问题。

要获得好的决策树,请查看Log4j vs java.util.logging

问题一: 您是否预计需要 Log4j 具有而 JUL 没有的任何智能处理程序,例如 SMTPHandler、NTEventLogHandler 或任何非常方便的 FileHandlers?

问题二: 您是否发现自己想要频繁切换日志输出的格式?您是否需要一种简单、灵活的方式来做到这一点?也就是说,你需要Log4j的PatternLayout吗?

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

如果您对上述任何问题的回答都是肯定的,请使用 Log4j。如果您对所有这些都做出肯定的回答,那么 JUL 将绰绰有余,而且它已经方便地包含在 SDK 中。

也就是说,现在几乎每个项目似乎都结束了,包括 log4j,只是因为其他一些库使用它。

【讨论】:

很棒的基于问卷的答案。根据需要各取所需。 Log4j vs java.util.logging 链接失效了 干杯 - 把它改成了一台回程机。【参考方案2】:

我建议您使用Simple Logging Facade for Java (SLF4J)。它支持包括 Log4J 在内的不同提供程序,并可用作 Apache Commons Logging 的替代品。

【讨论】:

Commons Logging 出了什么问题? @Bart van Heukelom 和评论支持者 - 阅读articles.qos.ch/thinkAgain.html @Stephen C:感谢您提供的信息,尽管我前段时间了解到这一点,现在我尽可能使用 SLF4J。 (顺便说一句,我的评论是一个真正的问题,而不是保守的评论) @Bart,Commons Logging 使用动态发现的包来使用。 SLF4J 使用(或曾经)需要后端的类来加载。【参考方案3】:

Log4j 已经存在了很长时间,并且运行良好。我没有科学研究来支持它,但根据我在大量客户中看到的情况,我认为它很容易成为使用最多的日志记录框架。它已经存在了很长时间,并没有被 Next Big Logging Framework 所取代,这说明了一些事情。

设置起来非常简单,并且易于学习基本的附加程序(输出)。有一整套可用的主机附加程序,包括:

    ConsoleAppender DailyRollingFileAppender ExternallyRolledFileAppender FileAppender JDBCAppender JMSAppender NTEventLogAppender RollingFileAppender SMTPAppender SocketAppender SyslogAppender TelnetAppender WriterAppender

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

请注意,除了 log4j 之外,我在使用 apache commons logging 时遇到了一系列类加载器问题。它仅适用于一个特定的应用程序,但我发现单独使用 log4j 更简单,而不是使用像公共日志这样的抽象层时提供的灵活性。

查看这篇文章 more details:

祝你好运!

【讨论】:

【参考方案4】:

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

【讨论】:

另外,它默认包含并且被Java本身使用(所以无论如何你都会拥有它!)【参考方案5】:

log4j 总体上是一个更好的包,并且没有 java.util.logging 包含的一些问题。我认为直接使用 log4j 比使用公共日志记录更容易。

【讨论】:

您能否更具体地了解一下 java.util.logging 的问题? 当然,比如记录同步方法的开销:参见github.com/playframework/playframework/issues/6958 和bugs.openjdk.java.net/browse/JDK-8077846【参考方案6】:

我建议使用Apache Commmons Logging 作为您的日志接口。这样,您就可以随时灵活地切换日志记录实现,而无需更改任何代码。

【讨论】:

【参考方案7】:

我会选择 log4j。 log4j 的可能性一点都没有过时!

【讨论】:

以上是关于Java 日志记录与 Log4J [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中处理日志记录

Java优雅的记录日志:log4j实战篇

slf4j+log4j在Java中实现日志记录

使用log4j记录日志

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

Java日志框架 -- LOG4J(Log4j入门案例日志级别Log4j组件(LoggersAppendersLayouts)配置文件内置日志记录自定义Logger)