在spring引导应用程序配置属性之前加载logback-spring.xml

时间:2017-05-17 15:14:28

标签: spring-boot logback

我有自己的logback base.xml文件,其中我定义了不同应用程序使用的预定义文件追加程序。 我希望每个应用程序可以配置日志目录,并在application.properties(log.path)中使用属性,并且在没有提供的情况下有一个默认值(/ var / log),所以我有:

base.xml

<included>
<property name="logPath" value="${logPath:-/var/log}"/>   
<appender name="TEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logPath}/test.log</file>
    ...
</appender>

spring boot应用程序的logback-spring.xml:

<configuration>
<springProperty scope="context" name="logPath" source="log.path" />
<include resource="base.xml" />
    <root level="INFO">
        <appender-ref ref="TEST"/>
    </root>
</springProfile>

出于某种原因,我最终得到了两个日志目录,包括/ var / log和“log.dir”,似乎在Spring引导环境准备好之前解释了base.xml。

我正在运行spring-boot 1.5.2带有logback 1.1.11。

3 个答案:

答案 0 :(得分:0)

请参阅Spring Documentation,特别是关于如何将属性转移到logback的部分。尝试将logging.path用作application.properties中的属性。它应该在logback中以LOG_PATH的形式访问,而不是。

使用基本文件的常用方法是在Maven / Gradle中添加spring-boot-starter-logging并将其包括在内:

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

答案 1 :(得分:0)

我有类似的问题。我使用defaultValue。说实话,这只是一个臭臭的解决方法。

<springProperty name="configurable.canonical.name" source="canonical.name" defaultValue="${canonical_name}" />

<file>logs/${configurable.canonical.name}.log</file>

canonical_name在default.properties中定义。 Maven将在构建期间解决它。

答案 2 :(得分:0)

似乎问题是由添加spring-cloud引起的。

在spring cloud的boostraping过程中,找不到log.dir属性,并且logback会创建一个logDir_IS_UNDEFINED目录。在引导过程之后,使用正确的配置重新初始化logback。

相关的spring-cloud问题:issue-197