欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件

程序员文章站 2022-07-02 17:10:12
问题描述 SpringBoot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示)。 解决方案 通过各种资料的搜索,最终发现问题的所在(logback配置如下)。 通过分析上面配置发现base.xml中包含了以下内容: 从base.xml中可以看出 ......

问题描述

springboot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示)。
SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件

解决方案

通过各种资料的搜索,最终发现问题的所在(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上查询,只需要将

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

替换成

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

即可。

问题解决。