SpringBoot使用logback自定義配置時遇到的坑 --- 在 /tmp目錄下自動生成spring.log文件

問題描述

SpringBoot項目使用logback自定義配置後,會在/tmp/ 目錄下生成 spring.log的文件(以下圖所示)。
html

解決方案

經過各類資料的搜索,最終發現問題的所在(logback配置以下)。
<?xml version="1.0" encoding="UTF-8"?>    
<configuration scan="true">    
  <include resource="org/springframework/boot/logging/logback/base.xml"/>    

  <springProperty scope="context" name="springAppName" source="spring.application.name"/>    
  <property name="LOG_FILE" value="logs/${springAppName}"/>​    

  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">    
    <layout class="ch.qos.logback.classic.PatternLayout">    
      <pattern>    
        %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable    
      </pattern>    
    </layout>    
  </appender>    
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    
      <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>    
      <maxHistory>90</maxHistory>    
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">    
        <maxFileSize>200MB</maxFileSize>    
      </timeBasedFileNamingAndTriggeringPolicy>    
    </rollingPolicy>    
    <encoder>    
      <charset>utf-8</charset>    
      <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>    
    </encoder>    
  </appender>    
  <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">    
    <queueSize>512</queueSize>    
    <appender-ref ref="FILE"/>    
  </appender>    
  <root level="DEBUG">    
    <appender-ref ref="CONSOLE"/>    
    <appender-ref ref="ASYNC"/>    
  </root>    

  <!-- https://logback.qos.ch/manual/configuration.html#shutdownHook and https://jira.qos.ch/browse/LOGBACK-1090 -->    
  <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>    

  <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">    
    <resetJUL>true</resetJUL>    
  </contextListener>    

</configuration>

經過分析上面配置發現base.xml中包含了如下內容:

<?xml version="1.0" encoding="UTF-8"?>
 
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
 
<included>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</included>

從base.xml中能夠看出來,會在/tmp/目錄下默認生成一個spring.log,問題已經發現了,那就說明這裏的配置須要更改,改爲什麼呢?
經過在github上查詢,只須要將java

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

替換成git

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

便可。github

問題解決。spring

相關文章
相關標籤/搜索