Do not configure a logger named level
When logger.level is set, we end up configuring a logger named "level" because we look for all settings of the form "logger\..+" as configuring a logger. Yet, logger.level is special and is meant to only configure the default logging level. This commit causes is to avoid not configuring a logger named level. Relates #22624
This commit is contained in:
parent
5430f84b64
commit
9ae5410ea6
|
@ -122,20 +122,27 @@ public class LogConfigurator {
|
|||
Configurator.initialize(builder.build());
|
||||
}
|
||||
|
||||
private static void configureLoggerLevels(Settings settings) {
|
||||
/**
|
||||
* Configures the logging levels for loggers configured in the specified settings.
|
||||
*
|
||||
* @param settings the settings from which logger levels will be extracted
|
||||
*/
|
||||
private static void configureLoggerLevels(final Settings settings) {
|
||||
if (ESLoggerFactory.LOG_DEFAULT_LEVEL_SETTING.exists(settings)) {
|
||||
final Level level = ESLoggerFactory.LOG_DEFAULT_LEVEL_SETTING.get(settings);
|
||||
Loggers.setLevel(ESLoggerFactory.getRootLogger(), level);
|
||||
}
|
||||
|
||||
final Map<String, String> levels = settings.filter(ESLoggerFactory.LOG_LEVEL_SETTING::match).getAsMap();
|
||||
for (String key : levels.keySet()) {
|
||||
final Level level = ESLoggerFactory.LOG_LEVEL_SETTING.getConcreteSetting(key).get(settings);
|
||||
Loggers.setLevel(ESLoggerFactory.getLogger(key.substring("logger.".length())), level);
|
||||
for (final String key : levels.keySet()) {
|
||||
// do not set a log level for a logger named level (from the default log setting)
|
||||
if (!key.equals(ESLoggerFactory.LOG_DEFAULT_LEVEL_SETTING.getKey())) {
|
||||
final Level level = ESLoggerFactory.LOG_LEVEL_SETTING.getConcreteSetting(key).get(settings);
|
||||
Loggers.setLevel(ESLoggerFactory.getLogger(key.substring("logger.".length())), level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressForbidden(reason = "sets system property for logging configuration")
|
||||
private static void setLogConfigurationSystemProperty(final Path logsPath, final Settings settings) {
|
||||
System.setProperty("es.logs", logsPath.resolve(ClusterName.CLUSTER_NAME_SETTING.get(settings).value()).toString());
|
||||
|
|
|
@ -34,9 +34,11 @@ import org.elasticsearch.test.ESTestCase;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.Matchers.hasKey;
|
||||
import static org.hamcrest.Matchers.hasToString;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
|
||||
|
@ -151,4 +153,33 @@ public class EvilLoggerConfigurationTests extends ESTestCase {
|
|||
assertThat(e, hasToString(containsString("no log4j2.properties found; tried")));
|
||||
}
|
||||
|
||||
public void testLoggingLevelsFromSettings() throws IOException, UserException {
|
||||
final Level rootLevel = randomFrom(Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR);
|
||||
final Level fooLevel = randomFrom(Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR);
|
||||
final Level barLevel = randomFrom(Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR);
|
||||
final Path configDir = getDataPath("minimal");
|
||||
final Settings settings = Settings.builder()
|
||||
.put(Environment.PATH_CONF_SETTING.getKey(), configDir.toAbsolutePath())
|
||||
.put(Environment.PATH_HOME_SETTING.getKey(), createTempDir().toString())
|
||||
.put("logger.level", rootLevel.name())
|
||||
.put("logger.foo", fooLevel.name())
|
||||
.put("logger.bar", barLevel.name())
|
||||
.build();
|
||||
final Environment environment = new Environment(settings);
|
||||
LogConfigurator.configure(environment);
|
||||
|
||||
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
|
||||
final Configuration config = ctx.getConfiguration();
|
||||
final Map<String, LoggerConfig> loggerConfigs = config.getLoggers();
|
||||
assertThat(loggerConfigs.size(), equalTo(3));
|
||||
assertThat(loggerConfigs, hasKey(""));
|
||||
assertThat(loggerConfigs.get("").getLevel(), equalTo(rootLevel));
|
||||
assertThat(loggerConfigs, hasKey("foo"));
|
||||
assertThat(loggerConfigs.get("foo").getLevel(), equalTo(fooLevel));
|
||||
assertThat(loggerConfigs, hasKey("bar"));
|
||||
assertThat(loggerConfigs.get("bar").getLevel(), equalTo(barLevel));
|
||||
|
||||
assertThat(ctx.getLogger(randomAsciiOfLength(16)).getLevel(), equalTo(rootLevel));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
appender.console.type = Console
|
||||
appender.console.name = console
|
||||
appender.console.layout.type = PatternLayout
|
||||
appender.console.layout.pattern = %m%n
|
||||
|
||||
rootLogger.level = info
|
||||
rootLogger.appenderRef.console.ref = console
|
Loading…
Reference in New Issue