Spring boot не загружает logback-spring.xml

У меня есть образец приложения Spring Boot, которое использует Logback для ведения журнала. Итак, у меня есть logback-spring.xml рядом с банкой для настройки ведения журнала, однако он не будет работать, если я не укажу его с помощью logging.config, например: logging.config=logback-spring.xml.

Я просмотрел Spring Boot игнорирует logback-spring.xml, где предполагается, что это может быть потому, что где-то уже есть spring.xml, но установка точки останова на org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile) показывает, что файл журнала пуст.

Я здесь что-то не так делаю?

он работает, если у вас есть файл в папке ресурсов?

Patrick 29.05.2018 08:12

@Patrick да, он работает, когда находится в папке ресурсов.

Tamerlane 29.05.2018 14:34

Вы пробовали переименовать logback-spring.xml в logback.xml?

Shubham Kadlag 01.06.2018 07:48

Не помещайте файл рядом с JAR. Поместите logback-spring.xml в корень вашего проекта. Выполните сборку bootJar и запустите JAR. Это работает ?

soufrk 04.06.2018 12:22

@Tamerlane - Если он работает нормально, когда конфигурация находится в папке ресурсов, которая проверяет вашу конфигурацию входа в систему, все в порядке. Не могли бы вы скопировать и вставить всю командную строку Java, как вы запускаете это весеннее загрузочное приложение? вы можете поделиться своим base.xml?

runwuf 04.06.2018 18:42

Вы говорите, что это работает, когда вы используете "logging.config = logback-spring.xml", так что то, что вы пытаетесь сделать, работает правильно? что еще вам нужно? И он работает точно так же, как написано в Spring doc, так что все для меня хорошо: «По умолчанию Spring Boot берет исходную конфигурацию из своего местоположения по умолчанию для системы (например, classpath: logback.xml для Logback), но вы можете указать расположение файла конфигурации с помощью свойства "logging.config". docs.spring.io/spring-boot/docs/1.5.x/reference/html/…

Tristan 09.08.2019 16:48

Возможно, вы ожидали, что logback.xml будет искать точно так же, как application.properties, но это не так: docs.spring.io/spring-boot/docs/current/reference/html/…

Tristan 09.08.2019 16:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
22
7
22 344
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Причин такого поведения может быть две:

Причина 1: logback-spring.xml почему-то отсутствует в пути к классам. Вы можете проверить это во время выполнения, распечатав System.getProperty("java.class.path") и проверив, присутствует ли в выходных данных папка, содержащая logback-spring.xml.

Причина 2: если причина 1 не является проблемой, значит, в пути к классам уже есть файл с именем logback.xml или logback-spring.xml, и это может вызвать конфликт. Теперь вам нужно найти этот файл. Вы можете попробовать переименовать logback-spring.xml в logback.xml и проверить поведение.

Просто определите эти строки в своем logback-spring.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<configuration>
    <include resource = "org/springframework/boot/logging/logback/base.xml"/>
    <logger name = "org.springframework.web" level = "DEBUG"/>
</configuration>

Работай на меня. Спасибо

Bardez 08.12.2020 01:59
Ответ принят как подходящий

По умолчанию Spring будет нет искать ресурсы вне файла jar. Если вы хотите использовать внешний файл конфигурации логбэка, вы должны передать его местоположение при запуске jar:

$ java -jar -Dlogback.configurationFile=/full_path/logback.xml app.jar

Пожалуйста, не включайте logback.xml в окончательный файл Jar, это приведет к появлению нескольких файлов logback.xml в пути к классам.

источник происхождения?

zhaoyou 24.04.2019 10:05

Это когда вы хотите настроить logback.xml с помощью собственного способа регистрации: logback.qos.ch/manual/configuration.html#configFileProperty, но если вы хотите сделать это способом весенней загрузки, вы можете просто установить logging.config с помощью относительный путь (logging.config = relative / path / logback.xml) в application.properties или в "java -jar"

Tristan 09.08.2019 16:42

Я не знаю, почему у вас это не работает. Я создал файл logback-spring.xml в папке ресурс, и он работал нормально.

Ниже приводится содержимое файла журнала:

<?xml version = "1.0" encoding = "UTF-8"?>
<configuration scan = "true">
    <include resource = "org/springframework/boot/logging/logback/base.xml"/>
    <property name = "LOGDIR" value = "logs"></property>
    <property name = "APP_NAME" value = "spring-boot-sample"></property>

    <appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender">
        <layout class = "ch.qos.logback.classic.PatternLayout">
            <Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
        </layout>
    </appender>

    <appender name = "ROLLINGFILE" class = "ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOGDIR}/${APP_NAME}-log.%d{MM-dd-yyyy}.log</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>utf-8</charset>
            <Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
        </encoder>
    </appender>

    <springProfile name = "local">
        <root level = "debug">
            <appender-ref ref = "CONSOLE"/>
        </root>
        <logger name = "co.jp.oha" additivity = "false" level = "debug">
            <appender-ref ref = "ROLLINGFILE"/>
            <appender-ref ref = "STDOUT"/>
        </logger>
    </springProfile>
</configuration>

Вы можете попробовать с ними. Надеюсь, это вам поможет.

не могли бы вы поделиться app.properties & pom.xml? Или поделитесь ссылкой на github с smple

StackOverFlow 04.08.2018 06:32

Согласно описанию проблемы, вы используете внешнюю версию конфигурации журнала. Файл хранится вне банки. Таким образом, вы должны указать путь как аргумент времени выполнения, как показано ниже:

-Dlogging.config=file:logback-spring.xml

Или укажите то же свойство в application.properties, как показано ниже:

logging.config=file:logback-spring.xml

Причина, по которой он забирает файл из папки ресурсов, потому что он настроен таким образом весной. Spring возьмите файл журнала по нижеприведенным именам из пути к классам.

logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy

Пожалуйста, проверьте соответствующие документы на конфигурация настраиваемого журнала spring -boot

Dockerfile:

COPY /rootProjectName/src/main/resources/logback-spring.xml /deployments/  

application-dev.properties:

logging.config=classpath:logback-spring.xml

Я запускаю контейнер докеров и должен скопировать папку ресурсов в папку развертывания в моем файле Docker ... но однажды скопировал over
это значение logging.config, которое работает для меня (добавление слова classpath)

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