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