无法从 dropwizard 项目中排除 logback-classic 依赖项
Can't exclude logback-classic dependency from dropwizard project
我正在处理一些使用 Dropwizard 0.8.2 和 sfl4j-api 1.7.12 进行日志记录的项目。我们为 slf4j 选择的实现是 slf4j-log4j12,但我们在项目中存在多个实现时遇到问题。
当尝试 运行 它时,它抱怨存在多个 SLF4J 绑定。一个是我们的,另一个是来自 dropwizard-jackson 依赖项的 logback-classic。
问题是当我们尝试从依赖项中排除 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 一起使用吗?
我认为您不能从运行时 classpath 中删除 logback 并使 dropwizard 使用其他一些日志记录实现(不修改 dropwizard 的代码)。正如我们所见,io.dropwizard.Application
的静态初始化程序 calls io.dropwizard.logging.LoggingFactory.bootstrap()
, and LoggingFactory
直接使用来自 logback 的 classes,因此 LoggingFactory
class 没有 logback 就不会初始化。
我正在处理一些使用 Dropwizard 0.8.2 和 sfl4j-api 1.7.12 进行日志记录的项目。我们为 slf4j 选择的实现是 slf4j-log4j12,但我们在项目中存在多个实现时遇到问题。
当尝试 运行 它时,它抱怨存在多个 SLF4J 绑定。一个是我们的,另一个是来自 dropwizard-jackson 依赖项的 logback-classic。
问题是当我们尝试从依赖项中排除 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 一起使用吗?
我认为您不能从运行时 classpath 中删除 logback 并使 dropwizard 使用其他一些日志记录实现(不修改 dropwizard 的代码)。正如我们所见,io.dropwizard.Application
的静态初始化程序 calls io.dropwizard.logging.LoggingFactory.bootstrap()
, and LoggingFactory
直接使用来自 logback 的 classes,因此 LoggingFactory
class 没有 logback 就不会初始化。