Java log4j:WARN找不到记录器(org.apache.commons.beanutils.converters.BooleanConverter)的追加器
我知道这个问题经常出现,但我完全被难住了 我正在尝试使用Log4j2编写KafkaStreams应用程序日志,并收到一条关于没有附加程序的Log4j(版本1)警告:Java log4j:WARN找不到记录器(org.apache.commons.beanutils.converters.BooleanConverter)的追加器,java,maven,log4j,log4j2,confluent-schema-registry,Java,Maven,Log4j,Log4j2,Confluent Schema Registry,我知道这个问题经常出现,但我完全被难住了 我正在尝试使用Log4j2编写KafkaStreams应用程序日志,并收到一条关于没有附加程序的Log4j(版本1)警告: log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter). log4j:WARN Please initialize the log4j system properly. l
log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
标准答案是在pom文件中添加一个排除项,我已经做了一次又一次,但都没有用
更奇怪的是,尽管警告可能提示常见的beanutils,但导致控制台输出错误的行是:
final Map<String, String> serdeConfig = Collections.singletonMap(
AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
ApplicationConfiguration.SCHEMA_REGISTRY_HOSTS);
final Map serdeConfig=Collections.singletonMap(
AbstractKafkaAvroSerDeConfig.SCHEMA\u REGISTRY\u URL\u CONFIG,
应用程序配置。模式\注册表\主机);
我花了整整一天的时间在这件事上,似乎一点进展都没有
今天之后,我的pom文件中充斥着大量的排除项,我的依赖项是这样的
<dependencies>
<!--Configuration Dependency for importing properties file-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.2</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Dependency used for Apache commons configuration2-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<!--Excluded in Map-->
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Log4j2 Dependency for logging-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<!--Required for Log4j2 Dependency for logging-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<!--Used for Object Json Serialization and Deserialization-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<!--Sumo Logic Dependency for Log4j2 logging-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<!--Excluded in Map-->
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Confluent Platform Dependency for streams avro serializer-->
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-streams-avro-serde</artifactId>
<version>3.3.0</version>
<!--Required due to SLF4j dependency conflict-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<!--Excluded in Map-->
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Confluent Platform Dependency for avro serializer-->
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-avro-serializer</artifactId>
<version>3.3.0</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Confluent Platform Dependency for schema registry-->
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-schema-registry-client</artifactId>
<version>3.3.0</version>
<!--Required due to SLF4j dependency conflict-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--Kafka API Client Dependency-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.1.0</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Kafka Streams API Client Dependency-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>1.1.0</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Avro Serialization Dependency-->
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.8.2</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Avro pojo class generation Dependency-->
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.8.2</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Avro Serialization Dependency-->
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-tools</artifactId>
<version>1.8.2</version>
<!--Excluded in Map-->
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
org.apache.commons
我的应用程序日志工作正常(控制台和RolingFileAppender),但我似乎无法消除这个顽固的小警告
感谢大家在这里阅读我的小书;特别是如果你有任何建议的话 最后,我选择了上面评论中的选项2
这样做的原因是,最终,在源代码管理中,在生产中保持日志消息最少且清晰似乎更为重要。此外,如果我曾经需要依赖项,例如我的KStreams应用程序似乎无法按预期工作,我就可以通过单独的log4j配置文件的第二个选项轻松地打开依赖项中的其他调试细节
具体地说,我实际上创建了两个版本的log4j配置,以便为本地版本和(标记化的)发布版本提供不同的配置,就像我的其他配置/属性一样:
$ ls src/main/resources/*/*.xml
src/main/resources/local/log4j.xml* src/main/resources/release/log4j.xml*
src/main/resources/local/log4j2.xml* src/main/resources/release/log4j2.xml*
然后,我将log4j.xml设置为正常,但将根日志记录器级别默认为off,因此它会使日志静音,除非发生更改,并且看起来像这样:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false">
<appender name="MyConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<appender name="MyRollingFileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true" />
<param name="maxFileSize" value="100MB" />
<param name="maxBackupIndex" value="10" />
<param name="file" value="c:\\Logs\\KStreamsApp\\Dependencies\\KStreamsAppDependencies.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<level value="Off" />
<appender-ref ref="MyConsoleAppender" />
<appender-ref ref="MyRollingFileAppender" />
</root>
</log4j:configuration>
虽然不是理想的解决方案,但我有几个想法:1)使用语句org.apache.log4j.BasicConfigurator.configure()
提供缺省log4j配置,如下所述:但这会产生将依赖项日志消息转储到控制台输出的副作用。2) 提供带有控制台追加器的log4j.xml配置,并将根日志级别设置为OFF
以禁用输出。这可以在没有第一个选项的控制台混乱的情况下工作,但是现在我的repo中有了一个无关的文件。仍然希望有更好的解决方案。。。