将 logback 从 1.2 升级到 1.3 停止记录

xti*_*ian 7 logback

如果我使用任何 1.3.x 或 1.4.x logback-classic 版本,我的应用程序将停止日志记录。logback.xml 文件可能甚至没有加载(如果我插入无效的 xml 或删除它,我不会收到错误)。

它与 logback 1.2.11 配合良好。

我正在使用 gradle 自动依赖解析,所以我不应该弄乱它们。

这有效:

logback-classic-1.2.11.jar + logback-core-1.2.11.jar + slf4j-api-1.7.32.jar

这不起作用:

logback-classic-1.3.3.jar + logback-core-1.3.3.jar + slf4j-api-2.0.1.jar

Eclipse 2022-09 (4.25.0) 中 Windows 10 上的 java 8

我的类路径:

activation-1.1.jar
annotations-13.0.jar
antlr-2.7.7.jar
attoparser-2.0.5.RELEASE.jar
byte-buddy-1.10.22.jar
checker-compat-qual-2.5.5.jar
checkout-sdk-1.0.5.jar
classmate-1.5.1.jar
commons-beanutils-1.9.4.jar
commons-codec-1.11.jar
commons-collections-3.2.2.jar
commons-configuration2-2.8.0.jar
commons-exec-1.3.jar
commons-fileupload-1.3.3.jar
commons-io-2.11.0.jar
commons-jxpath-1.3.jar
commons-lang3-3.12.0.jar
commons-logging-1.2.jar
commons-text-1.9.jar
concurrentlinkedhashmap-lru-1.4.2.jar
error_prone_annotations-2.5.1.jar
failureaccess-1.0.1.jar
FastInfoset-1.2.15.jar
flyway-core-5.0.5.jar
google-api-client-1.32.1.jar
google-api-client-jackson2-1.32.1.jar
google-http-client-1.39.2.jar
google-http-client-apache-v2-1.39.2.jar
google-http-client-gson-1.39.2.jar
google-oauth-client-1.31.5.jar
grpc-context-1.27.2.jar
gson-2.8.6.jar
guava-30.1.1-android.jar
hamcrest-core-1.3.jar
hibernate-commons-annotations-5.1.2.Final.jar
hibernate-core-5.5.0.Final.jar
hibernate-entitymanager-5.5.0.Final.jar
hibernate-validator-5.4.2.Final.jar
httpclient-4.5.13.jar
httpcore-4.4.14.jar
istack-commons-runtime-3.0.7.jar
j2objc-annotations-1.3.jar
jackson-annotations-2.12.7.jar
jackson-core-2.12.7.jar
jackson-databind-2.12.7.jar
jandex-2.2.3.Final.jar
javassist-3.27.0-GA.jar
javax.activation-api-1.2.0.jar
javax.inject-1.jar
javax.mail-1.6.2.jar
javax.persistence-api-2.2.jar
jaxb-api-2.3.1.jar
jaxb-runtime-2.3.1.jar
jboss-logging-3.4.2.Final.jar
jboss-transaction-api_1.2_spec-1.1.1.Final.jar
jsoup-1.9.2.jar
jsr305-3.0.2.jar
junit-4.13.2.jar
kotlin-stdlib-1.5.0.jar
kotlin-stdlib-common-1.5.0.jar
kotlin-stdlib-jdk7-1.5.0.jar
kotlin-stdlib-jdk8-1.5.0.jar
listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
logback-classic-1.3.3.jar
logback-core-1.3.3.jar
metadata-extractor-2.16.0.jar
mysql-connector-java-8.0.25.jar
mysql-connector-java-8.0.30.jar
opencensus-api-0.28.0.jar
opencensus-contrib-http-util-0.28.0.jar
paypalhttp-1.0.3.jar
protobuf-java-3.11.4.jar
protobuf-java-3.19.4.jar
selenium-api-3.8.1.jar
selenium-chrome-driver-3.8.1.jar
selenium-firefox-driver-3.8.1.jar
selenium-remote-driver-3.8.1.jar
selenium-support-3.8.1.jar
slf4j-api-2.0.1.jar
spring-aop-5.3.18.jar
spring-beans-5.3.18.jar
spring-context-5.3.18.jar
spring-context-support-5.3.18.jar
spring-core-5.3.18.jar
spring-expression-5.3.18.jar
spring-jcl-5.3.18.jar
spring-jdbc-5.3.18.jar
spring-orm-5.3.18.jar
spring-security-config-5.5.0.jar
spring-security-core-5.5.0.jar
spring-security-crypto-5.5.0.jar
spring-security-web-5.5.0.jar
spring-social-config-1.1.4.RELEASE.jar
spring-social-core-1.1.4.RELEASE.jar
spring-social-facebook-2.0.3.RELEASE.jar
spring-social-web-1.1.4.RELEASE.jar
spring-tx-5.3.18.jar
spring-web-5.3.18.jar
spring-webmvc-5.3.18.jar
stax-ex-1.8.jar
thymeleaf-3.0.15.RELEASE.jar
thymeleaf-extras-springsecurity5-3.0.4.RELEASE.jar
thymeleaf-spring5-3.0.15.RELEASE.jar
tomcat-annotations-api-8.5.82.jar
tomcat-embed-core-8.5.82.jar
tomcat-servlet-api-8.0.48.jar
tomcat-servlet-api-8.5.82.jar
txw2-2.3.1.jar
unbescape-1.1.6.RELEASE.jar
validation-api-1.1.0.Final.jar
vibur-dbcp-25.0.jar
vibur-object-pool-25.0.jar
xmpcore-6.1.11.jar
Run Code Online (Sandbox Code Playgroud)

编辑:

build.gradle 中的这几行决定了工作和不工作之间的区别:

implementation('ch.qos.logback:logback-classic') {
    version {
        strictly '1.2.11'
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

这是控制台输出。我没有记录任何内容。这 ”!!!!!” 按照建议使用 System.out.println() 打印的行是黑色的,其余的都是红色的:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
nov 16, 2022 7:05:18 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
nov 16, 2022 7:05:18 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-0.0.0.0-8009"]
nov 16, 2022 7:05:18 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["https-jsse-nio-8443"]
nov 16, 2022 7:05:19 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
nov 16, 2022 7:05:19 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/8.5.83]
nov 16, 2022 7:05:19 PM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
INFO: No global web.xml found
nov 16, 2022 7:05:24 PM org.apache.catalina.core.ApplicationContext log
INFO: 2 Spring WebApplicationInitializers detected on classpath
nov 16, 2022 7:05:24 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
SLF4J: Failed to load class "org.slf4j.impl.StaticMDCBinder".
SLF4J: Defaulting to no-operation MDCAdapter implementation.
SLF4J: See http://www.slf4j.org/codes.html#no_static_mdc_binder for further details.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
nov 16, 2022 7:05:35 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring DispatcherServlet 'dispatcher'
nov 16, 2022 7:05:36 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
nov 16, 2022 7:05:36 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-0.0.0.0-8009"]
nov 16, 2022 7:05:36 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["https-jsse-nio-8443"]
Run Code Online (Sandbox Code Playgroud)

xti*_*ian 3

TLDR: Eclipse 添加slf4j-api-1.7.25到类路径是因为thymeleaf-3.0.15.RELEASE依赖于它,忽略slf4j-api-2.0.1.jarlogback-classic:1.3.3. 通过更新修复thymeleaf-3.1.0.RELEASE

Eclipse 使用的 Gradle 依赖项解析中一定存在一些错误,因为thymeleaf-3.0.15.RELEASEfrom的依赖项slf4j-api-1.7.25没有“完全”升级,slf4j-api-2.0.1.jar与 Eclipse“项目和外部依赖项”树和手动gradle dependencyInsight命令显示的内容相反:

org.slf4j:slf4j-api:1.7.25 -> 2.0.1
+--- org.thymeleaf:thymeleaf:3.0.15.RELEASE
|    \--- org.thymeleaf:thymeleaf-spring5:3.0.15.RELEASE
|         \--- compileClasspath
Run Code Online (Sandbox Code Playgroud)

实际上slf4j-api-1.7.25.jar仍然一起使用slf4j-api-2.0.1.jar,但仅在命令行上可见,您可以从 Eclipse“运行配置”>“显示命令行”按钮获得该命令行。

升级依赖项失败的情况并不总是发生。就我而言,我有一个 ProjectMain 依赖于 ProjectLib,虽然两者thymeleaf-3.0.15.RELEASE都只使用前者,但它依赖于logback-classic:1.3.3升级slf4j-api-1.7.25.jarslf4j-api-2.0.1.jar.

编辑:

如果 lib 项目仍然依赖于旧的 jar,则在主项目上强制使用slf4j-api-2.0.1.jar不会阻止 Eclipse 在命令行上添加旧的 jar:

implementation('org.slf4j:slf4j-api') {
    version {
        strictly '2.0.1'
    }
}
Run Code Online (Sandbox Code Playgroud)