SpringBoot系列:log4j2入门手册 | 超级详细,建议收藏🔥

1,354 阅读12分钟

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

...

✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟

🏆本文收录于《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");
    }
}

接着我们来看下控制台输出:

image.png

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定义日志输出格式:

  1. %date{HH:mm:ss.SSS}:表示输出日志的打印日期,精确到毫秒。
  2. [%thread]:表示当前线程名称。
  3. %-5level:表示级别从左显示5个字符宽度。
  4. %logger{36}:表示输出Logger名称最长36个字符;一般是类的全限定路径名。
  5. %msg:表示日志信息。
  6. %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【基础篇】

导读:SpringBoot 学习指南(附思维导图)

Spring Boot入门(01):Spring Boot的奋斗成长史

Spring Boot入门(02):快速开发环境搭建和项目启动

Spring Boot入门(03): yaml、properties配置文件介绍及使用

Spring Boot入门(04):多环境切换,实例演示

Spring Boot入门(05):starter基础入门

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入门(27):war包部

Spring Boot入门(28):jar包部署

Spring Boot入门(29):如何实现热部署

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进阶(20):配置Jetty容器

Spring Boot进阶(21):配置Undertow容器

Spring Boot进阶(22):Tomcat与Undertow容器性能对比分析

Spring Boot进阶(23):实现文件上传

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. 文末💭

       我是bug菌,CSDN | 阿里云 | 华为云 | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。