web-dev-qa-db-fra.com

Le démarrage du printemps ne charge pas logback-spring.xml

J'ai un exemple d'application Spring Boot qui utilise Logback pour la journalisation. J'ai donc logback-spring.xml à côté du fichier jar pour configurer la journalisation, mais cela ne fonctionnera que si je le spécifie avec logging.config, ex: logging.config=logback-spring.xml.

J'ai regardé dans Spring Boot en ignorant logback-spring.xml , ce qui suggère que c'est peut-être parce qu'il y a déjà un spring.xml quelque part, mais que le point d'arrêt sur org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile) indique que logFile est vide.

Est-ce que je fais quelque chose de mal ici ?

11
Tamerlane

Par défaut, Spring cherchera non des ressources extérieures au fichier jar . Si vous souhaitez utiliser un fichier de configuration de journal externe, vous devez indiquer son emplacement lors du démarrage du fichier jar:

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

S'il vous plaît, n'incluez pas le fichier logback.xml dans le fichier Jar final, cela entraînerait plusieurs fichiers logback.xml dans le chemin d'accès aux classes.

9
JohanB

Selon la description du problème, vous utilisez la version externalisée de votre configuration de journal. Le fichier est conservé à l'extérieur du pot. Il faut donc mentionner le chemin comme argument d'exécution comme ci-dessous:

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

Ou mentionnez la même propriété dans application.properties ci-dessous:

logging.config=file:logback-spring.xml

La raison pour laquelle il récupère le fichier depuis le dossier de ressources, car il est configuré au printemps de cette façon. Spring récupère le fichier de consignation en dessous des noms de classpath.

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

Veuillez vérifier les documents appropriés à configuration du journal personnalisé spring-boot

1
Sangam Belose

Je ne sais pas pourquoi cela ne fonctionne pas pour vous. J'ai créé un fichier logback-spring.xml dans le dossier resource et cela a bien fonctionné.

Voici le contenu du fichier journal:

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

Vous pouvez essayer avec eux. J'espère que cela vous aidera.

0
Giang Phan

Il suffit de définir ces lignes dans votre 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

Un tel comportement peut avoir deux raisons: 

Raison 1: Le logback-spring.xml n'est en quelque sorte pas dans le classpath. Vous pouvez le vérifier au moment de l'exécution en imprimant System.getProperty("Java.class.path") et en vérifiant si le dossier contenant logback-spring.xml est présent dans la sortie.

Reason 2 : Si le motif 1 n'est pas le problème, il existe déjà un fichier nommé logback.xml ou logback-spring.xml dans le chemin d'accès aux classes, ce qui peut entraîner un conflit. Maintenant, vous devez trouver ce fichier. Vous pouvez essayer de renommer logback-spring.xml en logback.xml et vérifier le comportement.

0
Shubham Kadlag