web-dev-qa-db-ja.com

logback-spring.xmlを無視するSpring Boot

Logbackを使用する2つのSpring Boot(1.4.1-RELEASE)コンソールアプリケーションがあります。どちらの構成ファイルもほぼ同じで、my / src/main/resourcesフォルダーにあり、名前はlogback-spring.xmlです。

両方のプロジェクトのpom.xmlにMaven依存関係spring-boot-starter-loggingが含まれており、ログバックバージョン1.1.7をフェッチします。

両方のpomで定義されているSpring Boot構成:

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

ただし、アプリケーションを実行すると、一方がlogback構成を完全に無視するように見え、もう一方は期待どおりにそれを取得します。

正しく機能しなかったアプリケーションのファイル名をlogback.xmlに変更すると、突然使用できます(使用しているスプリングプロファイルでも)。

関連する構成(pom.xml、application.propertiesなど)に明らかな違いはありません。

なぜそうなるのか、誰か知っていますか?私はこの振る舞いがかなり混乱していると思います。

11

私はそれが多少古いことを知っていますが、同じ問題があり、それを理解しました...その理由は、あなたのクラスパスにlogback.xmlがあることです(どこか、必ずしも私のプロジェクトで開始する必要はありませんが、私の場合)それは依存関係でした)。

ここを見てください:org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile)

ブレークポイントを設定すると、表示されます。

Spring Bootがクラスパスでログバック構成(「logback-test.groovy」、「logback-test.xml」、「logback.groovy」、「logback.xml」)を検出しない場合、logback-spring.xmlは次のようになります。拾った。

14
ltuska

そのような設定ファイルの場所をapplication.propertiesで指定します。

logging.config=path

Springはこのファイル名を探していない可能性があります。 春のドキュメント

彼らは、logback.xmlだけでなく、この名前logback-spring.xmlの使用を提案しています

可能であれば、構成をapplication.propertiesに配置します。

3
kimy82

私はapplication.ymlにlogging.configを追加することでこの問題を解決しました

logging:
  config: classpath:logback-spring.xml
1
Donald Choi

Logbackを使用するには、それとクラスパスにspring-jclを含める必要があります。これを行う最も簡単な方法は、すべてがspring-boot-starter-loggingに依存するスターターを使用することです。 Webアプリケーションの場合、onlyspring-boot-starter-webが必要です。これは、ロギングスターターに推移的に依存するためです。 Mavenを使用する場合、次の依存関係によりログが追加されます。

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

そのため、冗長であるロギングの依存関係を削除します。

1
Hans Schreuder