Max
Max

Reputation: 755

Log4j2 - setting log levels for a package and then a subpackage

So, I wanted to have my own code at DEBUG, but Apache's at WARN. Except for Kafka, which generates too many warnings, so I tried this:

 log4j.rootLogger=DEBUG,console,file
log4j.logger.org.apache=WARN
log4j.logger.org.apache.kafka.common.config=ERROR

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %p (%C) [%t] - %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=/var/log/my-app/application.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %p (%C) [%t] - %m%n

The log4j.logger.org.apache=WARN line works. But log4j.logger.org.apache.kafka.common.config=ERROR doen't seem to do anything, as I still get plenty of log statements like

2017-12-20T14:31:42.439 WARN (org.apache.kafka.common.config.AbstractConfig) [main] - The configuration batch.size = 16384 was supplied but isn't a known config.

(The config warnings are due to a dependency, not my code, so cleaning the config file is out of my control.)

I tried reversing the order: log4j.logger.org.apache.kafka.common.config=ERROR log4j.logger.org.apache=WARN but that had no effect.

Thanks!

Upvotes: 3

Views: 2981

Answers (2)

Hubbitus
Hubbitus

Reputation: 5349

I also run into that issue... Problem there what org.apache.kafka.common.config.AbstractConfig is abstract class! So really that never has instances for log. And you need to configure logging by concrete ancestors. For example (there should be most, but some other may be added in feature versions):

log4j.logger.io.confluent.ksql.util.KsqlConfig=ERROR
log4j.logger.io.confluent.connect.avro.AvroConverterConfig=ERROR
log4j.logger.io.confluent.ksql.rest.server.KsqlRestConfig=ERROR
log4j.logger.org.apache.kafka.connect.json.JsonConverterConfig=ERROR
log4j.logger.org.apache.kafka.clients.admin.AdminClientConfig=ERROR
log4j.logger.io.confluent.ksql.logging.processing.ProcessingLogConfig=ERROR
log4j.logger.org.apache.kafka.clients.consumer.ConsumerConfig=ERROR
log4j.logger.org.apache.kafka.connect.runtime.distributed.DistributedConfig=ERROR
log4j.logger.org.apache.kafka.clients.producer.ProducerConfig=ERROR
log4j.logger.io.confluent.connect.avro.AvroDataConfig=ERROR
log4j.logger.io.confluent.kafka.serializers.KafkaAvroSerializerConfig=ERROR
log4j.logger.io.confluent.kafka.serializers.KafkaAvroDeserializerConfig=ERROR
log4j.logger.org.apache.kafka.common.config.AbstractConfig=ERROR
log4j.logger.org.apache.kafka.connect.runtime.ConnectorConfig=ERROR
log4j.logger.org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig=ERROR
log4j.logger.org.apache.kafka.connect.runtime.TaskConfig=ERROR
log4j.logger.org.apache.kafka.connect.storage.StringConverterConfig=ERROR
log4j.logger.org.apache.kafka.connect.runtime.SourceConnectorConfig=ERROR
log4j.logger.io.confluent.connect.jdbc.source.JdbcSourceConnectorConfig=ERROR
log4j.logger.org.apache.kafka.streams.StreamsConfig=ERROR
log4j.logger.io.confluent.connect.jdbc.source.JdbcSourceTaskConfig=ERROR

Upvotes: 1

Bluurr
Bluurr

Reputation: 457

It looks like you are missing the additivity config on the logger.

This will prevent the incoming logger from propagating to its parent logger.

log4j.additivity.org.apache.kafka.common.config=false

more information can be found here and here.

Upvotes: 2

Related Questions