java - 从 spring-boot-starter-web 中排除 Logback 依赖项会阻止 log4j 系统正确初始化
问题描述
我以前遇到过 spring 应用程序的多个绑定错误的问题,我了解到修复是排除 spring-boot-starter-web 依赖项的一个组件。我现在遇到的问题是 log4j 想要被初始化,但是 logback-classic 依赖。
这是我最初遇到的错误:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
我不能排除 slf4-log4j12 依赖,因为它是该模块运行所必需的,并且不能排除 logback 依赖,因为它需要在 spring 应用程序运行时进行初始化。
这是我在排除 logback 时遇到的问题:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
这是我排除 slf4j-log4j 时得到的错误:
Exception in thread "main" java.lang.AbstractMethodError: org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z
解决方案
为什么你认为 logback 是一个依赖项?
logback 直接实现 slf4j,你通过 sl4j api 使用 logback,所以你的代码永远不会依赖 logback,但它可能依赖于 slf4j。
您在此处概述的问题:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
是您的项目没有为 log4j 指定配置的结果。
库 slf4j-log4j12-1.6.1.jar 是 log4j 的 sl4j 绑定。这意味着任何使用 slf4j 的代码日志都会将其日志转发到 log4j。
排除 logback 是正确的方法。排除 logback 后,您需要的只是 log4j 的配置。
请参阅有关如何指定配置的log4j 文档。如果您认为项目具有现有配置,请查找 log4j.properties 或 log4j.xml 文件。确保它们在类路径上。这里问了一个类似问题的问题:log4.properties 应该在类路径上吗?
推荐阅读
- sql - 使用 SQL 查询的 Oracle SQL 开发人员的数据源名称
- python - 为什么同一个模型会有不同的结果?
- docker - Docker 容器卷未与主机系统一起挂载
- elasticsearch - 如何手动配置elasticsearch healthcheck
- python - Python 将 API 输出转储到 DataFrame 单元中
- javascript - 无法模拟现在计算的时刻
- c# - 来自不同列表的元素的 N 次组合
- android - Flutter 飞溅闪烁问题
- python - 将dict转换为pandas DataFrame时如何设置列标题(其中列名与dict键不匹配)?
- python - 奇偶函数问题