1、问题

今天在给项目添加logback.xml配置时,发现添加配置项引入的配置在项目启动时会加载的时候出现了问题,先是生成了APPLICATION_IS_UNDEFINED文件,后来又生成了一个正常的文件。

2、复现

上配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <springProperty scope="context" name="LOG_HOME" source="logging.file.path"
                    defaultValue="./logs"/>
    <springProperty scope="context" name="APPLICATION" source="spring.application.name" defaultValue="hdyy_jztw_erp"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n</pattern>
        </layout>
    </appender>
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--日志级别-->
            <level>INFO</level>
        </filter>
        <encoder>
            <!-- 设置打印格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${LOG_HOME}/${APPLICATION}-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>500MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    
    <logger name="com.fastjz.dao" level="DEBUG" />
    
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILEINFO" />
    </root>
</configuration>

3、分析

分析了大概原因是加载顺序的问题,刚开始网上也搜索的了下说是没有加defaultValue ,看了下自己的配置也没毛病,还是去找了加载顺序的问题。
最后看了源代码做了下面分析:
logback.xml日志配置文件会在application.properties之前加载

logback.xml—>application.properties—>logback-spring.xml

4、解决

最后解决办法是把日志配置文件从:logback.xml改为logback-spring.xml