Le démarrage du spring 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 jar pour configurer la journalisation, mais cela ne fonctionne que si je le spécifie avec logging.config , ex: logging.config=logback-spring.xml .

J’ai examiné Spring Boot en ignorant logback-spring.xml, qui suggère peut-être qu’il existe déjà un spring.xml , mais placer un point d’arrêt sur org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile) montre que logFile est vide.

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

Par défaut, Spring ne cherchera pas de ressources en dehors du fichier jar. Si vous souhaitez utiliser un fichier de configuration de journalisation 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înera plusieurs fichiers logback.xml dans le chemin d’access aux classes.

Un tel comportement peut avoir deux raisons:

Raison 1: 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.

Motif 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’access 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.

Il suffit de définir ces lignes dans votre logback-spring.xml

      

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

Voici le contenu du fichier journal:

        %d ${APP_NAME} %-5level [%thread] %logger: %msg%n     ${LOGDIR}/${APP_NAME}-log.%d{MM-dd-yyyy}.log 90   utf-8 %d ${APP_NAME} %-5level [%thread] %logger: %msg%n             

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

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. Vous devez 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 à partir du dossier de ressources, car il est configuré au spring de cette façon. Printemps ramasser le fichier de journal en dessous des noms de classpath.

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

Veuillez vérifier les documents pertinents lors de la configuration du journal personnalisé spring-boot