logback使用

自定义配置

总体结构

  • 使用<appender>元素定义输出端,其中<encoder>指定输出样式,<filter>指定过滤规则,带有policy的如<rollingPolicy>则指定输出规则(如输出的日志文件按什么逻辑拆分等)
  • <root><logger>元素可指定根logger或某个指定logger的输出端、输出的日志等级、是否继续传递给上级logger处理等。

代码实例

src/main/resources/logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
    <!-- 引入Spring Boot的默认样式配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>  

    <!-- 使用Spring Boot的自定义配置 -->
    <springProperty scope="context" name="logging.path" source="language-trainer.logging.path"/>  

    <!-- 定义一个控制台输出端  -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>  
        </encoder>
    </appender>

    <!-- 定义一个文件输出端 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>  
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}.log</fileNamePattern>  
            <maxHistory>90</maxHistory>  
            <totalSizeCap>2GB</totalSizeCap>  
        </rollingPolicy>
    </appender>
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>  
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
            <level>error</level>  
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}.error.log</fileNamePattern>  
            <maxHistory>365</maxHistory>  
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 根logger指定输出端 -->
    <root>
        <appender-ref ref="console"/>  
        <appender-ref ref="file"/>  
        <appender-ref ref="errorFile"/>  
    </root>
</configuration>

application.yml

logging:  
  level:  
    root: info  
  
language-trainer:  
  logging:  
    path: /var/logs/

分profile配置

将配置嵌入在<springProfile>元素中,即可将配置按profile区分

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>  
    <springProperty scope="context" name="logging.path" source="language-trainer.logging.path"/>  

    <springProfile name="test,prod">  
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <encoder>            
                <pattern>${FILE_LOG_PATTERN}</pattern>  
            </encoder>        
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}.log</fileNamePattern>  
                <maxHistory>90</maxHistory>  
                <totalSizeCap>2GB</totalSizeCap>  
            </rollingPolicy>    
        </appender>    
        <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <encoder>            
                <pattern>${FILE_LOG_PATTERN}</pattern>  
            </encoder>        
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
                <level>error</level>  
            </filter>        
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}.error.log</fileNamePattern>  
                <maxHistory>365</maxHistory>  
                <totalSizeCap>1GB</totalSizeCap>  
            </rollingPolicy>    
        </appender>
    </springProfile>  
      
    <springProfile name="prod">  
        <root>        
            <appender-ref ref="file"/>  
            <appender-ref ref="errorFile"/>  
        </root>
    </springProfile>  
      
    <springProfile name="test">  
        <root>        
            <appender-ref ref="file"/>  
        </root>
    </springProfile>
</configuration>

logger配置

<!-- 指定某个logger,配置等级以及是否向上级logger继续传递 -->
<logger name="com.tinktek.odm" level="debug" additivity="false">  
    <appender-ref ref="console"/>  
</logger>  
  
<root level="info">  
    <appender-ref ref="console"/>  
</root>

pattern详解

显示元素

  • %d 日期时间
  • %p 日志等级
  • %t 线程名称
  • %logger logger名称
  • %m 日志信息
  • %n 换行
  • ${PID} 进程号,Spring Boot加强

格式控制

  • %d{yyyy-MM-dd HH:mm:ss.SSS} 日期格式
  • %logger{39} logger名称缩略,一般将前面的包名缩到一个字母,以满足最大长度要求
  • %20logger 最小长度20,右对齐,左边补空格
  • %-20logger 最小长度20,左对齐,右边补空格
  • %.30logger 最大长度30,超出长度则截断前面的内容
  • %.30logger 最大长度30,超出长度则截断后面的内容
  • %20.30logger 最小长度规则与最大长度规则同时定义

颜色控制

导入配置

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

表达式例子

%clr([%t]){faint}`

可用颜色

  • blue
  • cyan
  • faint
  • green
  • megenta
  • red
  • yellow

Spring Boot默认pattern

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<pattern>${FILE_LOG_PATTERN}</pattern>

参考文档