各种日志简介
在介绍log4j2之前先简单介绍一下Log4j、Logback、SFL4J、JUL、JCL这些东西是什么以及有啥作用。
Log4j是什么地球人应该都知道。log4j是Log for Java的简称,是Apache的一个开源子项目,有7种不同的日志级别,从低到高一次为TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF,支持properties和xml两种配置文件,包含Logger、appender、Layout三个主要组件。
SFL4J是Simple Logging Facade for Java的简称,不是具体的日志解决方案,它只服务于各种各样的日志系统,类似于JDBC。主要应用于库类应用或者嵌入式组件。
Logback和Log4j非常相似,但是有很多改进,有更快的速度更低的内存消耗,某些场景速度比log4j有10背的提升,另外logback实现了sel4jAPI使可以很方便的更换成其他系统。
以上三者的作者都是Ceki Gülcü。
JUL是java.util.logging的简称,是Java自己提供的日志框架,类似于Log4J,但是API并不完善,对开发者不是很友好,而且对于日志的级别分类也不是很清晰。
JCL是Jakarta Commons-Logging的简称。JCL和SLF4J非常类似,也是提供的一套API来掩盖了真正的Logger实现。便于不同的Logger的实现的替换,而不需要重新编译代码。缺点在于它的查找Logger的实现者的算法比较复杂,而且当出现了一些class loader之类的异常时,无法去修复它。
log4j2
Log4j 2是Log4j 1.x的升级版版,在Log4j 1.x的基础上做了显著改善,相比logBack有了很多改进,修复了Logback体系结构上固有的一些问题。
我之前在系统开发的时候用的是log4j,上线前做压测的时候性能很不理想,jstack一看发现很多log4j相关的线程在等待资源,明显是卡在log4j上了,本来是想用logback后来发现log4j2功能更多效果更好,果断用上了,当时用的时候主要还是考虑性能。
Log4j 2的性能提升主要体现在利用了jdk5的乐观锁机制和异步logger,官方是这么描述的:
Log4j 2 contains next-generation lock-free Asynchronous Loggers based on the LMAX Disruptor library. In multi-threaded scenarios Asynchronous Loggers have 10 times higher throughput and orders of magnitude lower latency than Log4j 1.x and Logback.
Log4j 2 takes advantage of Java 5 concurrency support and performs locking at the lowest level possible. Log4j 1.x has known deadlock issues. Many of these are fixed in Logback but many Logback classes still require synchronization at a fairly high level.
log4j2的官方介绍虽然完美,但是也是有缺点的,目前使用还不是特别成熟,老的项目贸然改用log4j2是有一定风险的,目前我们的系统跑了7 8个月也没发现什么问题,性能非常不错。
详细介绍可以参考官方文档:http://logging.apache.org/log4j/2.x/manual/index.html。 ''
本文转自 古道卿 51CTO博客,原文链接:http://blog.51cto.com/gudaoqing/1427228