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 使用Logback时出错_Java_Logging_Intellij Idea_Logback_Slf4j - Fatal编程技术网

Java 使用Logback时出错

Java 使用Logback时出错,java,logging,intellij-idea,logback,slf4j,Java,Logging,Intellij Idea,Logback,Slf4j,我正在TCP服务器上工作,我正在尝试添加日志记录。我已决定使用Logback。这是我的密码: final static Logger logger = LoggerFactory.getLogger(Ecmg.class); public static void main(String[] args) { new Ecmg(args); } public Ecmg(String[] args) { logger.info("Hello world."); Syst

我正在TCP服务器上工作,我正在尝试添加日志记录。我已决定使用
Logback
。这是我的密码:

final static Logger logger = LoggerFactory.getLogger(Ecmg.class);

public static void main(String[] args)
{
    new Ecmg(args);
}

public Ecmg(String[] args) {

    logger.info("Hello world.");

    System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "/src/main/resources/logback.xml");
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    StatusPrinter.print(lc);

    waitForConnection();
}
不幸的是,我得到了以下输出:

[main] INFO Ecmg - Hello world. 
Exception in thread "main" java.lang.ClassCastException: org.slf4j.simple.SimpleLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext at Ecmg.<init>(Ecmg.java:41) at Ecmg.main(Ecmg.java:29) 
Process finished with exit code 1
如果这很重要,我将使用java 8和Intellij 2018.1

我的问题是:为什么我会出现这个错误,我如何解决它

注意:我在互联网上找不到任何与此相关的信息,除了另一个。但问题还没有解决,提出的任何答案都不适合我


提前谢谢

SLF4J是用于日志记录的标准化接口。您使用它的API进行日志记录,并且在类路径上为您想要使用的实际日志记录框架设置了一个

如果您的
LoggerFactory.getILoggerFactory()
SimpleLoggerFactory
,则您正在使用绑定。您说您已经决定使用Logback,但实际上您使用的是SLF4J SimpleLogger

为了使用Logback,您需要确保它位于类路径上,并且在类路径上没有其他SLF4J绑定。由于您使用Maven来管理依赖项,您可能希望运行“mvn”来查看所有依赖项的列表,以及您的依赖项带来了什么。这可能会帮助您了解正在使用的其他绑定

用于SLF4J的性能良好的库将只包括SLF4J api,因为绑定只应由主应用程序使用。如果您有一个行为不好的库试图使用它自己的绑定,那么您可能需要使用Maven来绑定它


此外,在POM中使用部分来确保所有依赖项都使用相同版本的slf4j api,而不是试图包含各自的独立版本,这通常是有帮助的,以及使用的规则,以确保您在将来进行更改时不会出错,并意外地将另一个日志框架包含到您的项目中

这通常表示类路径上有另一个SLF4J@今天19点,你知道我在哪里可以找到我的课程路径吗?我是intellijI的新手,我会检查您的控制台输出是否有
SLF4J:Class path包含多个SLF4J绑定。SLF4J:在…
中找到绑定(这将告诉您重复的SLF4J在哪里)。还可以通过指定命令行参数来启用调试:
-Dlogback.debug=true
@tony19不幸的是,控制台输出是:
[main]INFO Ecmg-Hello world。线程“main”java.lang.ClassCastException:org.slf4j.simple.SimpleLoggerFactory中的异常无法在Ecmg.main(Ecmg.java:41)Ecmg.main(Ecmg.java:29)处转换为ch.qos.logback.classic.LoggerContext(Ecmg.java:41),进程已完成,退出代码1
是否可以打印
LoggerFactory.getILoggerFactory().getClass()
(或者在调试器中查看它的类),以帮助查看实际绑定的日志框架是什么?
<?xml version="1.0" encoding="UTF-8"?>
<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>

<groupId>Server</groupId>
<artifactId>Server</artifactId>
<version>1.0-SNAPSHOT</version>



<dependencies>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.8.0-beta2</version>
    </dependency>
</dependencies>