日志初探

本文初探引用链接为: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

  1.  
    import org.slf4j.Logger;
  2.  
    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……
  1.  
    <dependency>
  2.  
    <groupId>ch.qos.logback</groupId>
  3.  
    <artifactId>logback-classic</artifactId>
  4.  
    <version>1.0.7</version>
  5.  
    </dependency>

SLF4J能用于现有的日志框架如Log4j、Commons-logging、java.util.logging(JUL)。

SLF4J结合Log4j

在pom.xml包含下面的依赖
  1.  
    <dependency>
  2.  
    <groupId>org.slf4j</groupId>
  3.  
    <artifactId>slf4j-log4j12</artifactId>
  4.  
    <version>1.7.2</version>
  5.  
    </dependency>

SLF4J结合JUL (java.util.logging)

在pom.xml包含下面的依赖

    1.  
      <dependency>
    2.  
      <groupId>org.slf4j</groupId>
    3.  
      <artifactId>slf4j-jdk14</artifactId>
    4.  
      <version>1.7.2</version>
    5.  
      </dependency>
       
 
原文地址:https://www.cnblogs.com/jianzhixuan/p/13614550.html