DropWizard没有使用LogBack并支持我的log4j.properties

时间:2018-04-13 14:41:11

标签: java logging logback slf4j dropwizard

kafka source Connector在我的代码中使用Dropwizard进行指标注册。我在我的浏览器中启用了自定义端口。 最初在连接器中没有dropwizard,我使用log4j.properties进行日志记录(slf4j)。 当我在连接器中自动使用dropwizard时,它会切换到logback并显示以下结果:

SLF4J: Found binding in [jar:file:jarfilename/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/kafka_2.12-0.10.2.1/libs/slf4j-log4j12-1.7.21.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
Apr 13, 2018 8:58:47 AM org.glassfish.jersey.internal.Errors logErrors
WARNING: The following warnings have been detected: WARNING: The (sub)resource method createConnector in org.apache.kafka.connect.runtime.rest.resources.ConnectorsResource contains empty path annotation.
WARNING: The (sub)resource method listConnectors in org.apache.kafka.connect.runtime.rest.resources.ConnectorsResource contains empty path annotation.
WARNING: The (sub)resource method listConnectorPlugins in org.apache.kafka.connect.runtime.rest.resources.ConnectorPluginsResource contains empty path annotation.
WARNING: The (sub)resource method serverInfo in org.apache.kafka.connect.runtime.rest.resources.RootResource contains empty path annotation.

用于运行服务器的dropwizard的conf.yml文件

server:
  adminConnectors:
  - type: http
    port: 8989

代码段

public class KafkaMetricsPort extends Application<MetricsConfiguration>{
@Override
    public void run(MetricsConfiguration configuration, Environment environment) throws Exception {
    }
}
import io.dropwizard.Configuration;
public class MetricsConfiguration extends Configuration{
}

当我运行代码时,代码自动进入调试模式而不使用我的自定义log4j.properties。 我的pom.xml中添加了一些dependecies

<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>0.9.2</version>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
 <artifactId>metrics-core</artifactId>
 <version>3.1.2</version>

当我从io.dropwizard-core中排除所有dropwizard logback日志记录级别的dependecnies然后代码引发异常:

 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)
在我的代码中,

在他们被建议的链接下面已经累了 https://github.com/dropwizard/dropwizard/pull/2112 https://github.com/dropwizard/dropwizard/pull/1900 Can't exclude logback-classic dependency from dropwizard project 要点:我将myconnector jar复制到kafka libs(因为kafka需要识别myconnecotr jar)所以如果我运行任何其他kafka依赖编程jar,那么programm进入调试模式并显示上面的警告多个slf4j绑定和绑定到ch.qos.logback 。

1 个答案:

答案 0 :(得分:1)

我试图在稍有不同的环境中解决基本相同的问题,并在此处遇到关键信息:https://www.dropwizard.io/1.3.5/docs/manual/core.html#logging。我已经在排除logback jar,并根据在其他地方找到的信息来覆盖bootstrapLogging方法,但是我缺少的部分(在config.yml文件中)是:

server:
  type: simple
  applicationContextPath: /application
  adminContextPath: /admin
  requestLog:
    type: external
logging:
  type: external

我是在几分钟前才发现的,所以这就是我目前所知道的。 (不知道上面的每一点是否都是必要的,或者是否确实是这样做的。)但这确实使我使用log4j,而没有尝试使用logback的代码抛出异常。

编辑:我发现OP中引用的https://github.com/dropwizard/dropwizard/pull/1900中已经有相同的信息,但当时还不正式。