springboot集成log4j2日志框架切换

一、前言

首先需要了解的是:SpringBoot-底层是Spring框架,Spring框架默认是用JCL(commons-logging);‘SpringBoot选用 SLF4j和logback,SLF4j只是一个门面日志,他只定义了接口,并未实现,这样也是为了满足了多态的日志实现,常见的logback和log4j,log4j2都是SLF4j的实现,Logback是由log4j创始人设计的另一个开源日志组件,而log4j2是log4j的一个升级版本。

springboot默认日志框架实现是logback,今天介绍下,如何切换springboot日志框架为log4j2。

二、修改pom文件

1.添加依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>1.3.8.RELEASE</version>
 </dependency>

2.去掉logback相关依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>logback-classic</artifactId>
                    <groupId>ch.qos.logback</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j-over-slf4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
</dependency>

这一步建议仔细排查,很多其他的依赖包也是继承或依赖这个logback日志包,需要在其相应的依赖下排除掉,否则很容易springboot启动还是默认原来的logback包,亲自入坑过,排查了好久。idea有相应的插件或功能全局搜索依赖的。

三、新增log4j2.xml配置文件

然后在项目的src/resource目录下添加log4j2.xml日志配置文件:

<?xml version="1.0" encoding="UTF-8"?>
 2  <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
 3  <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
 4  <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
 5  <configuration status="WARN" monitorInterval="30">
 6      <!--先定义所有的appender-->
 7      <appenders>
 8      <!--这个输出控制台的配置-->
 9          <console name="Console" target="SYSTEM_OUT">
10          <!--输出日志的格式-->
11              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
12          </console>
13      <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
14      <File name="log" fileName="log/test.log" append="false">
15         <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
16      </File>
17      <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
18          <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
19                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
20              <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
21              <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
22              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
23              <Policies>
24                  <TimeBasedTriggeringPolicy/>
25                  <SizeBasedTriggeringPolicy size="100 MB"/>
26              </Policies>
27          </RollingFile>
28          <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
29                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
30              <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
31              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
32              <Policies>
33                  <TimeBasedTriggeringPolicy/>
34                  <SizeBasedTriggeringPolicy size="100 MB"/>
35              </Policies>
36          <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
37              <DefaultRolloverStrategy max="20"/>
38          </RollingFile>
39          <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
40                       filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
41              <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
42              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
43              <Policies>
44                  <TimeBasedTriggeringPolicy/>
45                  <SizeBasedTriggeringPolicy size="100 MB"/>
46              </Policies>
47          </RollingFile>
48      </appenders>
49      <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
50      <loggers>
51          <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
52          <logger name="org.springframework" level="INFO"></logger>
53          <logger name="org.mybatis" level="INFO"></logger>
54          <root level="all">
55              <appender-ref ref="Console"/>
56              <appender-ref ref="RollingFileInfo"/>
57              <appender-ref ref="RollingFileWarn"/>
58              <appender-ref ref="RollingFileError"/>
59          </root>
60      </loggers>
61  </configuration>

四、修改application.properties文件
添加配置:

logging.config = classpath:log4j2.xml

这样springboot启动时就会自动的去加载log4j2.xml文件中的日志配置

注意:log4j和locgback可以配置.properties文件,log4j2好像只支持.xml文件配置,亲测了下,好像确实log4j2如果是properties文件则读取不到文件中的配置。

启动项目,看是否按你配置的log4j2.xml文件配置的日志规范打印的日志。
若出现log4j2相关的日志则配置成功,若还是出现logback相关的日志信息,则还没有配置好,需要好好检查是否有其他pom依赖包还依赖默认的logback包,需要exclusion 排除掉,弱国确定都排除掉了,以上的步骤就能够切换为log4j2日志框架了。

Guess you like

Origin blog.csdn.net/m0_37899908/article/details/119274262