首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

迈出slf4j和logback,直接晋级log4j 2

2013-08-10 
跨过slf4j和logback,直接晋级log4j 2今年一直关注log4j 2,但至今还没有出正式版。等不及了,今天正式向大家

跨过slf4j和logback,直接晋级log4j 2

今年一直关注log4j 2,但至今还没有出正式版。等不及了,今天正式向大家介绍一下log4j的升级框架,log4j 2。

?

log4j,相信大家都熟悉,至今对java影响最大的logging系统,至今仍有很多系统在使用log4j,但毕竟这个版本出的太早,Java都从1.2到7.0了,log4j怎么总是在1.2的版本呢?

不得承认,写log4j的那个人确实很牛,之后又写了slf4j和logback作为log4j 1.x的替代品。但是,最终,原作者可能发现,还是log4j的江山大,所以,最终决定重写log4j,因此诞生了log4j 2。哈哈,以上都是个人杜撰。

?

综合比较log4j和slf4及logback组合,log4j 2具有更好的性能,特别是在多线程的程序中,以及logback和slf4j的种种优点,因为作者已经非常熟悉logging系统,因此,log4j 2注定将成为又一个著名的日志组件。

?

下面简单介绍一下,log4j 2的一些新特性。原文在这里。

为什么要Log4j 2?(原作者自己所写,本人做了简单翻译)

Log4j 1.x has been widely adopted and used in many applications. However, through the years development on it has slowed down. It has become more difficult to maintain due to its need to be compliant with very old versions of Java. Its alternative, SLF4J/Logback made many needed improvements to the framework. So why bother with Log4j 2? Here are a few of the reasons.

Log4j1.x已经被广泛应用到各个系统及框架中。然后,1.x毕竟太古老,代码很久没有更新。目前,Log4j 1.x的代码已经很难维护,因为它依赖于很多Jdk老版本的api。作为Log4j 1.x的替代品,SLF4J/Logback已经对日志系统做了很大的改进,那么,为什么我们还需要Log4j 2?

?

Log4j 2被设计成对安全审计有用的日志框架。在Logback框架中,当输出日志产生异常时,从来不会告诉被调用方,而log4j 2,这个将是可配置的。

?

Log4j 2使用了新一代的基于LMAX Disruptor的无锁异步日志系统。在多线程的程序中,异步日志系统吞吐量比Log4j 1.x和logback高10倍,而时间延迟更低(这个比较吸引人)

?

Log4j 2使用插件机制,更灵活。扩展appenders,Filters,Layouts,Lookups和Pattern Converters将变得更加简单,而不用去更改任何Log4j本身。

?

因为插件机制,在配置文件中,不再需要指定定制的类名称。

?

(下面这些个人感觉是一些在logback上面的小改进,我就不翻译了)

Log4j 2在底层尽可能使用了Java5提供的对并发及锁支持的工具类。Lo4j 1.x有死锁的bug。Logback中修复了log4j 1.x的很多bug,但是,logback中的有很多类采用同步机制(这种机制导致性能下降)。

?

?11、It is an Apache Software Foundation project following the community and support model used by all ASF projects. If you want to contribute or gain the right to commit changes just follow the path outlined at?Contributing

?

另外,作者针对性能做了专门介绍:

One of the often-cited arguments against logging is its computational cost. This is a legitimate concern as even moderately sized applications can generate thousands of log requests. Much effort was spent measuring and tweaking logging performance. Log4j claims to be fast and flexible: speed first, flexibility second.

决定日志系统好坏的一个重要参数就是它的性能指标。这很重要,因为即使一个中等规模的应用程序每秒产生的日志都数以千计。我们花费了大量精力在测量和调整log4j 2的性能。log4j声称,日志框架应该很快,并且要求灵活:速度第一,灵活性第二。

原文

?

?

?

对这类话题感兴趣?欢迎发送邮件至donlianli@126.com关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。更多我之前的文章,可以访问?我的空间

?

1 楼 sgq0085 昨天   log4j2是由于社区觉得log不能总放在一家公司里面,所以由社区牵头开发的 2 楼 arong 昨天   期待... 3 楼 闫老三 昨天   路过~看看 4 楼 irfen 昨天   看到最后发现碰到老乡了~ 5 楼 donlianli 昨天   irfen 写道看到最后发现碰到老乡了~
哈哈。 6 楼 Shen.Yiyang 昨天   话说slf4j可以和log4j2集成吗,因为很多第三方库里日志的用法,都是用slf4j的api,通过集成,让其他实现去记录日志。 7 楼 JonathanWang 24 小时前   这个可以有 8 楼 kentkwan 20 小时前   其实 SLF4J 的目的是为所有日志框架提供一个facade 所以slf4j跟log4j logback等是不等价的 slf4j也一定会为log4j 2提供支持的 所以继续用slf4j就对了 logback的性能还是比log4j要高的 9 楼 windshome 16 小时前   希望Log4j升级以后别再让每个类写这样的语句了,这条语句真的不知所云。

private static final Logger log = LoggerFactory
.getLogger(WriteCompletionHandler.class);


再有就是appender和日志给应用带来性能瓶颈的问题,也应该给解决了。 10 楼 donlianli 16 小时前   kentkwan 写道其实 SLF4J 的目的是为所有日志框架提供一个facade 所以slf4j跟log4j logback等是不等价的 slf4j也一定会为log4j 2提供支持的 所以继续用slf4j就对了 logback的性能还是比log4j要高的
这个已经有了。如果要考虑性能的话,个人觉得还是直接使用log4j2会更高点。 11 楼 bevis.cn 4 小时前   这一点比较牛B
引用Log4j 2被设计成对安全审计有用的日志框架。在Logback框架中,当输出日志产生异常时,从来不会告诉被调用方,而log4j 2,这个将是可配置的。 12 楼 windshome 2 小时前   合着还是要这么写啊,不能去掉啊:

static Logger logger = LogManager.getLogger(MyApplication.class.getName());
.....

热点排行