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

Posted Jack魏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot日志框架选型——Log4j2的配置与使用相关的知识,希望对你有一定的参考价值。


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

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

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的配置与使用_java_02


响应时间延迟对比图

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


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

文末有演示代码仓。

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

2. Log4j2文档介绍

Log4j2官网教程

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

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

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的配置与使用_log4j2_06

3. SpringBoot使用Log4j2

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

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


是不是很简单,直接集成在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的配置与使用_log4j_08


排除之后:

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

包加上之后,需要在resources文件夹下面添加​​log4j2.xml​​文件,在没有配置之前我们看看效果:

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


可以看到只会打印Error级别的日志。

然后我们到​​https://github.com/apache/logging-log4j2​​,说明里面添加如下配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.jack" level="INFO"/>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

特别注意红色框的内容,第一个包需要改成你的项目包。或者下面Console级别改成info。

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


可以看到日志正常输出了。

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


以上是关于SpringBoot日志框架选型——Log4j2的配置与使用的主要内容,如果未能解决你的问题,请参考以下文章

日志框架选型,Logback 还是 Log4j2?

重学SpringBoot系列之日志框架与全局日志管理

springboot中log4j2日志框架的使用

springboot整合log4j2日志框架

关于SpringBoot 项目中使用Log4j2详细

五SpringBoot整合log4j2