BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

Apache Log4j 2.0值得升级吗

| 作者 Matt Raible ,译者 夏雪 发布于 2014年8月5日. 估计阅读时间: 不到一分钟 | 道AI风控、Serverless架构、EB级存储引擎,尽在ArchSummit!

Apache软件基金会最近发布了Log4j 2.0通用版本,相比之前Log4j的1.x版本有了很大的性能提升。本版本的灵感来自于诸如Log4j 1.x和java.util.logging之类的已有日志解决方案,它是经过了数年的努力从头开始编写完成的。

Log4j 2.0引入了新的插件系统、对properties的支持、对基于 JSON配置的支持和配置的自动化重载。它支持很多已有的日志框架,包括SLF4J、Commons Logging、Apache Flum、Log4j 1.x,并提供了新的程序员API。

Apache Logging PMC成员Christian Grobmeier 在2012年12月率先报道了新的Log4j 2.0。他是这样描述流行的API的:

在以前,大家是这么写的:

if (logger.isDebugEnabled()) {
logger.debug("Hi, " + u.getA() + " " + u.getB()); 
}

log4j 2.0的团队对这种写法进行了思考和改进。现在你可以这么写了:

logger.debug("Hi, {} {}", u.getA(), u.getB());

Grobmeier接着阐述了API方面更多的改进,包括MarkersFlow Tracing。他还提到了插件架构的改进,配置的增强(使用热重载、JSON和properties),还有Log4j 2.0如何处理了Log4j 1.x的许多死锁问题。

Hacker News上,有许多针对JVM日志框架的抱怨。Ceki Gülcü(许多Java日志框架的作者,其作品包括Log4j、SLF4J和Logback)表达了他不喜欢Apache模型的原因。Gülcü仍然是一名社区成员,并持续从事着Apache Logging的PMC的工作。

在2013年7月,Grobmeier发表了另一篇标题为《Log4j 2:性能几近于疯狂》的文章。在这篇文章里,他对Remko Popma的“AsyncLoggers”产生的日志吞吐量大加赞赏,并讨论了它的日志吞吐量如何能够比其他框架多出了12倍。

我们谈到每秒超过18,000,000条的消息,而其他框架在同样的环境中只能达到1,500,000或者更少。

我看到下面这张图表,简直不敢相信。一定是哪里搞错了吧。我反复地检查。我亲自来测试。的确像图中一样,Log4j 2有着疯狂的速度。

你可以在Log4j的异步文档中找到更多的信息。

然而,并非所有人都觉得Log4j的异步特性有多么地了不起。FullContact的高级平台工程师Michael Rose写过一篇博客,名为《过度设计:Log4j2的AsyncAppender》。他总结说,这个特性并不值得使用:

我认为Log4j2的AsyncAppender虽然看上去很优雅,但不过是个好看的玩具,对于任何合理的应用来说它实际上并不像评估的那么突出。Log4j2的团队非常令人尊敬,但我真诚的希望他们更加专注于简单的、内聚的下一代Java日志框架,而不是把主要精力放在添加另外的日志框架上。

无论如何,Logback是SLF4J(构建类路径日志的实事标准)的原生实现,性能也完全合乎要求(特别是打开本地设置时)。它仍然是我对日志框架的第一选择。它使用起来很方便,而且我在使用过程中也从没有发现过什么问题。

如果没有其他方面的考虑,那就要像躲瘟疫那样躲着Log4j 1.x。在任何具有负载的系统中,你最终都会发现它会导致竞争问题。

Log4 1.x迁移到2.0

我最近把我的AppFuse应用从Log4j 1.x升级到了2.0,发现它很难从Maven dependencies上直接获取。至少,你得需要log4j-core JAR(它依赖于log4j-api)。如果你要用于网络应用,还需要依赖log4j-web。如果集成Velocity 1.7,还必须增加log4j-1.2-api。如果集成Spring,还必须增加log4j-jcl(因为它使用了commons-logging)。对于那些依赖了SLF4J的类库,必须包括log4j-slf4j-impl。如果集成Hibernate,还必须升级 JBoss Logging到3.2.0.Beta1

你可能需要把某些依赖中以前的Log4j依赖排除掉。如果你使用Maven,下面有个不错的命令,可以显示你可能需要排除的依赖。

mvn dependency:tree | grep log

我最后要做的一步是把log4j.xml文件重命名为log4j2.xml,并重构它们以匹配它新的配置

总结

新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。是否需要把当前Log4j升级到2.0或者将已有的日志解决方案换成Log4j 2.0呢?有的用户可能会找到充分的理由,有的也可能还找不到。

查看英文原文:Apache Log4j 2.0 - Worth the Upgrade?

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT