Spring Boot 添加log4j2日志文件
对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维。而日志的输出需要有一定的规划,如日志命名、日志大小,日志分割的文件个数等。在SpringBoot的框架下,会使用log4j2
。
Log4j其实可以理解为log for java
,所以是java的日志框架,提供日志服务,而Log4j 2是Log4j的升级版本,性能比logback
好。 日志级别优先级从低到高:ALL、DEBUG、 INFO、 WARN、 ERROR、FATAL、 OFF
。一般官网建议就使用DEBUG、INFO、WARN和ERROR
这四个,但是我们可以加一个ALL
最低级别的来进行总日志的输出。日志的等级越高,打出的日志越少。
1、添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion><!-- 去除默认配置 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 支持log4j2日志配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
<!-- 支持识别yml配置 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
2、在resouces文件下配置文件
log4j2-spring-dev.xml :开发环境的日志输出配置,可自定义输出路径
log4j2-spring-release.xml:生产环境的日志输出配置,可自定义输出路径
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO" monitorInterval="60">
<Properties>
<Property name="app.name"></Property>
<Property name="log.home">D:/logs/</Property>
<!-- <Property name="log.pattern">[%d] [%-5p] [%t] [%c{3.}] [%l] [_] [%m]%n</Property> -->
<Property name="log.file.charset">UTF-8</Property>
<Property name="log.file.pattern">
[%d] [%-5p] [%t] [%c{3.}] %m%n
</Property>
<Property name="log.console.charset">UTF-8</Property>
<Property name="log.console.pattern">
%d %highlight{%-5p} %style{%pid}{magenta} --- [%15.15t] %style{%-37.37c{36}}{cyan} : %m%n%n
</Property>
</Properties>
<!--先定义所有的appender -->
<appenders>
<!-- 这个会打印出所有的info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年月日建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="FILE_INFO" immediateFlush="false"
fileName="${log.home}${app.name}/info_${app.name}.log"
filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/info_${app.name}_%d{yyyyMMdd}_%i.log.gz">
<!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
<Policies>
<TimeBasedTriggeringPolicy />
<!-- 日志文件归档大小 -->
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了99 -->
<DefaultRolloverStrategy max="99" />
</RollingFile>
<RollingFile name="FILE_WARN" immediateFlush="false"
fileName="${log.home}${app.name}/warn_${app.name}.log"
filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/warn_${app.name}_%d{yyyyMMdd}_%i.log.gz">
<Filters>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="99" />
</RollingFile>
<RollingFile name="FILE_ERROR" immediateFlush="false"
fileName="${log.home}${app.name}/error_${app.name}.log"
filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/error_${app.name}_%d{yyyyMMdd}_%i.log.gz">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="99" />
</RollingFile>
<!-- 控制终端输出 -->
<Console name="STDOUT" target="SYSTEM_OUT">
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout pattern="${log.console.pattern}" charset="${log.console.charset}" />
</Console>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!-- 配置日志的根节点 -->
<Root level="INFO">
<appender-ref ref="FILE_ERROR" />
<appender-ref ref="FILE_WARN" />
<appender-ref ref="FILE_INFO" />
<appender-ref ref="STDOUT" />
</Root>
<!-- 第三方日志系统 -->
<logger name="org.springframework.web" level="WARN"/>
<logger name="org.springboot.sample" level="WARN" />
</loggers>
</configuration>
3、关联日志输出文件
#配置日志
logging.config=classpath:log4j2-spring-release.xml
#logging.config=classpath:log4j2-spring-dev.xml
4、输出日志测试运行
将在配置的日志输出目录,生成对应的配置文件