Log4J
Log4j = Log for Java.
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
     Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF。如果配置为OFF级别,表示关闭log。    
     Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。

Log4J 2
基于Log4J的优化。

1. 插件式结构。Log4j 2支持插件式结构。我们可以根据自己的需要自行扩展Log4j 2. 我们可以实现自己的appender、logger、filter。
  2. 配置文件优化。在配置文件中可以引用属性,还可以直接替代或传递到组件。而且支持json格式的配置文件。不像其他的日志框架,它在重新配置的时候不会丢失之前的日志文件。
3. Java 5的并发性。Log4j 2利用Java 5中的并发特性支持,尽可能地执行最低层次的加锁。解决了在log4j 1.x中存留的死锁的问题。如果你的程序仍然在饱受内存泄露的折磨,请毫不犹豫地试一下log4j 2吧。
  4. 异步logger。Log4j 2是基于LMAX Disruptor库的。在多线程的场景下,和已有的日志框架相比,异步的logger拥有10左右的效率提升。
全面介绍详见官方文档。

配置方式:Log4J 2 日志配置

性能参考:https://blog.csdn.net/u013970991/article/details/81705758

JUL
JUL = java.util.logging.
     Java提供了自己的日志框架,类似于Log4J,但是API并不完善,对开发者不是很友好,而且对于日志的级别分类也不是很清晰,比如:SEVERE, WARNING, INFO, CONFIG, FINE,FINER, FINEST。所以不推荐使用这种方式输出日志。
JCL - Apache Commons-logging
     JCL = Jakarta Commons-Logging.
     Jakarta Commons Logging和SLF4J非常类似,也是提供的一套API来掩盖了真正的Logger实现。便于不同的Logger的实现的替换,而不需要重新编译代码。缺点在于它的查找Logger的实现者的算法比较复杂,而且当出现了一些class loader之类的异常时,无法去修复它。
common-logging组件: 
       Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。了解包里情况,可以查看它的API文档:http://www.oschina.net/uploads/doc/commons-logging-1.1.1/index.html , 其中Log(基本记录器)和LogFactory(负责创建Log实例)是两个基类。该API直接提供对下列底层日志记录工具的支持:Jdk14Logger,Log4JLogger,LogKitLogger,NoOpLogger (直接丢弃所有日志信息),还有一个SimpleLog。 有必要详细说明一下调用LogFactory.getLog()时发生的事情。调用该函数会启动一个发现过程,即找出必需的底层日志记录功能的实现,具体的发现过程在下面列出:  ( 换句话说就是, 有这么多工具,common-logging该使用哪一个呢?这取决于系统的设置,common-logging将按以下顺序决定使用哪个日志记录工具:)
        (1).common-logging首先在CLASSPATH中查找commons-logging.properties文件。这个属性文件至少定义org.apache.commons.logging.Log属性,它的值应该是上述任意Log接口实现的完整限定名称。如果找到 org.apache.commons.logging.Log属相,则使用该属相对应的日志组件。结束发现过程。
        (2).如果上面的步骤失败(文件不存在或属相不存在),common-logging接着检查系统属性org.apache.commons.logging.Log。如果找到org.apache.commons.logging.Log系统属性,则使用该系统属性对应的日志组件。结束发现过程。
        (3).如果找不到org.apache.commons.logging.Log系统属性,common-logging接着在CLASSPATH中寻找log4j的类。如果找到了就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。结束发现过程。
        (4).如果上述查找均不能找到适当的Logging API,但应用程序正运行在JRE 1.4或更高版本上,则默认使用JRE 1.4的日志记录功能。结束发现过程。
        (5).最后,如果上述操作都失败(JRE 版本也低于1.4),则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。结束发现过程。
        为了简化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 Log4j 的 Jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 Log4j 的融合。
        根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试( DEBUG )”“信息( INFO )”“警告( WARN )”“错误(ERROR )”“致命错误( FATAL )”。

SLF4J
SLF4J = Simple Logging Facade for Java.
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。作者创建SLF4J的目的是为了替代Jakarta Commons-Logging。
     实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
     那么什么时候使用SLF4J比较合适呢?
     如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情。但是如果开始便使用SLF4J,那么这种转换将是非常轻松的事情。

LogBack
Logback,一个“可靠、通用、快速而又灵活的Java日志框架”。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
1. logback比log4j要快大约10倍,而且消耗更少的内存。
     2. logback-classic模块直接实现了SLF4J的接口,所以我们迁移到logback几乎是零开销的。
     3. logback不仅支持xml格式的配置文件,还支持groovy格式的配置文件。相比之下,Groovy风格的配置文件更加直观,简洁。
     4. logback-classic能够检测到配置文件的更新,并且自动重新加载配置文件。
     5. logback能够优雅的从I/O异常中恢复,从而我们不用重新启动应用程序来恢复logger。
     6. logback能够根据配置文件中设置的上限值,自动删除旧的日志文件。
     7. logback能够自动压缩日志文件。
     8. logback能够在配置文件中加入条件判断(if-then-else)。可以避免不同的开发环境(dev、test、uat...)的配置文件的重复。
     9. logback带来更多的filter。
     10. logback的stack trace中会包含详细的包信息。
     11. logback-access和Jetty、Tomcat集成提供了功能强大的HTTP-access日志。
     配置文件:需要在项目的src目录下建立一个logback.xml。注:(1)logback首先会试着查找logback.groovy文件;(2)当没有找到时,继续试着查找logback-test.xml文件;(3)当没有找到时,继续试着查找logback.xml文件;(4)如果仍然没有找到,则使用默认配置(打印到控制台)
LogBack 配置:http://aub.iteye.com/blog/1101222

Lombok
https://projectlombok.org/features/all

@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

Log4j、Log4j 2、JUL、JCL 、SFL4J 、Logback 与 Lombok 的使用相关推荐

  1. Java日志系统概述SLF4J、log4j、JCL、Logback

    java日志系统经常遇到SLF4j,JCL,logback,log4j2等等.一些人可能要晕了怎么选择,这里简单说下. 发展 这些都要从Java日志框架的元老log4j说起.java1.3之前打日志都 ...

  2. 【Java从0到架构师】日志处理 - Log4j 1.x、JCL

    日志处理 - Log4j 1.x Java 日志处理的发展史 Log4j 1.x 日志级别 - 6种 pattern - 输出格式 Log4j 1.x - properties 子Logger App ...

  3. Missing artifact log4j:log4j:bundle:1.2.17

    为什么80%的码农都做不了架构师?>>>    maven引入log4jjar包出现Missing artifact log4j:log4j:bundle:1.2.17,解决方法是去 ...

  4. linux 安装log4j,Log4j 安装

    Log4j教程 - Log4j安装 Log4j API包是根据Apache软件许可证分发的. 最新的log4j版本,包括全源代码,类文件和文档可以在http://logging.apache.org/ ...

  5. mvn找不到:log4j:log4j:1.2.17或者导入org.apache.log4j.Logger出现错误的原因和解决办法

    因为: log4j自1.2.17版本以后,就改变jar包了 比如:1.2.17及以前的版本的mvn依赖是这样写的: <!-- https://mvnrepository.com/artifact ...

  6. [log4j]log4j简单配置

    步骤: 1.导入jar包:log4j-1.2.17.jar 2.编写log4j配置文件:log4j.properties ### set log levels - for more verbose l ...

  7. php log4j,log4j 使用笔记

    1. log4j 的配置文件 Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是 Java 特性文件 lg4j.properties (键 = 值). 1.1. log4j conf ...

  8. [Log4j] Log4j 的配置和配置文件加载顺序

    需求:  把log4j.properties 配置问题放置到工程外面的指定文件夹.  具体原因参考http://blog.csdn.net/lihe2008125/article/details/77 ...

  9. java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

    为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统 ...

最新文章

  1. 一个平台系统架构师的能力模型是啥
  2. javascript,继承,封装
  3. expdp / impdp 用法详解
  4. java跳出指定循环
  5. iptables实现NAT
  6. C++设计模式详解之工厂模式解析
  7. win10装系统--笔记
  8. 工具使用教程 (一)【Git从原理到入门实用教程】
  9. atitit.提升性能AppCache
  10. python排序算法——快速排序时间复杂度O(nlogn)
  11. 记解决一次drawable资源找不到的问题
  12. safari打开图片链接显示问题
  13. 数学建模 —— 规划模型
  14. 横版射击,王者归来|Cocos精品《合金弹头OL》
  15. 水杯如何测试 (测试用例)
  16. CE是什么缩写,是什么含义
  17. python中日期格式和时间戳格式的转换
  18. 如何成为一个高级java程序员
  19. InvokeRequired and Invoke
  20. Wyn Enterprise 仪表板组件间联动设置及关闭

热门文章

  1. nodejs cluster_NodeJS 极简教程 lt;1gt; NodeJS 特点 amp; 使用场景
  2. java ee面试题专家总结(必看),Java EE面试题专家总结(必看)
  3. SMARTFORMS 输出动态文本(字符长度超出255)
  4. mysql5.7.24免安装版配置及密码初始化及mysql-font连接异常
  5. Python起源与发展
  6. Composer更新慢的终极解决方案-转
  7. 关于Python对齐问题
  8. 怎么看待MYSQL的性能
  9. DIV实现CSS 的placeholder效果
  10. 编译:ffmpeg,精简ffmpeg.exe