Java日志体系

约定不等于承诺〃 2022-04-22 19:12 375阅读 0赞

日志框架可以说是软件系统的标配,平时使用日志的时候多数只是了解日志配置怎么配,对于这些日志框架的不同以及他们之间的关系很少了解。

Java中的日志体系可以用杂乱无章来形容,因为很多,今天就来梳理下这些日志框架到底是怎么回事。

当前主流的log技术名词

  • log4j
  • jcl(Jakarta Commons Logging)
  • jul(java util logging)
  • log4j2
  • slf4j
  • logback
  • simple-log

一、jul(java util logging)

java自带的日志记录技术,可以直接记录日志
示例:

  1. import java.util.logging.Logger;
  2. public class JUL {
  3. public static void main(String[] args) {
  4. Logger logger = Logger.getLogger("JUL");
  5. logger.info("java util logging");
  6. }
  7. }

javautillogging

二、log4j

log4j是Apache的一个开源项目,可以不需要依赖第三方技术,直接记录日志
Dependency: log4j-1.2.17.jar、log4j.properties
示例:

  1. import org.apache.log4j.Logger;
  2. public class Log4j {
  3. public static void main(String[] args) {
  4. Logger logger = Logger.getLogger(Log4j.class);
  5. logger.info("log4j");
  6. }
  7. }

log4j

三、log4j2

log4j2和log4j是同一个作者开发,只不过log4j2是重新架构的一款日志组件,抛弃了log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。
Dependency: log4j-core-2.11.1.jar、log4j-api-2.11.1.jar、log4j2.xml
示例:

  1. import org.apache.logging.log4j.LogManager;
  2. import org.apache.logging.log4j.Logger;
  3. public class Log4j2 {
  4. public static void main(String[] args) {
  5. Logger logger = LogManager.getLogger("log4j2");
  6. logger.info("log4j2");
  7. }
  8. }

log4j2

4.jcl(Jakarta Commons Logging)

jcl是apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象接口方法(info,debug,error…)。jcl默认使用jul打印日志,如果项目依赖了log4j jar包,则使用log4j打印日志。
示例:

  1. import org.apache.commons.logging.Log;
  2. import org.apache.commons.logging.LogFactory;
  3. public class JCL {
  4. public static void main(String[] args) {
  5. Log log = LogFactory.getLog("JCL");
  6. log.info("jakatra common logging");
  7. }
  8. }

Dependency: commons-logging-1.2.jar
jul

Dependency: commons-logging-1.2.jar 、log4j-1.2.17.jar
log4j

为何是这种匹配机制呢?下面我们进入源码看下:
LogFactoryImpl
classesToDiscover

通过查看源码可以看出,底层通过一个数组存放具体的日志框架的类名,然后循环数组依次去匹配这些类名是否在项目中被依赖了,如果找到依赖则直接使用,有先后顺序,log4j>jul

五、slfj(Simple Logging Facade for Java)

Java的简单日志门面(SLF4J)用作各种日志框架的简单门面或抽象,像jul、logback和log4j等。SLF4J允许最终用户在部署时插入所需的日志框架,如果在项目中使用slf4j必须加一个依赖jar,即slf4j-api-xxx.jar。slf4j本身不记录日志,通过绑定器绑定一个具体的日志框架来完成日志记录。
常用的绑定器类型:


























绑定类型 说明
slf4j-log4j12-xxx.jar 绑定log4j,依赖log4j-xxx.jar
slf4j-jdk14-xxx.jar 绑定jul
slf4j-jcl-xxx.jar 绑定jcl
logback-classic-xxx.jar 绑定logback,依赖logback-core-xxx.jar

slfj绑定

示例:

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. public class SL4J {
  4. public static void main(String[] args) {
  5. Logger logger = LoggerFactory.getLogger("sl4j");
  6. logger.info("slf4j");
  7. }
  8. }

Dependency: slf4j-api-1.7.25.jar、slf4j-log4j12-1.7.25.jar(绑定器)
slf4j-log4j

Dependency: slf4j-api-1.7.25.jar、sslf4j-jdk14-1.7.25.jar(绑定器)
slfj-jul

总结

java日志体系


-—————-本文结束感谢您的阅读——————

发表评论

表情:
评论列表 (有 0 条评论,375人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java日志体系分析

    写在前面 Java中日志框架种类繁多,我也是最近在学习[mybatis][]过程中对日志的使用产生了困惑,所以这里个人做下总结,希望能帮助到和我有一样困惑的朋友,下面我们

    相关 日志体系

    引言 还在为弄不清commons-logging-xx.jar、log4j-xx.jar、sl4j-api-xx.jar等日志框架之间复杂的关系而感到烦恼吗? 还在为

    相关 Java 日志体系详解

    概要 本文的目的是搞清楚Java中各种日志Log之间是怎么的关系,如何作用、依赖,好让我们平时在工作中如果遇到“日志打不出”或者“日志jar包冲突”等之类的问题知道该如何

    相关 Java 日志体系详解

    本文的目的是搞清楚Java中各种日志Log之间是怎么的关系,如何作用、依赖,好让我们平时在工作中如果遇到“日志打不出”或者“日志jar包冲突”等之类的问题知道该如何入手解决,以

    相关 Java 日志体系总览

    摘要: Java的日志系统,对于项目的运行状态监控和行为分析有着至关重要的作用,很难想象没有任何日志记录功能的应用程序被运行于生产环境中。目前的Java日志收集有非常多的日志框

    相关 Java日志体系

    > 日志框架可以说是软件系统的标配,平时使用日志的时候多数只是了解日志配置怎么配,对于这些日志框架的不同以及他们之间的关系很少了解。 Java中的日志体系可以用杂乱无章来形容

    相关 Java日志体系概述

      System.out.print 大概十年前,主要是C/S模式(客户端+服务端模式),整个服务端项目都做在一个工程里,大家验证基本上用的前端就是alert,后