it-swarm.com.de

Spring Boot lädt nicht logback-spring.xml

Ich habe eine Beispiel-Spring-Boot-Anwendung, die Logback zur Protokollierung verwendet. Ich habe also logback-spring.xml neben dem jar, um die Protokollierung zu konfigurieren, es funktioniert jedoch nicht, es sei denn, ich gebe es mit logging.config an, zB: logging.config=logback-spring.xml.

Ich habe in Spring Boot nachgesehen, dass die Datei logback-spring.xml ignoriert wird wobei darauf hingewiesen wird, dass dies möglicherweise daran liegt, dass bereits irgendwo ein spring.xml vorhanden ist. Wenn Sie breakpoint auf org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile) setzen, ist jedoch logFile leer.

Mache ich hier etwas falsch?

11
Tamerlane

Spring sucht standardmäßig not nach Ressourcen außerhalb der JAR-Datei . Wenn Sie eine externe Logback-Konfigurationsdatei verwenden möchten, müssen Sie deren Position beim Starten des Jar-Objekts angeben:

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

Bitte fügen Sie die Datei logback.xml nicht in die endgültige Jar-Datei ein, da dies zu mehreren logback.xml-Dateien im Klassenpfad führt.

9
JohanB

Gemäß der Beschreibung des Problems verwenden Sie die externalisierte Version Ihrer Protokollkonfiguration. Die Datei wird außerhalb des Gefäßes aufbewahrt. Daher müssen Sie den Pfad als Laufzeitargument wie folgt angeben:

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

Oder erwähnen Sie dieselbe Eigenschaft in application.properties wie folgt:

logging.config=file:logback-spring.xml

Der Grund, warum er die Datei aus dem Ressourcenordner abholt, weil sie im Frühjahr so ​​konfiguriert ist. Nehmen Sie die Logback-Datei im Frühling unter den folgenden Namen von classpath auf.

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

Bitte überprüfen Sie die entsprechenden Dokumente unter Spring-Boot-Custom-Log-Konfiguration

1
Sangam Belose

Ich weiß nicht, warum es für Sie nicht funktioniert. Ich habe eine logback-spring.xml -Datei im Ordner resource angelegt und es hat gut funktioniert.

Folgendes ist der Inhalt der Protokolldatei:

<?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>

Sie können es mit ihnen versuchen. Ich hoffe, dass es dir helfen wird.

0
Giang Phan

Definieren Sie diese Zeilen einfach in Ihrer 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>
0
this_is_om_vm

Es kann zwei Gründe für ein solches Verhalten geben: 

Grund 1: Die logback-spring.xml befindet sich irgendwie nicht im Klassenpfad. Sie können dies zur Laufzeit überprüfen, indem Sie System.getProperty("Java.class.path") drucken und prüfen, ob der Ordner mit der Datei logback-spring.xml in der Ausgabe enthalten ist.

Grund 2 : Wenn Grund 1 nicht das Problem ist, befindet sich bereits eine Datei mit dem Namen logback.xml oder logback-spring.xml im Klassenpfad. Dies kann zu Konflikten führen. Jetzt müssen Sie diese Datei finden. Sie können versuchen, logback-spring.xml in logback.xml umzubenennen und das Verhalten zu überprüfen.

0
Shubham Kadlag