web-dev-qa-db-fra.com

Spring Boot en ignorant logback-spring.xml

J'ai 2 applications de console Spring Boot (1.4.1-RELEASE) utilisant Logback. Les deux fichiers de configuration sont plus ou moins identiques, se trouvent dans mon dossier/src/main/resources et sont nommés logback-spring.xml .

Les deux projets incluent la dépendance maven spring-boot-starter-logging dans leur fichier pom.xml et extraient le journal de la version 1.1.7.

La config Spring Boot telle que définie dans les deux poms:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
    <relativePath />
</parent>

<groupId>d.m.v.app-a</groupId>
<artifactId>my-app-a</artifactId>
<version>1.0.16-SNAPSHOT</version>
<packaging>jar</packaging>  

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
</dependencies>

Cependant, lors de l'exécution des applications, l'une d'entre elles semble ignorer complètement la configuration de la journalisation, tandis que l'autre la récupère comme prévu. 

Si je change le nom du fichier en logback.xml pour l’application qui ne fonctionne pas correctement, cela fonctionne soudainement (même avec les profils Spring que j’utilise avec eux).

Il n'y a aucune différence apparente dans aucune des configurations impliquées (c'est-à-dire pom.xml, application.properties, etc.).

Est-ce que quelqu'un sait pourquoi cela pourrait être le cas? Je trouve ce comportement plutôt déroutant.

7

Je sais que c'est un peu vieux, mais j'avais le même problème et l'ai compris ... donc la raison est simplement que vous avez un logback.xml sur votre chemin de classe (quelque part, pas nécessairement dans votre projet que vous commencez, dans mon cas c'était une dépendance).

Jetez un coup d'oeil ici: org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile)

définir un point d'arrêt, alors vous verrez.

Si Spring Boot ne trouve aucune configuration de journal ("logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml") sur le chemin de classe, logback-spring.xml sera ramassé.

9
ltuska

Je spécifierais dans application.properties l'emplacement du fichier de configuration comme celui-ci.

logging.config=path

Spring ne recherche peut-être pas ce nom de fichier. Printemps doc

Ils suggèrent d'utiliser ce nom logback-spring.xml plutôt que juste logback.xml

Je placerais la configuration dans application.properties si possible.

3
kimy82

Pour utiliser Logback, vous devez l'inclure et spring-jcl dans le classpath. Le moyen le plus simple de le faire consiste à utiliser les démarreurs, qui dépendent tous de la journalisation print-boot-starter. Pour une application Web, vous avez besoin de only spring-boot-starter-web, car il dépend de manière transitoire du démarreur de la journalisation. Si vous utilisez Maven, la dépendance suivante ajoute la journalisation pour vous:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Donc, supprimez la dépendance de journalisation car elle est redondante.

0
Hans Schreuder