gpt4 book ai didi

java - DropWizard 不使用 LogBack 并支持我的 log4j.properties

转载 作者:行者123 更新时间:2023-11-30 06:13:05 27 4
gpt4 key购买 nike

kafka 源连接器在我的代码中使用 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{
}

当我运行代码时,代码会自动进入 Debug模式,并且不使用我的自定义 log4j.properties。在我的 pom.xml 中添加了一些依赖项

<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 日志记录级别的依赖项时,代码引发异常:

 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就会进入 Debug模式并显示上述警告多个slf4j绑定(bind)并绑定(bind)到ch.qos.logback 。

最佳答案

我试图在稍微不同的上下文中解决基本相同的问题,并在这里遇到了关键信息: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 的代码不会抛出异常。

编辑:我发现 https://github.com/dropwizard/dropwizard/pull/1900 中已经存在相同的信息OP 中引用了,但当时还不是官方的。

关于java - DropWizard 不使用 LogBack 并支持我的 log4j.properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49819539/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com