java slf4j在intellij(无日志提供程序)中失败,但在命令行中运行正常,为什么?

时间:2018-11-03 12:02:13

标签: java intellij-idea slf4j provider

我在Mac上有一个intellij(2018.2)maven项目,具有以下代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class useSlf {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(useSlf.class);
        logger.info("Hello World");
    }
}

我的pom.xml得到了这种依赖:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
</dependencies>

在命令行下运行:

$java  useSlf
2018-11-03 19:53:59,137 [myid:] - INFO  [main:useSlf@7] - Hello World

但是当我尝试在intellij中运行它时,它给出了:

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java - 

Dfile.encoding = UTF-8 -classpath ...... useSlf

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.

这很奇怪。在我的Mac中,bash检查:

echo $CLASSPATH

$ CLASSPATH中没有日志提供程序,并且我的Java程序运行良好,这很奇怪,我希望我可以在此处提供一个提供程序jar:

java -cp ~/Downloads/slf4j-simple-1.8.0-beta2.jar:. useSlf
Exception in thread "main" java.lang.NoClassDefFoundError: 
org/slf4j/LoggerFactory
    at useSlf.main(useSlf.java:6)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

我的问题:

  1. 我的命令行结果太奇怪了:如果我不给提供程序jar,它就可以工作;当我提供简单的日志提供程序时,它会给出异常!如何解释呢?

  2. 我试图在我的项目的“项目结构->库”中添加此简单的日志jar,然后再次运行。仍然不能解决问题。如何使其在intellij中工作?

0 个答案:

没有答案