У меня есть образец приложения 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 да, он работает, когда находится в папке ресурсов.
Вы пробовали переименовать logback-spring.xml в logback.xml?
Не помещайте файл рядом с JAR. Поместите logback-spring.xml в корень вашего проекта. Выполните сборку bootJar и запустите JAR. Это работает ?
@Tamerlane - Если он работает нормально, когда конфигурация находится в папке ресурсов, которая проверяет вашу конфигурацию входа в систему, все в порядке. Не могли бы вы скопировать и вставить всю командную строку Java, как вы запускаете это весеннее загрузочное приложение? вы можете поделиться своим base.xml?
Вы говорите, что это работает, когда вы используете "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/…
Возможно, вы ожидали, что logback.xml будет искать точно так же, как application.properties, но это не так: docs.spring.io/spring-boot/docs/current/reference/html/…




Причин такого поведения может быть две:
Причина 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>
Работай на меня. Спасибо
По умолчанию Spring будет нет искать ресурсы вне файла jar. Если вы хотите использовать внешний файл конфигурации логбэка, вы должны передать его местоположение при запуске jar:
$ java -jar -Dlogback.configurationFile=/full_path/logback.xml app.jar
Пожалуйста, не включайте logback.xml в окончательный файл Jar, это приведет к появлению нескольких файлов logback.xml в пути к классам.
источник происхождения?
Это когда вы хотите настроить logback.xml с помощью собственного способа регистрации: logback.qos.ch/manual/configuration.html#configFileProperty, но если вы хотите сделать это способом весенней загрузки, вы можете просто установить logging.config с помощью относительный путь (logging.config = relative / path / logback.xml) в application.properties или в "java -jar"
Я не знаю, почему у вас это не работает. Я создал файл 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
Согласно описанию проблемы, вы используете внешнюю версию конфигурации журнала. Файл хранится вне банки. Таким образом, вы должны указать путь как аргумент времени выполнения, как показано ниже:
-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)
он работает, если у вас есть файл в папке ресурсов?