Невозможно прочитать свойства в logback-spring.xml в Springboot

Я пытаюсь создать функцию ведения журнала с помощью logback-spring.xml в моем приложении Springboot, но не могу прочитать значения свойств (например, log.dest.path) в файле logback-spring.xml.

Подход, который я пробовал:

Я динамически загружаю файл свойств (YAML) для разных сред (dev, stage, prod) на основе профилей через @PropertySource. Профилирование работает нормально, загружен правильный файл YAML (например: - application.dev.yml)

logback-spring.xml:

    <configuration debug = "true">
  <property name = "PROFILE" value = "-${spring.profiles.active}" />
  <timestamp key = "timestamp" datePattern = "yyyy-MM-dd" />
 <springProperty scope = "context" name = "destination"
        source = "log.dest.path" />
    <springProperty name = "fileName" scope = "context"
        source = "spring.application.name" />
    <springProfile name = "dev">
        <appender name = "FILE" class = "ch.qos.logback.core.FileAppender">
            <file>${destination}/log${PROFILE}/${fileName}_${PROFILE}-${timestamp}.log</file>
            <encoder>
                <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>
    <springProfile name = "production">
        <appender name = "FILE" class = "ch.qos.logback.core.FileAppender">
            <file>${destination}/log${PROFILE}/${fileName}_${PROFILE}-${timestamp}.log</file>
            <encoder>
                <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>
    <appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name = "com.test" additivity = "true">
        <appender-ref ref = "FILE" />
    </logger>

    <root level = "debug">
        <appender-ref ref = "STDOUT" />
        <appender-ref ref = "FILE" />
    </root>
</configuration>

Файл конфигурации:

@Configuration
public class Config {

    @Configuration
    @Profile({ "dev", "default" })
    @PropertySource(factory = YamlPropertySourceFactory.class, value = { "classpath:application.dev.yml" })
    static class DevConfig {
    }

    @Configuration
    @Profile("stage")
    @PropertySource(factory = YamlPropertySourceFactory.class, value = { "file:////D://file//config.yml" })
    static class StageConfig {
    }
}

Я использовал подход @PropertySource для загрузки файлов свойств, потому что файлы свойств размещаются извне в одной из сред.

Когда приложение запускается, файл журнала не создается по указанному пути, указанному в файле свойств, вместо этого в корневом каталоге проекта создается папка с destination_IS_UNDEFINED.

Но я получаю свойства среды через приведенный ниже код:

@SpringBootApplication
public class ProfileProject extends SpringBootServletInitializer {

    public static void main(String[] args) {
        ConfigurableApplicationContext configurableApplicationContext = new SpringApplicationBuilder(
                ProfileProject.class).sources(ProfileProject.class).run(args);
        ConfigurableEnvironment environment = configurableApplicationContext.getEnvironment();      
        System.out.println("Env variables Log Dest path ----> : " + environment.getProperty("log.dest.path"));

    }

}

application.dev.yml: - образец

server:
  port: 7999
app:
  name: DEVELOPMENT
spring:
  application:
    name: ProfileDEV
log:
  dest:
    path: D:\development
logging:
 config: classpath:logback-spring.xml

Подход сработал:

Иметь все свойства уровня профиля для соответствующего файла yaml (например: -application. {Env} .yml) и иметь файл application.properties, в котором помещаются свойства, необходимые для logback-spring.xml.

Примечание:-

SpringBoot - ведение журнала, не дожидаясь завершения настройки @ProperySource. В результате файл свойств, загруженный с помощью этого подхода, не будет прочитан logback-spring.xml, но будет читать application.properties.

общий доступ к файлу свойств приложения и проводнику проекта

Hardik 10.10.2018 14:51

Разделили содержимое файла. Logback-spring.xml, appliaction.dev.yml находятся непосредственно в папке ресурсов.

arun abraham 10.10.2018 15:08

Мне удалось получить его рабочий пост по ссылке - github.com/spring-projects/spring-boot/issues/…. Теперь я использую Springprofilesin logback-spring.xml для большей гибкости

arun abraham 10.10.2018 16:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
2 871
1

Ответы 1

вы можете использовать атрибут scope со значением контекста для доступа к свойству из среды.

вы также можете установить атрибут defaultValue.

Например:

<springProperty scope = "context" name = "destination" 
                source = "log.dest.path" defaultValue = "\temp"/>

если logback-spring.xml не загружен, добавьте свойство в файл application.properties.

logging.config: classpath:./logback-spring.xml

Я попытался добавить атрибут scope = "context", не читая значение свойства. Но я получаю значения среды через приведенный выше код (Edit)

arun abraham 10.10.2018 14:32

Вы проверяли загруженный файл logback-spring.xml или нет?

Hardik 10.10.2018 14:45

Файл logback-spring.xml загружен и может отслеживать журналы, но свойство не читается в файле. Я установил <configuration debug = "true">

arun abraham 10.10.2018 14:49

Другие вопросы по теме