Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassCastException:org.slf4j.impl.Log4jLoggerAdapter无法强制转换为ch.qos.logback.classic.Logger_Java_Logging_Log4j_Slf4j_Logback - Fatal编程技术网

Java ClassCastException:org.slf4j.impl.Log4jLoggerAdapter无法强制转换为ch.qos.logback.classic.Logger

Java ClassCastException:org.slf4j.impl.Log4jLoggerAdapter无法强制转换为ch.qos.logback.classic.Logger,java,logging,log4j,slf4j,logback,Java,Logging,Log4j,Slf4j,Logback,为了在运行时添加一个appender,我遵循了这个答案。尽管这对最初的海报有效,但我在第Logger-Logger=(Logger)LoggerFactory.getLogger(“abc.xyz”): 简单的问题。。。为什么这对他有效而对我无效-P这看起来像是类路径中具有相同依赖项(slf4j)的多个版本的症状 在日志中查找此消息: SLF4J:类路径包含多个SLF4J绑定。 它将默认使用在类路径中找到的第一个slf4j引用。在过去,我通过将Logback依赖项(Logback classic

为了在运行时添加一个appender,我遵循了这个答案。尽管这对最初的海报有效,但我在第
Logger-Logger=(Logger)LoggerFactory.getLogger(“abc.xyz”)


简单的问题。。。为什么这对他有效而对我无效-P

这看起来像是类路径中具有相同依赖项(slf4j)的多个版本的症状

在日志中查找此消息:

SLF4J:类路径包含多个SLF4J绑定。


它将默认使用在类路径中找到的第一个slf4j引用。在过去,我通过将Logback依赖项(Logback classic和Logback core)移动到Maven pom.xml文件的dependencies部分的顶部来解决这个问题,该部分将它们放在类路径的前面。这是一个脆弱的解决方案,根据您的应用程序体系结构,它可能无法工作。(例如,如果您的启动项目在其pom.xml中包含冲突的依赖项,并且您通过另一个项目及其pom.xml引用了Logback)

由于您的项目或某些其他继承项目中已经存在SLF4J的依赖项,运行时可能会发生冲突。在我的
POM
文件中添加排除项对我来说很有效:

        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>

org.slf4j
slf4j-log4j12

在这种情况下,请确保用于Logger和LoggerFactory的库应相同 例如,如果LoggerFactory来自slf4j,则记录器不应为log4j或java.util。确保它也来自slf4j。
如果您仍然面临此问题,请告诉我。

我通过使用logback类库解决了此问题,并避免使用slf4j。slf4j只是一个抽象概念,不是必须使用的。下面是代码片段

导入以下类

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;


LoggerContext context = new LoggerContext();
Logger logger = context.getLogger("testLogger");

给你。您有一个logger和LoggerContext。

检查您从中获取logger和LoggerFactory的库,它们应该是相同的。
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;


LoggerContext context = new LoggerContext();
Logger logger = context.getLogger("testLogger");