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的配置与使用
1. 名词介绍
在选择日志框架的时候大家是不是也和我一样,被各种名词所困扰?这里给大家介绍一下吧:
这里我们先来了解一下什么是日志门面框架,它就像一个司令官,接受到你的命令之后他会找具体的士兵进行具体的输出日志操作。那为啥叫门面呢?找人办事至少得有门路对不。
名词 | 作用 | 简介 |
JCL | 日志门面框架 | Apache Commons Logging之前叫Jakarta Commons Logging,简称JCL,提供了一个 Log 接口,该接口既轻量级又是其他日志记录工具包的独立抽象。它为中间件/工具开发人员提供了一个简单的日志记录抽象,允许开发人员选择特定的日志实现。很遗憾的是它于 |
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,可惜的是在 |
Log4j2 | 日志实现框架 | Apache Log4j 2是Log4j的升级,对其前身Log4j 1.x进行了重大改进所有并不兼容1.x,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。 |
日志实现框架 | Logback旨在作为流行的log4j项目的继承者。它由log4j的创始人Ceki Gülcü设计。建立在设计工业强度测井系统方面十年的经验之上。由此产生的产品,即日志备份,比所有现有的日志记录系统更快,占用空间更小,有时幅度很大。同样重要的是,logback提供了其他日志记录系统中缺少的独特且相当有用的功能。 |
那我们来看看Log4j2官网的性能对比吧:
https://logging.apache.org/log4j/2.x/manual/async.html#Performance与其他日志记录包的异步吞吐量比较图
响应时间延迟对比图
通过上面的介绍,我们知道司令员只能选择SLF4J了,然后士兵我们也是选择性能最高的Log4j2了。
文末有演示代码仓。
2. Log4j2文档介绍
Log4j2官网教程
https://logging.apache.org/log4j/2.x/articles.html 打开官网,就可以看到有中文的教程(PS:如果有清楚如何在这里添加文章的大佬可以滴滴我~
):
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
3. SpringBoot使用Log4j2
我们先来看一下SpringBoot官方推荐的日志实现框架Logback:
是不是很简单,直接集成在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>
排除之前的包如下:
排除之后:
包加上之后,需要在resources文件夹下面添加log4j2.xml
文件,在没有配置之前我们看看效果:
可以看到只会打印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。
可以看到日志正常输出了。
到这里配置就完成了,后期再出具体配置的文章,讲解一下一般项目中我们怎么配置log4j2.xml
文件。
代码仓地址:https://gitee.com/jack0240/spring-boot-demo.git
以上是关于SpringBoot日志框架选型——Log4j2的配置与使用的主要内容,如果未能解决你的问题,请参考以下文章