标准 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 的日志配置:

 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging 

 

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 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄