Log4j2官方文档翻译--欢迎使用Log4j2!

官网原文标题《Welcome to Log4j 2!》

官网原文地址http://logging.apache.org/log4j/2.x/manual/index.html

译者:本文介绍了Log4j的发展历史。以及log4j2的特性。读者在学习log4j2前建议最先阅读此文

后续阅读:《Log4j2官方文档翻译--架构》

介绍

几乎所有大型应用都有它自己的log或者tracing API。顺应这一规范,在1996年,E.U. SEMPER 项目也决定自己编写tracing API。在包含了许多典型实现和大量工作的无数次增强后,这个API被演化为log4j-一个流行的Java logging包。它发布在Apache Software License下,一个被开源精神证明的,完全成熟的开源license。最新版本的log4j,包含了完整的源代码,class文件及文档。你可以在 http://logging.apache.org/log4j/2.x/index.html找到它。

为了便于调试,在代码中插入log的片段,是一个比较low的做法。但也可能是唯一的方法,因为调试器并不会一直可用或者适合。对于多线程的应用或者大型分布式应用更是如此。

经验告诉我们,logging是开发周期中重要的组件。它可以提供很多的好处。它提供运行中程序精确的上下文信息。一旦你插入了log的代码,不需要人工介入就可以生成logging输出。更为重要的是,日志可以被持久化保存,以备日后研究。开发周期中,logging还有一个额外的作用,我们可以把它看作一个审计工具。

就像 Brain W.kernighan和Rob Pike在他们《The practice of Programming》中所写到的:

作为个人选择,我们在获取stack trace和一两个变量值以外,并不倾向于使用调试器。原因是它很容易把复杂的数据结构和控制流程搞丢;我们发现一步步debug和在重要的地方多思考、加入输出片段、自我检查代码比起来,并不是那么富有成效。查看合理位置的输出,和一次次点击debug比起来,会花费更少的时间。与在我们已知的关键代码单步调试比起来,找到正确的位置插入打印日志片段会更省时间。更为重要的是,调试的代码片段和代码在一起,但是debugging的会话是瞬时的。

Logging也有它的缺点,它可以使得程序变慢。如果太冗长的话,它会造成滚动的盲区。为了缓解这些痛点,log4j被设计的可信赖、快速、可扩展。因为logging很少是程序关注的主要焦点,log4j的api努力变的简单易懂、易于使用。

 

Log4j 2

Log4j 1.x已经在很多应用中被使用了。然而,近年来它开发的脚步却变慢了。它变的越来越难以维护,由于它需要依存于老版本的Java。它于2015年8月,生命周期结束。它的其他选择,SLF4J/Logback做了很多的提升。那么为什么要操心log4j2呢?下面是一些原因:

 

1、Log4j 2被设计为可以用作审计日志的框架。Log4j 1.x和Logback都会在重新配置时丢失日志。Logj 2不会这样。在Logback中,appender中的异常对于程序是不可见的。在log4j 2可以配置appender的异常渗透给应用。

2、Log4j 2包含下一代基于LMAZ Disruptor library 的异步Logger。和Log4j 1及logback比起来,在多线程场景中,异步的logger有着10倍的生产量,以及量级下降的延迟。

3、Log4j 2对于独立应用来说是无垃圾的,对于持续记日志的web应用,只产生很低的垃圾。这可以降低垃圾回收器的压力并且得到更好的响应性能。

4、Log4j 2使用插拔系统,,使得通过加入新的appender、filter、layout、lookup来扩充框架,变得极为简单。因为不需要对log4j做任何改变。

5、因为插件系统的配置十分简单。配置中的条目并不需要指明class名称。

6、支持客制化的log level。客制化的log level可以写在代码里,也可以放到配置文件中

7、支持lambda表达式。运行在java8上的代码可以使用lambda表达式懒构造log信息,如果请求的log level被启用。明确的level检查是不需要的,使用更为简洁的代码达到同样的效果。

8、支持消息对象。消息可以支持有趣而复杂的结构通过log系统传递,并被高效的操作。用户可以自由的创建自己的Message类型及编写客制化的layout、filter、lookup来操作它们。

9、Log4j 1.x支持appender中的filter。Logback加入了TurboFIlter来过滤event,在他们被logger处理前。Log4j 2支持可配置的filter来处理event,在被Logger处理前,它们被Logger或者appender所使用。

10、很多Logback Appender不接受layout,只能输出固定的格式。大多数Log4j2 Appender接收layout,允许数据转化为任何想要的样式。

11、Log4j 1.x及Logback中的Layout返回String,这会导致 Logback Encoders. 中讨论的问题。Log4j 2使用了简单的方法使得layout永远返回byte数组。这样的好处是,它可以被任何的appender所使用,并不只是写入到outputstream的appender。

12 、Syslog appender支持TCP和UDP,也同样支持BSD syslog及RFC 5424 格式

13、Log4j 2采用了Java5中并发支持的优势,并且尽可能的采用最低层级的锁。Log4j 1.x有已知的死锁问题。大部份问题虽然在logback中修复了,但是很多logback的类都需要在相当高的level来做同步。

14、他是Apache Software Foundation项目,遵循了所有ASF项目所采用的社区及支持模式。如果你想要作出贡献并且赢得提交代码的权利,只需要按照Contributing里面的概述去做

 

你可能感兴趣的:(log4j2)