...
To differentiate between the normal Kafka config settings and the application's log level settings, we will introduce a new resource type - BROKER_LOGGERS
|
When resource_type=BROKER_LOGGER:
- we will use the existing ACL for the
Cluster
resource (as used inIncrementalAlterConfigs/DescribeConfigs
operations). - we will only support one of eight values seven values for the value of a config - the log levels (ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)
Log Level Definitions
Let's define the log levels we support and the syslog severity level (as defined in RFC-5424) they correspond to:
ALL - intended to enable all logging. all syslog levels |
OFF - intended to turn off all logging
To have these levels defined in code, we will create a new public class called LogLevelConfig, intended to be used by the AdminClient
...
Code Block | ||
---|---|---|
| ||
package org.apache.kafka.common.config; /** * This class holds definitions for log level configurations related to Kafka's application logging. See KIP-412 for additional information */ public class LogLevelConfig { /* * NOTE: DO NOT CHANGE EITHER CONFIG NAMES AS THESE ARE PART OF THE PUBLIC API AND CHANGE WILL BREAK USER CODE. */ /** * The <code>OFF</code> has the highest possible rank and is * intended to turn off logging. * WARNING: This is not recommended for use */ public static final String OFF_LOG_LEVEL = "OFF"; BREAK USER CODE. */ /** * The <code>FATAL</code> level designates a very severe error * that will lead the Kafka broker to abort. */ public static final String FATAL_LOG_LEVEL = "FATAL"; /** * The <code>ERROR</code> level designates error events that * might still allow the broker to continue running. */ public static final String ERROR_LOG_LEVEL = "ERROR"; /** * The <code>WARN</code> level designates potentially harmful situations. */ public static final String WARN_LOG_LEVEL = "WARN"; /** * The <code>INFO</code> level designates informational messages * that highlight normal Kafka events at a coarse-grained level */ public static final String INFO_LOG_LEVEL = "INFO"; /** * The <code>DEBUG</code> Level designates fine-grained * informational events that are most useful to debug Kafka */ public static final String DEBUG_LOG_LEVEL = "DEBUG"; /** * The <code>TRACE</code> Level designates finer-grained * informational events than the <code>DEBUG</code level. */ public static final String TRACE_LOG_LEVEL = "TRACE"; /** * The <code>ALL</code> has the lowest possible rank and is intended to turn on all logging. */ public static final String ALL_LOG_LEVEL = "ALL"; } |
...
We will add a new DYNAMIC_BROKER_LOGGER_CONFIG
type to the ConfigSource enum
|
Request/Response Overview
We will not be modifying the DescribeConfigs/IncrementalAlterConfigs request/response.
Let's go over the expected semantics when using them with the new resource type.
DescribeConfigs
|
Request semantics (as defined in KIP-133) are conserved where applicable:
...
SET: Set the log level to the desired value
REMOVE: Sets the log level to the same as the root logger's
|
Request semantics (as defined in KIP-133 and KIP-339) are conserved where applicable:
...
kafka-configs.sh
will be extended to support the new resource type via --entity-type broker-logger
.
Examples:
|
Compatibility, Deprecation, and Migration Plan
...
- Extend Kafka's JmxTool class to support changing log levels dynamically
- Does not properly address the concerns outlined in the Motivation section
- Can abstract away a bit of the complexity but still has the fundamental flaws of no security and not being easy to use
- Does not properly address the concerns outlined in the Motivation section
- Create new Admin API commands for reading and altering log levels
- Will result in more boilerplate and some code duplication.
- Will result in seemingly needless Admin API command bloat
- Altering log levels can be seen as a form of altering configurations and seems intuitive use the same API
- Will require separate Policy class
- Add new
config_type
field in Alter/Describe request/responses or new map oflogger=>log_level
- Results in more code and field bloat in request/response without clear benefits of extendability
- Support turning log levels to OFF
- Log4j supports a log level called OFF. We decided to not expose this as there is never a compelling reason to turn off application logs.