将所有日志都存储在一个文件中既不利于排查问题,同时文件大小也会随着应用的运行越来越大,正确的做法应该是将error日志和其他日志分开,并且不同级别的日志根据时间进行记录存储
依赖
SpringBoot框架内置了logback和slf4j框架,所以不需要在添加任何相关依赖避免冲突
配置文件logback-spring.xml
分类收集日志的核心就是日志的配置文件了,logback框架会默认加载classpath
下命名为logback-spring
或logback
的配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<property resource="logback.properties"/>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</layout>
</appender>
<!--获取比info级别高(包括info级别)但除error级别的日志-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_INFO_HOME}//%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>
部分标签说明
<root>
标签,必填标签,用来指定最基础的日志输出级别- 标签,添加
append
- 标签,添加
<append>
标签,通过使用该标签指定日志的收集策略name
属性指定appender 命名class
属性指定输出策略,通常有两种,控制台输出和文件输出,文件输出就是将日志进行一个持久化
<filter>
标签,通过使用该标签指定过滤策略<level>
标签指定过滤的类型
<encoder>
标签,使用该标签下的<pattern>
标签指定日志输出格式<rollingPolicy>
标签指定收集策略,比如基于时间进行收集<fileNamePattern>
标签指定生成日志保存地址