使用logback而不是log4j是否有技术上的原因?

kx7yvsdv  于 2022-11-06  发布在  其他
关注(0)|答案(7)|浏览(162)

新项目是否应该使用logback而不是log4j作为日志框架?
或者换句话说:“logback比log4j好吗(把logback的SLF 4J-”特性“放在一边)?”

rkttyhzu

rkttyhzu1#

应使用SLF 4J +Logback进行日志记录。
它提供了简洁的特性,如参数化消息和(与通用日志记录相反的)Map诊断上下文(MDC、javadocdocumentation)。
使用SLF 4J使日志记录后端以一种相当优雅的方式进行交换。
此外,其他日志框架的SLF 4J supports bridging与您将使用的实际SLF 4J实现相对应,因此来自第三方软件的日志事件将显示在您的统一日志中--java.util.logging除外,它不能像其他日志框架那样桥接。
桥接jul在SLF 4JBridgeHandler的javadocs中进行了说明。
我在几个项目中使用SLF 4J +Logback组合有非常好的体验,而LOG4J的开发几乎停滞了。
SLF 4J还有以下缺点:

  • 它不支持varargs以保持与Java 1.5以下的兼容性
  • 它不支持同时使用参数化消息和异常。
  • 它不包含对LOG4J所具有的嵌套诊断上下文(NDC,javadoc)的支持。
zvokhttg

zvokhttg2#

我将在所有情况下使用slf4j进行日志记录。这允许您在部署时而不是代码时选择要使用的实际日志记录后端。
它允许我在旧的JVM中使用log4j,在1.5+ JVM中回登录,如果需要的话,还可以使用java.util.logging。

zc0qhyus

zc0qhyus3#

更能识别Java EE的回滚:
一般来说(从代码到文档),它要记住容器-多个应用程序如何共存,类加载器如何实现等。记录器的上下文,JNDI,JMX配置包括在内等。
从开发人员的Angular 看,Logback添加了参数化日志记录(无需使用if(logger.isDebugEnabled())来避免字符串连接开销)
Log4j -唯一的巨大优势是旧的JVM支持,小型(IMO)NDC(仅Logback MDC),一些扩展。例如,我为Log4j编写了configureAndWatch扩展,Logback没有这样的东西

gmxoilav

gmxoilav4#

最初的log4j和logback是由同一个人设计和实现的。
几个开源工具已经使用了SLF4J。我没有看到这个工具有任何明显的缺陷。所以除非你在你的代码库中有很多log4j的扩展,否则我会继续使用logback。

r9f1avp5

r9f1avp55#

我认为您的决定应该归结为使用log4j或Jakarta Commons Logging之间的同一个决定-您是否正在开发一个将包含在其他应用程序中的库?如果是这样,那么强迫您的库的用户也使用您选择的日志库似乎是不公平的。
如果答案是否定的,我会选择添加起来更简单、使用起来更方便的方法。听起来logback和log4j一样具有可扩展性和可靠性,所以如果使用起来很方便,那就继续使用吧。

laximzn5

laximzn56#

我对SLF 4J并不熟悉,而且我只是简单地看了一下logback,但我想到了两件事。
首先,你为什么要把一个工具排除在考试之外呢?我认为保持开放的心态并检查所有的可能性以选择最好的工具是很重要的。
第二,我认为在某些项目中,一种工具比另一种工具更好,而在不同的项目中,情况可能正好相反。我不认为一种工具总是比另一种工具更好。毕竟,没有银
回答你的问题-是和不是。这取决于项目,以及团队对一个工具的熟悉程度。如果整个团队都很适应log4j,我不会说“不要使用log4j”,它满足了所有的需求,并且logback没有提供我们完成任务所需的任何东西。

相关问题