簡體   English   中英

Spring Boot 忽略 logback-spring.xml

[英]Spring Boot ignoring logback-spring.xml

我有 2 個使用 Logback 的 Spring Boot (1.4.1-RELEASE) 控制台應用程序。 兩個配置文件或多或少相同,位於我的/src/main/resources文件夾中並命名為logback-spring.xml

這兩個項目在其 pom.xml 中都包含 maven 依賴 spring-boot-starter-logging 並獲取 logback 版本 1.1.7。

兩個 poms 中定義的 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 ,它會突然正常工作(即使使用我在其中使用的 spring 配置文件)。

所涉及的任何配置(即 pom.xml、application.properties 等)都沒有明顯差異。

有人知道為什么會這樣嗎? 我覺得這種行為相當混亂。

我知道它有點舊,但我遇到了同樣的問題並想通了......所以原因很簡單,你的類路徑上有一個 logback.xml(在我的情況下,不一定在你開始的項目中這是一個依賴)。

看看這里: org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile)

設置斷點,然后你會看到。

如果 spring boot 在類路徑上沒有找到任何 logback 配置(“logback-test.groovy”、“logback-test.xml”、“logback.groovy”、“logback.xml”),logback-spring.xml 將是已接。

我通過在 application.yml 中添加 logging.config 解決了這個問題

logging:
  config: classpath:logback-spring.xml

我會在 application.properties 中指定這樣的配置文件的位置。

logging.config=path

Spring 可能不會查找此文件名。 春季文檔

他們建議使用這個名稱logback-spring.xml而不僅僅是 logback.xml

如果可能,我會將配置放在 application.properties 中。

要使用 Logback,您需要在類路徑中包含它和 spring-jcl。 最簡單的方法是通過啟動器,它們都依賴於 spring-boot-starter-logging。 對於 Web 應用程序,您需要 spring-boot-starter-web,因為它傳遞地依賴於日志記錄啟動器。 如果您使用 Maven,以下依賴項會為您添加日志記錄:

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

所以刪除日志依賴是多余的。

好的。

我知道這是一個 Maven 問題。 但是您可以將 gradle 對話“翻譯”為 maven。

這個想法的要點是:

在我的根 build.gradle 文件中。

我不得不排除這些項目。 gradle 這樣做的方式是,這是一種“對這個項目的全局”類型的排除,因此它將它們全部放在一個地方。 但是你可以在 maven 中做同樣的“排除”/清理,它看起來會有所不同。 groupid/artifactid 是重要的。

allprojects {


    configurations {
     
        all {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-log4j2'
        }
    }


}

然后在我的(頂層)build.gradle(我沒有單體,我有一個包含多個模塊的項目)。 我添加了這些依賴項:

implementation group: 'ch.qos.logback', name: 'logback-classic', version: logbackClassicVersion
    
implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion

我的兩個版本的變量值恰好是(在寫這篇文章的時候)

    slf4jVersion = "1.7.30"
    logbackClassicVersion = '1.2.3'

你如何找到兩個很好玩的版本?

例如,如果您查看:

https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.3

並找到“編譯依賴項”,你會看到

logback-經典/1.2.3

org.slf4j » slf4j-api 1.7.25 1.7.30

所以在 1.7.25 和 1.7.30 之間的某個地方會很好地與 logback-classic/1.2.3 配合使用

可能有更好的方法,但這就是我在依賴游戲中“接近”的方式。

    slf4jVersion = "1.7.30"
    logbackClassicVersion = '1.2.3'

但是您最好去 maven repostitory 或 jcenter 並找到最新版本以及這兩個相互配合的版本。

我遇到了同樣的問題並嘗試查找是否有任何logback.xmllogback-grrovy.xml等已經在claspath ,但無法找到任何

然后我嘗試了一些改變:

  1. 將名稱從 logback.xml 更改為 logback-spring.xml

  2. 從 pom.xml 中刪除了以下依賴項而不是

     <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency>

我試過這個

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM