本文初探引用链接为:https://www.cnblogs.com/duguxiaobiao/p/9128819.html#
一、现在企业中常用的日志组件有哪些:JCL 、 JUL、 SLF4j、Log4j、 Log4j2 、 Logback、 jboss-loggin 等,一般日志是配套出现的,一般是由 一个日志门面 和 一个日志实现 配套使用。
日志门面 日志实现
JCL log4j
SLF4j log4j2
jboss-loggin logback
JUL
且在springboot 中 ,也是使用的 slf4j + logback
那么,下面开始 一个个排除
JUL:实现简陋,很多地方受到开发者的吐槽,所以 首先排除
jboss-loggin:自诞生之初,就不是为了服务大众,不受到什么青睐,所以 也排除
log4j:log4j虽然声名显赫,但是在这里 首先要知道一点 slf4j 、log4j、logback 这三个框架都是同一个作者ceki 开发的,作者说 log4j 太烂,不想修改了,因此开发了 升级版的 log4j,也就是 logback ,因此在这里 我们划掉 log4j
log4j2:log4j2不是log4j的升级版,而是apache开发的,log4j2 该框架很优秀,正是因为太优秀,设计时与 部分框架对其支持的程度有限,不一定会什么时候踩坑,而log4j2在设计时的性能是优于logback的,但是 99%的开发者不会有机会体会到这种差距,因为 logback也很优秀,足够我们日常开发,所以我们划掉 log4j2
JCL:划掉JCL 主要是因为 日志实现上我们选择了 logback,而 logback和slf4j 毕竟是同一个作者写的,亲生的,合得来,而且在springboot 中 ,也是使用的 slf4j + logback,所以我们划掉了 JCL
因此,最后剩下的就是我们 这篇博客的 内容了 ,如何配置和使用 SLF4j + logback
二、
Commons Logging和Log4j这一对好基友,它们一个负责充当日志API,一个负责实现日志底层,搭配使用非常便于开发。
其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。
我们先来看看SLF4J对Commons Logging的接口有何改进。在Commons Logging中,我们要打印日志,有时候得这么写:
int score = 99;
p.setScore(score);
log.info("Set score " + score + " for Person " + p.getName() + " ok.");
拼字符串是一个非常麻烦的事情,所以SLF4J的日志接口改进成这样了:
int score = 99; p.setScore(score); logger.info("Set score {} for Person {} ok.", score, p.getName());
引用链接 https://www.liaoxuefeng.com/wiki/1252599548343744/1264739155914176
三、引用链接https://blog.csdn.net/chszs/article/details/8653460
SLF4J
SLF4J没有替代任何日志框架,它仅仅是标准日志框架的外观模式。如果在类路径下除了SLF4J再没有任何日志框架,那么默认状态是在控制台输出日志。
Logback
Logback是Log4j的改进版本,而且原生支持SLF4J(因为是同一作者开发的),因此从其它日志框架如Log4j或JDK的logging迁移到Logback是完全可行的。
由于Logback原生支持SLF4J,因此Logback+SLF4J的组合是日志框架的最佳选择,比SLF4J+其它日志框架的组合要快一些。而且Logback的配置可以是XML或Groovy代码。
注意一个重要的特性,Logback通过JMX修改日志配置(比如日志级别从Debug调整到INFO),可以从JMX控制台直接操作,无需重启应用程序。
SLF4J API用法
1. 从org.slf4j包导入Logger和LoggerFactory
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
2. 声明日志类
private final Logger logger = LoggerFactory.getLogger(LoggingSample.class);
3. 使用debug、warn、info、error方法并跟踪适合的参数。
所有的方法默认都使用字符串作为输入。
logger.info("This is sample info statement");
SLF4J结合Logback
在pom.xml包含下面的依赖:它会自动包含所有的依赖包logback-core、slf4j-api……
-
<dependency>
-
<groupId>ch.qos.logback</groupId>
-
<artifactId>logback-classic</artifactId>
-
<version>1.0.7</version>
-
</dependency>
SLF4J能用于现有的日志框架如Log4j、Commons-logging、java.util.logging(JUL)。
SLF4J结合Log4j
在pom.xml包含下面的依赖
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-log4j12</artifactId>
-
<version>1.7.2</version>
-
</dependency>
SLF4J结合JUL (java.util.logging)
在pom.xml包含下面的依赖
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-jdk14</artifactId>
-
<version>1.7.2</version>
-
</dependency>