Spring Boot_标准 logback.xml 配置
标准 logback.xml 配置:
<?xml version="1.0" encoding="utf-8" ?> <!-- 根节点: <configuration></configuration> 属性: debug:默认为false ,设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。 scan:配置文件如果发生改变,将会重新加载,默认值为true; scanPeriod:检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位时毫秒,当scan为true时,这个属性生效,默认时间间隔为1min。 子节点: 1:<appender>输出源</appender> 零个或多个,(输出源) 2:<logger>记录器</logger> 零个或多个 3:<root>根记录器</root> 最多一个,没有就不输出日志 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 8个日志级别从高到低依次为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!-- 继承spring boot提供的logback配置,Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台 --> <!--<include resource="org/springframework/boot/logging/logback/base.xml" />--> <property name="MY_LOG_PATH" value="D:/Idea/IdeaProjects/logback/"/> <!-- value="/logback/" --> <!-- %-5level:左对齐,最小宽度5,最大宽度无;如果logger名称长度小于5个字符,使用空格补齐。 --> <property name="MY_CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5level) %magenta(%5(${PID:- })) --- [%15.15thread] %cyan(%-40.40logger{39}) : %msg %n"/> <property name="MY_FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5level %5(${PID:- }) --- [%15.15thread] %-40.40logger{39} : %msg %n"/> <!-- 输出源输出到控制台 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。 LevelFilter:级别过滤器,根据日志级别进行过滤。输出指定级别的日志,非该级别日志被过滤掉。 --> <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> --> <!-- 默认是 PatternLayoutEncoder 类,既有layout将一个事件转化为字符串,又有将字符创写入到文件中的作用。他是encoder标签的默认类实例 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${MY_CONSOLE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> <outputPatternAsHeader>false</outputPatternAsHeader><!-- 在文件的开头打印出日志的格式信息 --> </encoder> </appender> <!-- 输出源输出到文件 --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在使用的日志文件 --> <file>${MY_LOG_PATH}/logback_info.log</file> <!-- ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。 LevelFilter:级别过滤器,根据日志级别进行过滤。输出指定级别的日志,非该级别日志被过滤掉。 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 设置滚动策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 发生滚动后的历史日志命名模式。注意:%i不可缺少;遵循文件命名规则,不可有冒号,例如:%d{yyyy-MM-dd HH:mm}_info_(%i).log; --> <fileNamePattern>${MY_LOG_PATH}/%d{yyyy-MM-dd}_info_(%i).log</fileNamePattern> <!-- 超过100MB时,触发滚动策略 --> <maxFileSize>100MB</maxFileSize> <!-- 最多保留60天log --> <maxHistory>60</maxHistory> <!-- 测试证明无作用 --> <!--<totalSizeCap>20GB</totalSizeCap>--> </rollingPolicy> <!-- 默认是 PatternLayoutEncoder 类,既有layout将一个事件转化为字符串,又有将字符创写入到文件中的作用。他是encoder标签的默认类实例 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${MY_FILE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> <outputPatternAsHeader>false</outputPatternAsHeader><!-- 在文件的开头打印出日志的格式信息 --> </encoder> </appender> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${MY_LOG_PATH}/logback_debug.log</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${MY_LOG_PATH}/%d{yyyy-MM-dd}_debug_(%i).log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${MY_FILE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> <outputPatternAsHeader>false</outputPatternAsHeader> </encoder> </appender> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${MY_LOG_PATH}/logback_error.log</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${MY_LOG_PATH}/%d{yyyy-MM-dd}_error_(%i).log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${MY_FILE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> <outputPatternAsHeader>false</outputPatternAsHeader> </encoder> </appender> <!-- 节点:<logger></logger>:设置某一个包或者具体的某一个类的日志打印级别,以及指定<appender>。通常用于从某些包中过滤掉非常详细的日志记录。 属性: name: 必选,指定受此logger约束的某一个包或者具体的某一个类 level: 可选,用来设置打印级别,大小写无关,如果未设置此属性,那么当前logger将会继承上级(root)的级别。程序会打印"等于"或"高于"所设置级别的日志 additivity: 可选,是否向上级logger(root)传递打印信息,默认为true。 子节点: <appender-ref></appender-ref> 零个或多个。表示这个appender(输出源)将会添加到logger,如果有多个<appender-ref>元素,日志都会打印到添加的<appender-ref>中。 --> <!-- 注意: 一般情况:additivity属性,表示子logger是否继承父logger(root)的appender输出源。默认情况下是true,表示子logger会在父logger的输出源里输出。这就是导致日志重复输出的原因,所以只需要将这个属性改为false即可。 Spring Boot项目中实测:addtivity="false" 无作用,logger依然会继承父logger(root)的appender输出源。 --> <logger name="com.company.project.service.HelloService" level="debug" addtivity="false"> <!-- 实测已经继承上级的appender输出源,为了阻止日志重复打印,这里不再重复声明。 <appender-ref ref="errorAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="debugAppender"/> <appender-ref ref="console"/> --> </logger> <!-- <root> 也是<logger>元素,但是它是根logger。指定最基础的日志输出级别,只有一个level属性。 level:用来设置打印级别,大小写无关,默认是DEBUG。程序会打印"等于"或"高于"所设置级别的日志 子节点: <appender-ref></appender-ref> 零个或多个。表示这个appender(输出源)将会添加到root,如果有多个<appender-ref>元素,日志都会打印到添加的<appender-ref>中。 --> <root level="info"> <appender-ref ref="errorAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="debugAppender"/> <appender-ref ref="console"/> </root> </configuration>
使用:
package com.company.project.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; @Service public class HelloService { // this.getClass() 可以由一个类的子类覆盖,您将在日志中看到子类名。有时它可能会令人困惑,因为日志实际上是在父类中执行的。 // private Logger logger = LoggerFactory.getLogger(this.getClass()); // 不推荐使用 private Logger logger = LoggerFactory.getLogger(HelloService.class); // 推荐使用 }
package com.synjones.gatewaylimita.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;import org.springframework.stereotype.Service; @Service public class HelloService { private final Log log = LogFactory.getLog(HelloService.class); }
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
Spring Boot 的日志配置:
logback 官方:
https://logback.qos.ch/manual/
https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout
包括:
PatternLayout 日志格式配置
Format modifiers 格式化修饰符
Parentheses are special 括号是特殊的
Coloring 染色
参考:
http://tengj.top/2017/04/05/springboot7/
https://www.cnblogs.com/DeepLearing/p/5663178.html
http://www.cnblogs.com/DeepLearing/p/5664941.html
https://www.cnblogs.com/warking/p/5710303.html

更多精彩