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、输出日志测试运行
将在配置的日志输出目录,生成对应的配置文件