官网原文标题《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官方文档翻译--欢迎使用Log4j2!相关推荐

  1. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  2. 欢迎参与 KubeVela 官方文档翻译活动

    来源 | 阿里巴巴云原生公众号 背景 KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英 ...

  3. UIControl事件---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIControl事件1.UIControlEventTouchDown 单点触摸按 ...

  4. 【KubeVela 官方文档翻译】,欢迎大家踊跃参与

    简介:KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英文版,这提高了学习和使用 Kub ...

  5. UIPageControl---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  6. Python3.2官方文档翻译--异常抛出和自定义异常

    Python3.2官方文档翻译--异常抛出和自定义异常 Python3.2官方文档翻译--异常抛出和自定义异常,有需要的朋友可以参考下. 6.4 抛出异常 Raise语句运行程序员强制抛出一个具体的异 ...

  7. fastapi官方文档翻译 -目录

    fastapi官方文档翻译 warmsirius 最新发布 最新评论 目录 fastapi教程翻译(前言):安装和运行 fastapi教程翻译(一):了解FastAPI结构 fastapi教程翻译(二 ...

  8. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  9. Jess 7.2p2——Java平台规则引擎官方文档翻译1

    Jess 7.2p2--Java平台规则引擎官方文档翻译1 本博客转载自本体小本营. 1.入门 1.1.需求 在使用Jess前请先确认JVM是否正确安装并能正常工作. 使用JessDE集成开发环境,你 ...

最新文章

  1. NanoPi NEO Air使用一:介绍
  2. 吴恩达《Machine Learning》精炼笔记 4:神经网络基础
  3. . NET5正式版本月来袭,为什么说gRPC大有可为?
  4. 依赖注入–字段vs构造函数vs方法
  5. ASP.NET GridView控件在列上格式化时间
  6. [LUOGU]P1451 求细胞数量
  7. 图解 利用vue-cli 脚手架创建项目
  8. [Java] 1010. Radix (25)-PAT甲级
  9. 【mysql】知识点
  10. 卷积神经网络CNN基本原理和相关基本概念
  11. maven:《Maven实战》读书笔记
  12. 求一个数的最大真约数
  13. 蓝桥杯 基础练习 字母图形
  14. 读彼得林奇的成功投资有感
  15. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
  16. append() 与appendTo 比较
  17. 微信小程序接口调用渲染
  18. CUDA与OpenCL架构
  19. 如何对HashMap进行排序
  20. 使用阿里云ECS服务器部署Web应用流程介绍

热门文章

  1. paypal 国际版网站集成
  2. java计算机毕业设计乐多多宠物店网站源代码+数据库+系统+lw文档
  3. 小木工 ____农民工纪事之一
  4. matlab2017b和2018a,Matlab 2018a 比2017b有哪些改进?
  5. layui个人中心html,Layui的简易入门教程
  6. PS各个工具的字母快捷键和英文全名
  7. linux数据库哪个难,11 月数据库排名公布:前三难撼动
  8. 分享wifidog的增强版: wifidogx
  9. 是时候来了解android7了:通知直接回复
  10. C/C++程序固定单核CPU运行(几个示例)