Versions Compared

Key

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

...

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Kafka Connect workers do does not provide an out-of-the-box facility to change log levels. When debugging connectors or the Connect framework, one has to update the log4j.properties file and restart the worker to see new logs. This is cumbersome in most cases, and restarting the worker sometimes hides bugs by resetting the internal state.

...

The Kafka broker currently has a utility to adjust log levels via a JMX tool (jconsole, for example)MBeans. This is a scala utility, that we will rewrite in Java, move to kafka-clients package and use this utility to initialize JMX interface in the Kafka broker and Connect worker upon startup.

...

Code Block
languagejava
public interface Log4jControllerMBean {

    /**
     * @return a list of all registered loggers 
     */
    List<String> getLoggers();

    /**
     * Get the effective log level for a given logger
     * 
     * @param logger name of the logger
     * @return its log level ("INFO", for example)
     */
    String getLogLevel(String logger);

    /**
     * Set the log level for a logger 
     *
     * @param logger name of the logger 
     * @param level desired level ("INFO", for example)
     * @return true, if successfully set, false otherwise.
     */
    Boolean setLogLevel(String logger, String level);
}

Applications will register this mbean mBean with JMX the mBean server via a LogLevelManager utility class:

Code Block
languagejava
public class LogLevelManager {
    /**
     * Create and register a JMX mBean called Log4jController in the specified domain
     *
     * @param applicationNamedomain domain of the mBean
     */
    public static void registerLog4jController(String namedomain) {
        // implementation
    }
}

...

An application (such as the Connect worker) will use the above the LogLevelManager utility class to initialize dynamic logging as follows:

...