Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Kafka has been using log4j and providing a log4j appender also. KIP-653 upgrades log4j to log4j2 from all its submodulesserver-side modules, leaving log4j-appender and client-side modules from the upgrade.

This KIP is the following job of KIP-653; it proposes to provide a log4j2 equivalent of log4j-appender. There , with upgrading the omitted modules (i.e., tools and trogdor) into log4j2.


Before we proceed, here are several reasons why this feature by the Kafka community .itself should provide log4j2 appender:

1. Dependency is best maintained when log4j2 and Kafka versions are updated together

...

  1. All configuration properties in log4j-appender must be supported in its log4j2 successor.
    • It should run by only converting legacy log4j syntax into log4j2.
    • It should provide a way to run legacy configuration for backward-compatibility.
  2. It should have the same semantic as log4j-appender.
    • It should have the same format with log4j-appender for backward-compatibility. That is, the key must always be null, and the value must have a log message. The records produced by log4j-appender and its log4j2 successor should not be distinguishable.
  3. It should reflect the recent changes made to the Producer.
    • If there is a change in Producer property, it should also be applied to the log4j2 appender.
    • If the name of the log4j-appender property and Producer property is different, it should support the latter one.

With log4j2-appender, the leaving modules (tools, trogdor) 's slf4j, log4j 1.x dependencies will be upgraded into log4j2 and additional log4j2 configuration file will be provided. For backward compatibility, these tools will use the log4j configuration file (tools-log4j2.properties) by default. But for informational purpose, the following message will be shown when user launches kafka-run-class.sh:

Code Block
languagebash
DEPRECATED: using log4j 1.x configuration. To use log4j 2.x configuration, run with: 'export KAFKA_LOG4J_OPTS="-Dlog4j.configurationFile=file:$base_dir/config/tools-log4j2.properties"'

As the message above states, the user can run the tools with log4j2 config file by setting `export KAFKA_LOG4J_OPTS="-Dlog4j.configurationFile={log4j2-config-file-path}"`. Thanks to log4j12-api, a compatibility bridge between log4j and log4j2, the tools can be run without any changes.

Compatibility, Deprecation, and Migration Plan

...