# SpringBoot配置日志(log4j版)

# 介绍

在软件开发中,日志是个很重要的东西,它记录系统中方法运行的过程信息和系统报错时的错误信息。开发人员在排查系统中的错误,就可以通过错误日志来进行排查,如果没有日志那排查错误得发疯。。。

在SpringBoot版本2.X.X以后,SpringBoot就将log4j设置为默认的日志框架了。

后面我将介绍SpringBoot中如何设置log4j,好好保存日志,是我们必须的。

这里的日志指的就是我们在控制台中看到的信息,如图所示:

image-20220325214325763

# Log4j简介

Log4j有三个主要的组件:

  • Loggers(记录器):日志类别和级别
  • Appenders (输出源):日志要输出的地方
  • Layouts(布局):日志以何种形式输出

# Loggers

系统日志分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。

级别顺序为:DEBUG < INFO < WARN < ERROR < FATAL。

Log4j只输出级别不低于设定级别的日志信息,比如设置记录级别为INFO后,DEBUG级别的信息就不会被记录,INFO及以后的级别会被记录。

# Appenders

Log4j有很多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等。

常使用的类如下:

  • org.apache.log4j.ConsoleAppender(控制台)

  • org.apache.log4j.FileAppender(文件)

  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
log4j.appender.appenderName.OptionN = valueN
1
2
3

# Layouts

Layouts提供四种日志输出样式,如根据HTML样式自由指定样式包含日志级别与信息的样式包含日志时间、线程、类别等信息的样式常使用的类如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1
log4j.appender.appenderName.layout.OptionN = valueN
1
2
3

Log4j支持两种配置文件格式:

  • 一种是XML格式的文件,
  • 一种是properties属性文件。

# 环境

  • SpringBoot(2.2.6.RELEASE)
  • log4j(2.17.0)

# 配置

# 基础配置版

这里我们将日志保存到指定的目录中,以文件的形式保存

# 配置pom.xml

这里我指定了springboot版本

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
1
2
3
4
5
6

这里要注意一下,由于我使用的SpringBoot版本是2.2.6,默认的log4j版本比较低低于2.15.0,低于这个版本的log4j2会有严重的漏洞(如果不清楚可以去百度一下log4j2重大漏洞),我们需要替换掉默认版本,这里使用2.17.0版本。

<properties>
    <java.version>1.8</java.version>
    <log4j2.version>2.17.0</log4j2.version>
</properties>
1
2
3
4

更换版本后我们可以看到,如图所示:

image-20220325214404798

# 配置application.yml

image-20220325214436273

logging:
  level:
    com.sun.natural_resources.mapper: debug
  file:
    path: ./logs
1
2
3
4
5

这里我指定了日志打印范围为mapper层,打印日志级别为debug

文件保存目录为相对目录下的logs文件夹下,日志文件默认名称为spring.log

这是基于默认配置的,如果项目重启了(或过了一天后),之前的日志会被压缩打包起来成gz文件,如下图所示:

image-20220325214517877

# 参考

Log4j.properties配置详解 - 简书 (jianshu.com) (opens new window)

上次更新时间: 2024年2月14日星期三上午10点24分