无法从dropwizard项目中排除logback-classic依赖项

时间:2015-10-01 15:44:20

标签: java maven log4j slf4j dropwizard

我正在使用Dropwizard 0.8.2和sfl4j-api 1.7.12进行日志记录。我们为slf4j选择的实现是slf4j-log4j12,但我们遇到了项目中存在多个实现的问题。

尝试运行时,它会抱怨存在多个SLF4J绑定。一个是我们的,另一个是logback-classic,它来自dropwizard-jackson依赖。

问题是当我们尝试从依赖项中排除logback-classic时,我们在尝试启动服务器时遇到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/classic/filter/ThresholdFilter
    at io.dropwizard.Application.<clinit>(Application.java:20)
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.classic.filter.ThresholdFilter
    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

有没有人知道将log4j与Dropwizard一起使用?

1 个答案:

答案 0 :(得分:0)

我认为你不能从运行时类路径中删除logback并使dropwizard使用其他一些日志记录实现(不修改dropwizard的代码)。我们可以看到,io.dropwizard.Application的静态初始化程序calls io.dropwizard.logging.LoggingFactory.bootstrap()LoggingFactory直接使用了logback中的类,因此LoggingFactory类不会在没有初始化的情况下进行初始化的logback。