我有2个使用Logback的Spring Boot(1.4.1-RELEASE)控制台应用程序。两个配置文件或多或少相同,位于我的 / src / main / resources 文件夹中,并命名为 logback-spring.xml 。
两个项目都在其pom.xml中包含maven dependency spring-boot-starter-logging并获取logback Version 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 ,它突然正常工作(即使使用我正在使用的弹簧配置文件)。
所涉及的任何配置(意味着pom.xml,application.properties等)都没有明显的区别。
有人知道为什么会这样吗?我发现这种行为相当令人困惑。
答案 0 :(得分:9)
我知道它有些陈旧,但我有同样的问题并想出来......所以原因只是你的类路径上有一个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将被拿起。
答案 1 :(得分:3)
我会在application.properties中指定配置文件的位置。
logging.config=path
Spring可能没有找到这个文件名。 Spring doc
他们建议使用此名称 logback-spring.xml 而不仅仅是logback.xml
如果可能,我会将配置放在application.properties中。
答案 2 :(得分:0)
要使用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>
因此,删除冗余的日志记录依赖项。
答案 3 :(得分:0)
我通过在application.yml中添加logging.config解决了这个问题
logging:
config: classpath:logback-spring.xml
答案 4 :(得分:0)
好的。
我知道这是一个棘手的问题。但是您可以将gradle对话“翻译”为maven。
这个主旨是:
在我的root 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-classic / 1.2.3
有
org.slf4j»slf4j-api 1.7.25 1.7.30
因此,logback-classic / 1.2.3可以很好地介于1.7.25和1.7.30之间
也许有更好的方法,但这就是我在依赖游戏中“接近”的方法。
slf4jVersion = "1.7.30"
logbackClassicVersion = '1.2.3'
但是您最好去maven repostitory或jcenter并找到最新版本,并且还要找到这两种相互配合的版本。
答案 5 :(得分:0)
我遇到了同样的问题,并尝试查找 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>