[英]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.xml
或logback-grrovy.xml
等已經在claspath
,但無法找到任何
然后我嘗試了一些改變:
將名稱從 logback.xml 更改為 logback-spring.xml
從 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.