天天看点

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

Apache Log4j 2是Log4j的升级,对其前身Log4j 1.x进行了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固作者有问题。虽然2021年出现过重大Bug(非得加N种特性,满足需求就好不要加各种花里胡哨的,后期可以考虑插件添加特性),也不妨碍它是Java界目前最火最快最好的日志框架。

本次介绍的版本是

2.18.0

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

1. 名词介绍

在选择日志框架的时候大家是不是也和我一样,被各种名词所困扰?这里给大家介绍一下吧:

这里我们先来了解一下什么是日志门面框架,它就像一个司令官,接受到你的命令之后他会找具体的士兵进行具体的输出日志操作。那为啥叫门面呢?找人办事至少得有门路对不。

名词 作用 简介
JCL 日志门面框架 Apache Commons Logging之前叫Jakarta Commons Logging,简称JCL,提供了一个 Log 接口,该接口既轻量级又是其他日志记录工具包的独立抽象。它为中间件/工具开发人员提供了一个简单的日志记录抽象,允许开发人员选择特定的日志实现。很遗憾的是它于

2014-07-09

停止了更新,停在了1.2版本了。
SLF4J 日志门面框架 The Simple Logging Facade for Java作为各种日志记录框架(例如.java.util.loglog,logback,log4j)的简单外观或抽象,允许最终用户在部署时选择所需的日志记录框架。Ceki Gülcü创建了SLF4J作为Jakarta commons-logging框架的替代品。

下面介绍的是日志实现框架,这个就是士兵了,司令官接收到命令之后,就会找具体的士兵去执行了,可以是A士兵也可以是B士兵,看开发人员的心情了。

名词 作用 简介
JUL 日志实现框架 JAVA自带的日志记录工具,在java.util.logging包下面,是平台核心日志记录工具的类和接口。日志记录 API 的中心目标是支持在客户站点维护和维护软件。
Log4j 日志实现框架 Apache Log4j 1.x,可惜的是在

2015年8月5日

停止了更新。作者:Ceki Gülcü
Log4j2 日志实现框架 Apache Log4j 2是Log4j的升级,对其前身Log4j 1.x进行了重大改进所有并不兼容1.x,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。
Logback 日志实现框架 Logback旨在作为流行的log4j项目的继承者。它由log4j的创始人Ceki Gülcü设计。建立在设计工业强度测井系统方面十年的经验之上。由此产生的产品,即日志备份,比所有现有的日志记录系统更快,占用空间更小,有时幅度很大。同样重要的是,logback提供了其他日志记录系统中缺少的独特且相当有用的功能。

那我们来看看Log4j2官网的性能对比吧:

https://logging.apache.org/log4j/2.x/manual/async.html#Performance

与其他日志记录包的异步吞吐量比较图

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

响应时间延迟对比图

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

通过上面的介绍,我们知道司令员只能选择SLF4J了,然后士兵我们也是选择性能最高的Log4j2了。

文末有演示代码仓。

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

2. Log4j2文档介绍

Log4j2官网教程

https://logging.apache.org/log4j/2.x/articles.html

打开官网,就可以看到有中文的教程(

PS:如果有清楚如何在这里添加文章的大佬可以滴滴我~

):

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

SpringBoot配置文件官网配置:

log4j2.xml

https://github.com/spring-projects/spring-boot/blob/v2.7.2/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/log4j2/log4j2.xml

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

3. SpringBoot使用Log4j2

我们先来看一下SpringBoot官方推荐的日志实现框架Logback:

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

是不是很简单,直接集成在web里面了。

我们在使用Log4j2之前需要先排除starter-logging,如下所示:

https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#howto.logging.log4j

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

           

排除之前的包如下:

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2

排除之后:

SpringBoot日志框架选型——Log4j2的配置与使用1. 名词介绍2. Log4j2文档介绍3. SpringBoot使用Log4j2
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Logger name="com.jack" level="INFO"/>
    <Root level="info">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>