SpringBoot日志框架选型——Log4j2的配置与使用

发布于:2023-01-18 ⋅ 阅读:(502) ⋅ 点赞:(0)

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

log4j2.png

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
与其他日志记录包的异步吞吐量比较图
asyncthroughputcomparison.png
响应时间延迟对比图
ResponseTimeAsyncLogging16Threads8kEach.png
通过上面的介绍,我们知道司令员只能选择SLF4J了,然后士兵我们也是选择性能最高的Log4j2了。
文末有演示代码仓。
image.png

2. Log4j2文档介绍

Log4j2官网教程
https://logging.apache.org/log4j/2.x/articles.html
打开官网,就可以看到有中文的教程(PS:如果有清楚如何在这里添加文章的大佬可以滴滴我~):
image.png

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
image.png

3. SpringBoot使用Log4j2

我们先来看一下SpringBoot官方推荐的日志实现框架Logback:
image.png
是不是很简单,直接集成在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>

排除之前的包如下:
image.png
排除之后:
image.png

包加上之后,需要在resources文件夹下面添加log4j2.xml文件,在没有配置之前我们看看效果:
image.png
可以看到只会打印Error级别的日志。
然后我们到https://github.com/apache/logging-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>

特别注意红色框的内容,第一个包需要改成你的项目包。或者下面Console级别改成info。
image.png
可以看到日志正常输出了。

到这里配置就完成了,后期再出具体配置的文章,讲解一下一般项目中我们怎么配置log4j2.xml文件。
代码仓地址:https://gitee.com/jack0240/spring-boot-demo.git


网站公告

今日签到

点亮在社区的每一天
去签到