log4j vs logback [关闭]

问题

我们在自制包装器后面使用log4j。我们现在计划使用它的更多功能。

我们应该更新到logback吗?

(我的意思是框架不是像SLF4J那样的外观)


#1 热门回答(170 赞)

Logback本机实现了SLF4J API。这意味着如果你使用的是logback,那么你实际上正在使用SLF4J API。理论上,你可以直接使用logback API的内部进行日志记录,但这是非常不鼓励的。记录器上的所有logback文档和示例都是根据SLF4J API编写的。

因此,通过使用logback,你实际上将使用SLF4J,如果由于任何原因你想切换回log4j,你可以在几分钟内完成,只需将slf4j-log4j12.jar拖放到类路径上即可。

从logback迁移到log4j时,仍需要将logback特定部分(特别是logback.xml配置文件中包含的部分)迁移到其log4j等效项,即log4j.properties。在向另一个方向迁移时,需要将log4j配置(即log4j.properties)转换为其等效的logback。有一个on-line tool。迁移配置文件所涉及的工作量远远超过在整个软件的源代码及其依赖项中传播的迁移记录器调用所需的工作量。


#2 热门回答(52 赞)

你呢?

为什么?Log4J基本上已被Logback弃用。

紧急吗?也许不会。

它没痛吗?可能,但它可能取决于你的日志记录语句。

请注意,如果你真的想要充分利用LogBack(或SLF4J),那么你真的需要写入proper logging statements。由于懒惰的评估,这将产生诸如更快的代码之类的优势,并且因为你可以避免守卫,所以代码行数更少。

最后,我强烈推荐SLF4J。 (为什么要用自己的立面重新创建轮子?)


#3 热门回答(37 赞)

在日志记录领域,有Facades(如Apache Commons Logging,slf4j甚至是Log4j 2.0 API)和实现(Log4j 1 2,java.util.logging,TinyLog,Logback)。

基本上你应该用slf4j IF替换你的自制包装,并且只有在你因某些原因不满意的情况下。虽然Apache Commons Logging并没有真正提供现代API,但slf4j和新的Log4j 2外观提供了这一点。鉴于相当多的应用程序使用slf4j作为包装器,使用它可能是有意义的。

slf4j提供了许多不错的API糖,就像slf4j docs中的这个例子:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
这是变量替代。 Log4j 2也支持这一点。

但是你需要知道slf4j是由QOS开发的,它也维护着logback。 Log4j 2.0在Apache Software Foundation中出现。在过去的三年里,一个充满活力和活跃的社区再次在那里成长。如果你欣赏Apache软件基金会完成的开源,并且你可能会重新考虑使用slf4j来直接使用Log4j 2。

请注意:

在过去log4j 1中,log4j 1没有被主动维护。但今天情况有所不同。 Log4j 2主动维护并几乎定期发布。它还包括许多现代功能和-imho-使一些事情比Logback更好。这有时只是一个品味问题,你应该得出自己的结论。

我写了一个关于Log4j 2.0新功能的快速概述:http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

在阅读时,你将看到Log4j 2受到Logback的启发,但也受到其他日志框架的启发。但代码库是不同的;它与Log4j 1几乎没有任何关系,而Logback则为零。这导致一些改进,例如Log4j 2使用字节流而不是字符串下的字符串。此外,重新配置时不会丢失事件。

Log4j 2可以比我知道的其他框架更快地记录:http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

而且用户社区似乎比Logbacks大得多:http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

所有人都表示最好的想法是选择最适合你想要实现的日志框架。如果我禁用生产环境中的日志记录并且只是在我的应用程序中执行基本日志记录,我就不会切换完整的框架。但是,如果你在日志记录方面做得更多,只需查看框架及其开发人员提供的功能。虽然你通过QOS得到了Logback的商业支持(我听说),目前还没有对Log4j 2的商业支持。另一方面,如果你需要进行审计日志记录并且需要异步appender提供的高性能,那么它很有意义。检查log4j 2。

请注意,尽管他们提供了所有的舒适,外墙总是吃一点性能。它可能根本不会影响你,但是如果你的资源很少,你可能需要保存你可以拥有的一切。

如果不能更好地了解你的要求,几乎不可能提出建议。只是:不要因为很多人切换而切换。切换只是因为你看到了它的价值。并且log4j已经死亡的论证不再计算了。它还活着,很热。
免责声明:我目前是Apache Logging Services的副总裁,也参与了log4j。