SpringBoot系列:log4j2入门手册 | 超级详细,建议收藏🔥
🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升。
本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
1. 前言
大家肯定都对Log4j非常熟悉,一种日志插件,Apache旗下的开源项目。但是不排除还有的小伙伴忘了,没关系,接下来我会大家回忆一下下Log4j。
Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件、甚至是套接口服务 器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。Log4j由三部分构成:
- 日志信息优先级。
表示用来指定这条日志信息的重要程度。
- 日志信息输出目的地。
表示日志信息的输出目的地指定了日志将打印到控制台还是文件中;
- 日志信息输出格式。
表示输出格式则控制了日志信息的显示内容。
而今天我要介绍的是Log4j的进阶版,Log4j2,它比其前身Log4j 1.x有做重大改进,并改进了Logback,同时修复了Logback架构中的一些问题;可以说是目前最优秀的Java日志框架,没有之一。
2. jar依赖包
<!-- log4j2的依赖引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
3. 日志使用
为了演示log4j2的基本功能点,接下来我给创建一个测试用例,进行日志不同级别输出演示。
package com.example.demo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author luoYong
* @version 1.0
* @date 2022/11/17 16:46
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Log4j2Test {
private static Logger logger = LogManager.getLogger(Log4j2Test.class);
@Test
void log4j2Test() throws Exception {
// 一直打印日志,用于测试Log4j2功能
logAll();
}
// 打印各种级别的日志用于测试
public static void logAll() throws Exception {
//TRACE < DEBUG < INFO < WARN < ERROR < FATAL
logger.trace("trace level log");
logger.debug("debug level log");
logger.info("info level log");
logger.warn("warn level log");
logger.error("error level log");
logger.fatal("fatal level log");
}
}
接着我们来看下控制台输出:
4. 日志级别:
对于log4j2日志级别,它志信息的优先级从高到低排有ERROR>WARN>INFO>DEBUG,完整来说是有8种(ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF)。
当日志级别设置为某一级别时,则会打印大于等于该级别的日志,比如日志级别设置为ERROR,则会打印ERROR,FATAL级别的日志,也就是当你设置日志级别为ALL,则会把所有级别的日志都打印出来,OFF则不打印任何级别的日志,所以严格来讲只有6种日志级别。
5. 日志打印
我们随意在非测试类中写个程序,让日志进行打印。
//开始使用日志进行输出
@GetMapping("/demo1")
public void test1(){
log.info("程序执行咯!记录日志啦");
}
我们可以来看控制台,到底输出了什么?
17:01:22.215 [http-nio-8080-exec-5] INFO com.example.demo.controller.TestController - 程序执行咯!记录日志啦
知道这一长串都表达什么意思呢?不急,咱们往下看。
6. log4j2.xml配置文件
给大家演示个比较简短的配置文件作为示例进行讲解;
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="ERROR">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
对于上方配置文件,主要有两类配置,
一类是Appenders:定义日志输出目的地,内容和格式等。
另一类是Loggers:定义日志级别和使用的Appenders。
具体讲述一下Appenders配置
Appenders表示日志输出到控制台的标准输出。
<!--输出日志的格式-->
<PatternLayout pattern="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
pattern定义日志输出格式:
- %date{HH:mm:ss.SSS}:表示输出日志的打印日期,精确到毫秒。
- [%thread]:表示当前线程名称。
- %-5level:表示级别从左显示5个字符宽度。
- %logger{36}:表示输出Logger名称最长36个字符;一般是类的全限定路径名。
- %msg:表示日志信息。
- %n:表示日志换行。
接着给大家看下实际如上设置,控制台输出的日志会是如何?
17:01:22.215 [http-nio-8080-exec-5] INFO com.example.demo.controller.TestController - 程序执行咯!记录日志啦
这不,还是上面第4点介绍日志等级给大家写的demo样式输出的日志样式,这样你们就能很好的理解了吧。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。
「赠人玫瑰,手留余香」,咱们下期拜拜~~
7. 热文推荐💭
为了便于同学快速定位文章学习,熬夜几天终于整理出了【基础篇】及【进阶篇】专栏的文章及有效地址,同学们敬请吩咐bug菌吧。
目前基础篇已完结75篇+,进阶篇已完结45篇+,两专栏都在持续更新中;生命不息,更新不止,加油卷起来吧,同学们。部分文章总结如下:
7.1 Spring Boot【基础篇】
Spring Boot入门(01):Spring Boot的奋斗成长史
Spring Boot入门(02):快速开发环境搭建和项目启动
Spring Boot入门(03): yaml、properties配置文件介绍及使用
Spring Boot入门(06):Spring Boot常用注解大全
Spring Boot入门(07):整合 MySQL 和 Druid数据源(两万字教学)
Spring Boot入门(08):整合Mybatis访问MySQL实现增删改查
Spring Boot入门(09):使用MyBatis的XML配置方式访问MySQL实现增删改查
Spring Boot入门(10): mybatis之xml映射文件>、<=等特殊符号写法
Spring Boot入门(11):Spring Boot 整合 JPA
Spring Boot入门(12):整合Mybatis-Plus mybatis-plus实现接口增删改查
Spring Boot入门(13): Mybatis-Plus之条件构造器使用手册
Spring Boot入门(14): mybatis-plus之如何自定义sql
Spring Boot入门(15):Spring Boot 整合 MyBatis-Plus AutoGenerator 自动生成项目骨架代码
Spring Boot入门(16):Spring Boot整合Swagger-UI实现在线API文档
Spring Boot入门(17):Spring Boot整合Knife4j,美化强化丑陋的Swagger
Spring Boot入门(18):Spring Boot静态资源映射
Spring Boot入门(19):Spring Boot 整合 Thymeleaf 模板引擎,开发Web页面
Spring Boot入门(20):实现多数据源配置,开箱即用
Spring Boot入门(21):整合Log4j2以及配置详解
Spring Boot入门(22):整合LogBack 实现日志文件本地保存
Spring Boot入门(23):Spring Boot基于AOP拦截日志
Spring Boot入门(24):Spring Boot事务
Spring Boot入门(25):过滤器、拦截器、监听器对比及使用场景
Spring Boot入门(26):实现邮件发送简单邮件、附件邮件、嵌入资源(图片)邮件、模板邮件等
Spring Boot入门(30):Windows安装Redis客户端?你玩过么
7.2 Spring Boot【进阶篇】
Spring Boot进阶(01):Spring Boot 集成 Redis,实现缓存自由
Spring Boot进阶(02):使用Validation进行参数校验
Spring Boot进阶(03):如何使用MyBatis-Plus实现字段的自动填充
Spring Boot进阶(04):如何使用MyBatis-Plus快速实现自定义sql分页
Spring Boot进阶(05):Spring Boot 整合RabbitMq,实现消息队列服务
Spring Boot进阶(06):Windows10系统搭建 RabbitMq Server 服务端
Spring Boot进阶(07):集成EasyPoi,实现Excel/Word的导入导出
Spring Boot进阶(08):集成EasyPoi,实现Excel/Word携带图片导出
Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出
Spring Boot进阶(10):集成EasyPoi,实现Excel模板导出成PDF文件
Spring Boot进阶(11):Spring Boot 如何实现纯文本转成.csv格式文件?
Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?
Spring Boot进阶(13):Spring Boot 如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?
Spring Boot进阶(14):Spring Boot 如何手动连接库并获取指定表结构?一文教会你
Spring Boot进阶(15):根据数据库连接信息指定分页查询表结构信息
Spring Boot进阶(16):Spring Boot 如何通过Redis实现手机号验证码功能?
Spring Boot进阶(17):Spring Boot如何在swagger2中配置header请求头等参数信息
Spring Boot进阶(18):SpringBoot如何使用@Scheduled创建定时任务?
Spring Boot进阶(19):Spring Boot 整合ElasticSearch
Spring Boot进阶(21):配置Undertow容器
Spring Boot进阶(22):Tomcat与Undertow容器性能对比分析
Spring Boot进阶(24):如何快速实现多文件上传?
Spring Boot进阶(25):文件上传的单元测试怎么写?
Spring Boot进阶(26):Mybatis 中 resultType、resultMap详解及实战教学
Spring Boot进阶(27):Spring Boot 整合 kafka(环境搭建+演示)
Spring Boot进阶(28):Jar包Linux后台启动部署及滚动日志查看,日志输出至实体文件保存
Spring Boot进阶(29):如何正确使用@PathVariable,@RequestParam、@RequestBody等注解?不会我教你,结合Postman演示
Spring Boot进阶(30):@RestController和@Controller 注解使用区别,实战演示
...
若想学习更多,可以参考这篇专栏总结《2023最新首发,全网最全 Spring Boot 学习宝典(附思维导图)》,本专栏致力打造最硬核 Spring Boot 进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中。欢迎大家订阅持续学习。
在入门及进阶之途,我必助你一臂之力,系统性学习,从入门到精通,带你不走弯路,直奔终点;投资自己,永远性价比最高,都这么说了,你还不赶紧来学??
8. 文末💭
转载自:https://juejin.cn/post/7208088676852826172