1
0
Эх сурвалжийг харах

Remove slowlog level (#57591)

Setting a slow log level requires an unnecessary conditional logic in SearchSlowLog and IndexingSlowLog
The behaviour of setting a level on a slow logger can be achieved with correct slow log threshold settings.
This PR is removing slow log and modifies tests to achieve the same behaviour with changing threshold.
relates #56171
Przemyslaw Gomulka 5 жил өмнө
parent
commit
0dfc83ab3d

+ 9 - 64
docs/reference/index-modules/slowlog.asciidoc

@@ -22,12 +22,10 @@ index.search.slowlog.threshold.fetch.warn: 1s
 index.search.slowlog.threshold.fetch.info: 800ms
 index.search.slowlog.threshold.fetch.debug: 500ms
 index.search.slowlog.threshold.fetch.trace: 200ms
-
-index.search.slowlog.level: info
 --------------------------------------------------
 
 All of the above settings are _dynamic_ and can be set for each index using the
-<<indices-update-settings, update indices settings>> API. For example: 
+<<indices-update-settings, update indices settings>> API. For example:
 
 [source,console]
 --------------------------------------------------
@@ -40,17 +38,12 @@ PUT /twitter/_settings
     "index.search.slowlog.threshold.fetch.warn": "1s",
     "index.search.slowlog.threshold.fetch.info": "800ms",
     "index.search.slowlog.threshold.fetch.debug": "500ms",
-    "index.search.slowlog.threshold.fetch.trace": "200ms",
-    "index.search.slowlog.level": "info"
+    "index.search.slowlog.threshold.fetch.trace": "200ms"
 }
 --------------------------------------------------
 // TEST[setup:twitter]
 
-By default, none are enabled (set to `-1`). Levels (`warn`, `info`,
-`debug`, `trace`) allow to control under which logging level the log
-will be logged. Not all are required to be configured (for example, only
-`warn` threshold can be set). The benefit of several levels is the
-ability to quickly "grep" for specific thresholds breached.
+By default thresholds are disabled (set to `-1`).
 
 The logging is done on the shard level scope, meaning the execution of a
 search request within a specific shard. It does not encompass the whole
@@ -59,40 +52,15 @@ execute. Some of the benefits of shard level logging is the association
 of the actual execution on the specific machine, compared with request
 level.
 
-The logging file is configured by default using the following
-configuration (found in `log4j2.properties`):
 
-[source,properties]
---------------------------------------------------
-appender.index_search_slowlog_rolling.type = RollingFile
-appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
-appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog.log
-appender.index_search_slowlog_rolling.layout.type = PatternLayout
-appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] [%node_name]%marker %.-10000m%n
-appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog-%i.log.gz
-appender.index_search_slowlog_rolling.policies.type = Policies
-appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy
-appender.index_search_slowlog_rolling.policies.size.size = 1GB
-appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy
-appender.index_search_slowlog_rolling.strategy.max = 4
-
-logger.index_search_slowlog_rolling.name = index.search.slowlog
-logger.index_search_slowlog_rolling.level = trace
-logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
-logger.index_search_slowlog_rolling.additivity = false
---------------------------------------------------
+The search slow log file is configured in the `log4j2.properties` file.
 
 [float]
 ==== Identifying search slow log origin
 
 It is often useful to identify what triggered a slow running query. If a call was initiated with an `X-Opaque-ID` header, then the user ID
-is included in Search Slow logs as an additional **id** field (scroll to the right).
-[source,txt]
----------------------------
-[2030-08-30T11:59:37,786][WARN ][i.s.s.query              ] [node-0] [index6][0] took[78.4micros], took_millis[0], total_hits[0 hits], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"query":{"match_all":{"boost":1.0}}}], id[MY_USER_ID],
----------------------------
-// NOTCONSOLE
-The user ID is also included in JSON logs.
+is included in Search Slow logs as an additional **id** field
+
 [source,js]
 ---------------------------
 {
@@ -122,7 +90,7 @@ The user ID is also included in JSON logs.
 === Index Slow log
 
 The indexing slow log, similar in functionality to the search slow
-log. The log file name ends with `_index_indexing_slowlog.log`. Log and
+log. The log file name ends with `_index_indexing_slowlog.json`. Log and
 the thresholds are configured in the same way as the search slowlog.
 Index slowlog sample:
 
@@ -132,12 +100,11 @@ index.indexing.slowlog.threshold.index.warn: 10s
 index.indexing.slowlog.threshold.index.info: 5s
 index.indexing.slowlog.threshold.index.debug: 2s
 index.indexing.slowlog.threshold.index.trace: 500ms
-index.indexing.slowlog.level: info
 index.indexing.slowlog.source: 1000
 --------------------------------------------------
 
 All of the above settings are _dynamic_ and can be set for each index using the
-<<indices-update-settings, update indices settings>> API. For example: 
+<<indices-update-settings, update indices settings>> API. For example:
 
 [source,console]
 --------------------------------------------------
@@ -147,7 +114,6 @@ PUT /twitter/_settings
     "index.indexing.slowlog.threshold.index.info": "5s",
     "index.indexing.slowlog.threshold.index.debug": "2s",
     "index.indexing.slowlog.threshold.index.trace": "500ms",
-    "index.indexing.slowlog.level": "info",
     "index.indexing.slowlog.source": "1000"
 }
 --------------------------------------------------
@@ -162,25 +128,4 @@ the original document format is important, you can turn off reformatting by sett
 `index.indexing.slowlog.reformat` to `false`, which will cause the source to be
 logged "as is" and can potentially span multiple log lines.
 
-The index slow log file is configured by default in the `log4j2.properties`
-file:
-
-[source,properties]
---------------------------------------------------
-appender.index_indexing_slowlog_rolling.type = RollingFile
-appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
-appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog.log
-appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
-appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] [%node_name]%marker %.-10000m%n
-appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog-%i.log.gz
-appender.index_indexing_slowlog_rolling.policies.type = Policies
-appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy
-appender.index_indexing_slowlog_rolling.policies.size.size = 1GB
-appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy
-appender.index_indexing_slowlog_rolling.strategy.max = 4
-
-logger.index_indexing_slowlog.name = index.indexing.slowlog.index
-logger.index_indexing_slowlog.level = trace
-logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
-logger.index_indexing_slowlog.additivity = false
---------------------------------------------------
+The index slow log file is configured in the `log4j2.properties` file.

+ 7 - 0
docs/reference/release-notes/8.0.0-alpha1.asciidoc

@@ -18,4 +18,11 @@ Mapping::
 Deprecations::
 * Remove undocumented endpoints of hot threads API {pull}55109[#55109]
 
+Slow loggers::
+* `index.indexing.slowlog.level` and `index.search.slowlog.level` are removed. These settings can be worked around
+by using appropriate thresholds. If for instance we want to simulate `index.indexing.slowlog.level` = `INFO` then
+all we need to do is to set `index.indexing.slowlog.threshold.index.debug` and
+`index.indexing.slowlog.threshold.index.trace` to `-1` {pull}57591[#57591]
+
+
 coming[8.0.0]

+ 0 - 2
server/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java

@@ -88,12 +88,10 @@ public final class IndexScopedSettings extends AbstractScopedSettings {
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING,
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING,
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING,
-            SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_DEBUG_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_INFO_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING,
-            IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_REFORMAT_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_MAX_SOURCE_CHARS_TO_LOG_SETTING,
             MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING,

+ 6 - 20
server/src/main/java/org/elasticsearch/index/IndexingSlowLog.java

@@ -19,6 +19,7 @@
 
 package org.elasticsearch.index;
 
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.util.StringBuilders;
@@ -58,9 +59,6 @@ public final class IndexingSlowLog implements IndexingOperationListener {
             TimeValue.timeValueMillis(-1), Property.Dynamic, Property.IndexScope);
     public static final Setting<Boolean> INDEX_INDEXING_SLOWLOG_REFORMAT_SETTING =
         Setting.boolSetting(INDEX_INDEXING_SLOWLOG_PREFIX +".reformat", true, Property.Dynamic, Property.IndexScope);
-    public static final Setting<SlowLogLevel> INDEX_INDEXING_SLOWLOG_LEVEL_SETTING =
-        new Setting<>(INDEX_INDEXING_SLOWLOG_PREFIX +".level", SlowLogLevel.TRACE.name(), SlowLogLevel::parse, Property.Dynamic,
-            Property.IndexScope);
 
     private final Logger indexLogger;
     private final Index index;
@@ -75,7 +73,6 @@ public final class IndexingSlowLog implements IndexingOperationListener {
      * <em>characters</em> of the source.
      */
     private int maxSourceCharsToLog;
-    private SlowLogLevel level;
 
     /**
      * Reads how much of the source to log. The user can specify any value they
@@ -94,7 +91,7 @@ public final class IndexingSlowLog implements IndexingOperationListener {
 
     IndexingSlowLog(IndexSettings indexSettings) {
         this.indexLogger = LogManager.getLogger(INDEX_INDEXING_SLOWLOG_PREFIX + ".index");
-        Loggers.setLevel(this.indexLogger, SlowLogLevel.TRACE.name());
+        Loggers.setLevel(this.indexLogger, Level.TRACE);
         this.index = indexSettings.getIndex();
 
         indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_INDEXING_SLOWLOG_REFORMAT_SETTING, this::setReformat);
@@ -111,8 +108,6 @@ public final class IndexingSlowLog implements IndexingOperationListener {
         indexSettings.getScopedSettings()
                 .addSettingsUpdateConsumer(INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING, this::setTraceThreshold);
         this.indexTraceThreshold = indexSettings.getValue(INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING).nanos();
-        indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_INDEXING_SLOWLOG_LEVEL_SETTING, this::setLevel);
-        setLevel(indexSettings.getValue(INDEX_INDEXING_SLOWLOG_LEVEL_SETTING));
         indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_INDEXING_SLOWLOG_MAX_SOURCE_CHARS_TO_LOG_SETTING,
                 this::setMaxSourceCharsToLog);
         this.maxSourceCharsToLog = indexSettings.getValue(INDEX_INDEXING_SLOWLOG_MAX_SOURCE_CHARS_TO_LOG_SETTING);
@@ -122,10 +117,6 @@ public final class IndexingSlowLog implements IndexingOperationListener {
         this.maxSourceCharsToLog = maxSourceCharsToLog;
     }
 
-    private void setLevel(SlowLogLevel level) {
-        this.level = level;
-    }
-
     private void setWarnThreshold(TimeValue warnThreshold) {
         this.indexWarnThreshold = warnThreshold.nanos();
     }
@@ -151,14 +142,13 @@ public final class IndexingSlowLog implements IndexingOperationListener {
         if (result.getResultType() == Engine.Result.Type.SUCCESS) {
             final ParsedDocument doc = indexOperation.parsedDoc();
             final long tookInNanos = result.getTook();
-            // when logger level is more specific than WARN AND event is within threshold it should be logged
-            if (indexWarnThreshold >= 0 && tookInNanos > indexWarnThreshold && level.isLevelEnabledFor(SlowLogLevel.WARN)) {
+            if (indexWarnThreshold >= 0 && tookInNanos > indexWarnThreshold) {
                 indexLogger.warn(IndexingSlowLogMessage.of(index, doc, tookInNanos, reformat, maxSourceCharsToLog));
-            } else if (indexInfoThreshold >= 0 && tookInNanos > indexInfoThreshold && level.isLevelEnabledFor(SlowLogLevel.INFO)) {
+            } else if (indexInfoThreshold >= 0 && tookInNanos > indexInfoThreshold) {
                 indexLogger.info(IndexingSlowLogMessage.of(index, doc, tookInNanos, reformat, maxSourceCharsToLog));
-            } else if (indexDebugThreshold >= 0 && tookInNanos > indexDebugThreshold && level.isLevelEnabledFor(SlowLogLevel.DEBUG)) {
+            } else if (indexDebugThreshold >= 0 && tookInNanos > indexDebugThreshold) {
                 indexLogger.debug(IndexingSlowLogMessage.of(index, doc, tookInNanos, reformat, maxSourceCharsToLog));
-            } else if (indexTraceThreshold >= 0 && tookInNanos > indexTraceThreshold && level.isLevelEnabledFor(SlowLogLevel.TRACE)) {
+            } else if (indexTraceThreshold >= 0 && tookInNanos > indexTraceThreshold) {
                 indexLogger.trace(IndexingSlowLogMessage.of(index, doc, tookInNanos, reformat, maxSourceCharsToLog));
             }
         }
@@ -232,8 +222,4 @@ public final class IndexingSlowLog implements IndexingOperationListener {
         return maxSourceCharsToLog;
     }
 
-    SlowLogLevel getLevel() {
-        return level;
-    }
-
 }

+ 11 - 24
server/src/main/java/org/elasticsearch/index/SearchSlowLog.java

@@ -20,6 +20,7 @@
 package org.elasticsearch.index;
 
 import com.fasterxml.jackson.core.io.JsonStringEncoder;
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.elasticsearch.common.logging.ESLogMessage;
@@ -80,18 +81,14 @@ public final class SearchSlowLog implements SearchOperationListener {
     public static final Setting<TimeValue> INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING =
         Setting.timeSetting(INDEX_SEARCH_SLOWLOG_PREFIX + ".threshold.fetch.trace", TimeValue.timeValueNanos(-1),
             TimeValue.timeValueMillis(-1), Property.Dynamic, Property.IndexScope);
-    public static final Setting<SlowLogLevel> INDEX_SEARCH_SLOWLOG_LEVEL =
-        new Setting<>(INDEX_SEARCH_SLOWLOG_PREFIX + ".level", SlowLogLevel.TRACE.name(), SlowLogLevel::parse, Property.Dynamic,
-            Property.IndexScope);
 
     private static final ToXContent.Params FORMAT_PARAMS = new ToXContent.MapParams(Collections.singletonMap("pretty", "false"));
-    private SlowLogLevel level;
 
     public SearchSlowLog(IndexSettings indexSettings) {
         this.queryLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".query");
         this.fetchLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".fetch");
-        Loggers.setLevel(this.fetchLogger, SlowLogLevel.TRACE.name());
-        Loggers.setLevel(this.queryLogger, SlowLogLevel.TRACE.name());
+        Loggers.setLevel(this.fetchLogger, Level.TRACE);
+        Loggers.setLevel(this.queryLogger, Level.TRACE);
 
         indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING,
             this::setQueryWarnThreshold);
@@ -118,37 +115,30 @@ public final class SearchSlowLog implements SearchOperationListener {
         indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING,
             this::setFetchTraceThreshold);
         this.fetchTraceThreshold = indexSettings.getValue(INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING).nanos();
-
-        indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_SEARCH_SLOWLOG_LEVEL, this::setLevel);
-        setLevel(indexSettings.getValue(INDEX_SEARCH_SLOWLOG_LEVEL));
-    }
-
-    private void setLevel(SlowLogLevel level) {
-        this.level = level;
     }
 
     @Override
     public void onQueryPhase(SearchContext context, long tookInNanos) {
-        if (queryWarnThreshold >= 0 && tookInNanos > queryWarnThreshold && level.isLevelEnabledFor(SlowLogLevel.WARN)) {
+        if (queryWarnThreshold >= 0 && tookInNanos > queryWarnThreshold) {
             queryLogger.warn(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (queryInfoThreshold >= 0 && tookInNanos > queryInfoThreshold && level.isLevelEnabledFor(SlowLogLevel.INFO)) {
+        } else if (queryInfoThreshold >= 0 && tookInNanos > queryInfoThreshold) {
             queryLogger.info(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (queryDebugThreshold >= 0 && tookInNanos > queryDebugThreshold && level.isLevelEnabledFor(SlowLogLevel.DEBUG)) {
+        } else if (queryDebugThreshold >= 0 && tookInNanos > queryDebugThreshold) {
             queryLogger.debug(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (queryTraceThreshold >= 0 && tookInNanos > queryTraceThreshold && level.isLevelEnabledFor(SlowLogLevel.TRACE)) {
+        } else if (queryTraceThreshold >= 0 && tookInNanos > queryTraceThreshold) {
             queryLogger.trace(SearchSlowLogMessage.of(context, tookInNanos));
         }
     }
 
     @Override
     public void onFetchPhase(SearchContext context, long tookInNanos) {
-        if (fetchWarnThreshold >= 0 && tookInNanos > fetchWarnThreshold && level.isLevelEnabledFor(SlowLogLevel.WARN)) {
+        if (fetchWarnThreshold >= 0 && tookInNanos > fetchWarnThreshold) {
             fetchLogger.warn(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (fetchInfoThreshold >= 0 && tookInNanos > fetchInfoThreshold && level.isLevelEnabledFor(SlowLogLevel.INFO)) {
+        } else if (fetchInfoThreshold >= 0 && tookInNanos > fetchInfoThreshold) {
             fetchLogger.info(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (fetchDebugThreshold >= 0 && tookInNanos > fetchDebugThreshold && level.isLevelEnabledFor(SlowLogLevel.DEBUG)) {
+        } else if (fetchDebugThreshold >= 0 && tookInNanos > fetchDebugThreshold) {
             fetchLogger.debug(SearchSlowLogMessage.of(context, tookInNanos));
-        } else if (fetchTraceThreshold >= 0 && tookInNanos > fetchTraceThreshold && level.isLevelEnabledFor(SlowLogLevel.TRACE)) {
+        } else if (fetchTraceThreshold >= 0 && tookInNanos > fetchTraceThreshold) {
             fetchLogger.trace(SearchSlowLogMessage.of(context, tookInNanos));
         }
     }
@@ -257,7 +247,4 @@ public final class SearchSlowLog implements SearchOperationListener {
         return fetchTraceThreshold;
     }
 
-    SlowLogLevel getLevel() {
-        return level;
-    }
 }

+ 0 - 43
server/src/main/java/org/elasticsearch/index/SlowLogLevel.java

@@ -1,43 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.elasticsearch.index;
-
-import java.util.Locale;
-
-public enum SlowLogLevel {
-    WARN(3), // most specific - little logging
-    INFO(2),
-    DEBUG(1),
-    TRACE(0); // least specific - lots of logging
-
-    private final int specificity;
-
-    SlowLogLevel(int specificity) {
-        this.specificity = specificity;
-    }
-
-    public static SlowLogLevel parse(String level) {
-        return valueOf(level.toUpperCase(Locale.ROOT));
-    }
-
-    boolean isLevelEnabledFor(SlowLogLevel levelToBeUsed) {
-        // example: this.info(2) tries to log with levelToBeUsed.warn(3) - should allow
-        return this.specificity <= levelToBeUsed.specificity;
-    }
-}

+ 32 - 92
server/src/test/java/org/elasticsearch/index/IndexingSlowLogTests.java

@@ -20,6 +20,7 @@
 package org.elasticsearch.index;
 
 import com.fasterxml.jackson.core.JsonParseException;
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -82,7 +83,7 @@ public class IndexingSlowLogTests extends ESTestCase {
 
     public void testLevelPrecedence() {
         String uuid = UUIDs.randomBase64UUID();
-        IndexMetadata metadata = createIndexMetadata(SlowLogLevel.WARN, "index-precedence", uuid);
+        IndexMetadata metadata = createIndexMetadata("index-precedence", settings(uuid));
         IndexSettings settings = new IndexSettings(metadata, Settings.EMPTY);
         IndexingSlowLog log = new IndexingSlowLog(settings);
 
@@ -92,61 +93,62 @@ public class IndexingSlowLogTests extends ESTestCase {
         Engine.IndexResult result = Mockito.mock(Engine.IndexResult.class);//(0, 0, SequenceNumbers.UNASSIGNED_SEQ_NO, false);
         Mockito.when(result.getResultType()).thenReturn(Engine.Result.Type.SUCCESS);
 
+        // For this test, when level is not breached, the level below should be used.
         {
-            //level set to WARN, should only log when WARN limit is breached
             Mockito.when(result.getTook()).thenReturn(40L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
 
             Mockito.when(result.getTook()).thenReturn(41L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNotNull(appender.getLastEventAndReset());
-
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.WARN));
         }
 
         {
-            // level set INFO, should log when INFO level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.INFO, "index", uuid));
             Mockito.when(result.getTook()).thenReturn(30L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
 
             Mockito.when(result.getTook()).thenReturn(31L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
         }
 
         {
-            // level set DEBUG, should log when DEBUG level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.DEBUG, "index", uuid));
             Mockito.when(result.getTook()).thenReturn(20L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
 
             Mockito.when(result.getTook()).thenReturn(21L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
         }
 
         {
-            // level set TRACE, should log when TRACE level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.TRACE, "index", uuid));
             Mockito.when(result.getTook()).thenReturn(10L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
             assertNull(appender.getLastEventAndReset());
 
             Mockito.when(result.getTook()).thenReturn(11L);
             log.postIndex(ShardId.fromString("[index][123]"), index, result);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
         }
     }
 
     public void testTwoLoggersDifferentLevel() {
-        IndexSettings index1Settings = new IndexSettings(createIndexMetadata(SlowLogLevel.WARN, "index1", UUIDs.randomBase64UUID()),
+        IndexSettings index1Settings = new IndexSettings(createIndexMetadata("index1", Settings.builder()
+            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
+            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
+            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN_SETTING.getKey(), "40nanos")
+            .build()),
             Settings.EMPTY);
         IndexingSlowLog log1 = new IndexingSlowLog(index1Settings);
 
-        IndexSettings index2Settings = new IndexSettings(createIndexMetadata(SlowLogLevel.TRACE, "index2", UUIDs.randomBase64UUID()),
+        IndexSettings index2Settings = new IndexSettings(createIndexMetadata("index2", Settings.builder()
+            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
+            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
+            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING.getKey(), "10nanos")
+            .build()),
             Settings.EMPTY);
         IndexingSlowLog log2 = new IndexingSlowLog(index2Settings);
 
@@ -157,12 +159,13 @@ public class IndexingSlowLogTests extends ESTestCase {
         Mockito.when(result.getResultType()).thenReturn(Engine.Result.Type.SUCCESS);
 
         {
-            // level set WARN, should not log
             Mockito.when(result.getTook()).thenReturn(11L);
+
+            // threshold set on WARN(40nanos) where 11nanos does not breach, should not log
             log1.postIndex(ShardId.fromString("[index][123]"), index, result);
             assertNull(appender.getLastEventAndReset());
 
-            // level set TRACE, should log
+            // threshold set on TRACE(10nanos) and 11nanos breaches it, should log
             log2.postIndex(ShardId.fromString("[index][123]"), index, result);
             assertNotNull(appender.getLastEventAndReset());
         }
@@ -171,14 +174,14 @@ public class IndexingSlowLogTests extends ESTestCase {
     public void testMultipleSlowLoggersUseSingleLog4jLogger() {
         LoggerContext context = (LoggerContext) LogManager.getContext(false);
 
-        IndexSettings index1Settings = new IndexSettings(createIndexMetadata(SlowLogLevel.WARN, "index1", UUIDs.randomBase64UUID()),
+        IndexSettings index1Settings = new IndexSettings(createIndexMetadata("index1", settings(UUIDs.randomBase64UUID())),
             Settings.EMPTY);
         IndexingSlowLog log1 = new IndexingSlowLog(index1Settings);
 
         int numberOfLoggersBefore = context.getLoggers().size();
 
 
-        IndexSettings index2Settings = new IndexSettings(createIndexMetadata(SlowLogLevel.TRACE, "index2", UUIDs.randomBase64UUID()),
+        IndexSettings index2Settings = new IndexSettings(createIndexMetadata("index2", settings(UUIDs.randomBase64UUID())),
             Settings.EMPTY);
         IndexingSlowLog log2 = new IndexingSlowLog(index2Settings);
         context = (LoggerContext) LogManager.getContext(false);
@@ -187,16 +190,19 @@ public class IndexingSlowLogTests extends ESTestCase {
         assertThat(numberOfLoggersAfter, equalTo(numberOfLoggersBefore));
     }
 
-    private IndexMetadata createIndexMetadata(SlowLogLevel level, String index, String uuid) {
-        return newIndexMeta(index, Settings.builder()
+    private IndexMetadata createIndexMetadata(String index, Settings build) {
+        return newIndexMeta(index, build);
+    }
+
+    private Settings settings(String uuid) {
+        return Settings.builder()
             .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
             .put(IndexMetadata.SETTING_INDEX_UUID, uuid)
-            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), level)
             .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING.getKey(), "10nanos")
             .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_DEBUG_SETTING.getKey(), "20nanos")
             .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_INFO_SETTING.getKey(), "30nanos")
             .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN_SETTING.getKey(), "40nanos")
-            .build());
+            .build();
     }
 
     public void testSlowLogMessageHasJsonFields() throws IOException {
@@ -315,72 +321,6 @@ public class IndexingSlowLogTests extends ESTestCase {
         assertTrue(log.isReformat());
     }
 
-    public void testLevelSetting() {
-        SlowLogLevel level = randomFrom(SlowLogLevel.values());
-        IndexMetadata metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), level)
-            .build());
-        IndexSettings settings = new IndexSettings(metadata, Settings.EMPTY);
-        IndexingSlowLog log = new IndexingSlowLog(settings);
-        assertEquals(level, log.getLevel());
-        level = randomFrom(SlowLogLevel.values());
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-        level = randomFrom(SlowLogLevel.values());
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-
-
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-
-        settings.updateIndexMetadata(newIndexMeta("index", Settings.EMPTY));
-        assertEquals(SlowLogLevel.TRACE, log.getLevel());
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        log = new IndexingSlowLog(settings);
-        assertTrue(log.isReformat());
-        try {
-            settings.updateIndexMetadata(newIndexMeta("index",
-                Settings.builder().put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), "NOT A LEVEL").build()));
-            fail();
-        } catch (IllegalArgumentException ex) {
-            final String expected = "illegal value can't update [index.indexing.slowlog.level] from [TRACE] to [NOT A LEVEL]";
-            assertThat(ex, hasToString(containsString(expected)));
-            assertNotNull(ex.getCause());
-            assertThat(ex.getCause(), instanceOf(IllegalArgumentException.class));
-            final IllegalArgumentException cause = (IllegalArgumentException) ex.getCause();
-            assertThat(cause, hasToString(containsString("No enum constant org.elasticsearch.index.SlowLogLevel.NOT A LEVEL")));
-        }
-        assertEquals(SlowLogLevel.TRACE, log.getLevel());
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
-            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), SlowLogLevel.DEBUG)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        IndexingSlowLog debugLog = new IndexingSlowLog(settings);
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
-            .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), SlowLogLevel.INFO)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        IndexingSlowLog infoLog = new IndexingSlowLog(settings);
-
-        assertEquals(SlowLogLevel.DEBUG, debugLog.getLevel());
-        assertEquals(SlowLogLevel.INFO, infoLog.getLevel());
-    }
-
     public void testSetLevels() {
         IndexMetadata metadata = newIndexMeta("index", Settings.builder()
             .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)

+ 48 - 108
server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java

@@ -19,6 +19,7 @@
 
 package org.elasticsearch.index;
 
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -106,84 +107,101 @@ public class SearchSlowLogTests extends ESSingleNodeTestCase {
         SearchContext ctx = searchContextWithSourceAndTask(createIndex("index"));
         String uuid = UUIDs.randomBase64UUID();
         IndexSettings settings =
-            new IndexSettings(createIndexMetadata(SlowLogLevel.WARN, "index", uuid), Settings.EMPTY);
+            new IndexSettings(createIndexMetadata("index", settings(uuid)), Settings.EMPTY);
         SearchSlowLog log = new SearchSlowLog(settings);
 
+        // For this test, when level is not breached, the level below should be used.
         {
-            //level set to WARN, should only log when WARN limit is breached
             log.onQueryPhase(ctx, 40L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
             log.onQueryPhase(ctx, 41L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.WARN));
 
             log.onFetchPhase(ctx, 40L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
             log.onFetchPhase(ctx, 41L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.WARN));
         }
 
         {
-            // level set INFO, should log when INFO level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.INFO, "index", uuid));
             log.onQueryPhase(ctx, 30L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
             log.onQueryPhase(ctx, 31L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
 
             log.onFetchPhase(ctx, 30L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
             log.onFetchPhase(ctx, 31L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.INFO));
         }
 
         {
-            // level set DEBUG, should log when DEBUG level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.DEBUG, "index", uuid));
             log.onQueryPhase(ctx, 20L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
             log.onQueryPhase(ctx, 21L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
 
             log.onFetchPhase(ctx, 20L);
-            assertNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
             log.onFetchPhase(ctx, 21L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.DEBUG));
         }
 
         {
-            // level set TRACE, should log when TRACE level is breached
-            settings.updateIndexMetadata(createIndexMetadata(SlowLogLevel.TRACE, "index", uuid));
             log.onQueryPhase(ctx, 10L);
             assertNull(appender.getLastEventAndReset());
             log.onQueryPhase(ctx, 11L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
 
             log.onFetchPhase(ctx, 10L);
             assertNull(appender.getLastEventAndReset());
             log.onFetchPhase(ctx, 11L);
-            assertNotNull(appender.getLastEventAndReset());
+            assertThat(appender.getLastEventAndReset().getLevel(), equalTo(Level.TRACE));
         }
     }
 
+    private Settings.Builder settings(String uuid) {
+        return Settings.builder()
+            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
+            .put(IndexMetadata.SETTING_INDEX_UUID, uuid)
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING.getKey(), "10nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_DEBUG_SETTING.getKey(), "20nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_INFO_SETTING.getKey(), "30nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_WARN_SETTING.getKey(), "40nanos")
+
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING.getKey(), "10nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING.getKey(), "20nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING.getKey(), "30nanos")
+            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING.getKey(), "40nanos");
+    }
+
     public void testTwoLoggersDifferentLevel() {
         SearchContext ctx1 = searchContextWithSourceAndTask(createIndex("index-1"));
         SearchContext ctx2 = searchContextWithSourceAndTask(createIndex("index-2"));
         IndexSettings settings1 =
-            new IndexSettings(createIndexMetadata(SlowLogLevel.WARN, "index-1", UUIDs.randomBase64UUID()), Settings.EMPTY);
+            new IndexSettings(createIndexMetadata("index-1", Settings.builder()
+                .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
+                .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
+                .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_WARN_SETTING.getKey(), "40nanos")
+                .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING.getKey(), "40nanos")), Settings.EMPTY);
         SearchSlowLog log1 = new SearchSlowLog(settings1);
 
         IndexSettings settings2 =
-            new IndexSettings(createIndexMetadata(SlowLogLevel.TRACE, "index-2", UUIDs.randomBase64UUID()), Settings.EMPTY);
+            new IndexSettings(createIndexMetadata("index-2", Settings.builder()
+                .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
+                .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
+                .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING.getKey(), "10nanos")
+                .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING.getKey(), "10nanos")), Settings.EMPTY);
         SearchSlowLog log2 = new SearchSlowLog(settings2);
 
         {
-            // level set WARN, should not log
+            // threshold set on WARN only, should not log
             log1.onQueryPhase(ctx1, 11L);
             assertNull(appender.getLastEventAndReset());
             log1.onFetchPhase(ctx1, 11L);
             assertNull(appender.getLastEventAndReset());
 
-            // level set TRACE, should log
+            // threshold set on TRACE, should log
             log2.onQueryPhase(ctx2, 11L);
             assertNotNull(appender.getLastEventAndReset());
             log2.onFetchPhase(ctx2, 11L);
@@ -196,34 +214,21 @@ public class SearchSlowLogTests extends ESSingleNodeTestCase {
 
         SearchContext ctx1 = searchContextWithSourceAndTask(createIndex("index-1"));
         IndexSettings settings1 =
-            new IndexSettings(createIndexMetadata(SlowLogLevel.WARN, "index-1", UUIDs.randomBase64UUID()), Settings.EMPTY);
+            new IndexSettings(createIndexMetadata("index-1", settings(UUIDs.randomBase64UUID())), Settings.EMPTY);
         SearchSlowLog log1 = new SearchSlowLog(settings1);
         int numberOfLoggersBefore = context.getLoggers().size();
 
         SearchContext ctx2 = searchContextWithSourceAndTask(createIndex("index-2"));
         IndexSettings settings2 =
-            new IndexSettings(createIndexMetadata(SlowLogLevel.TRACE, "index-2", UUIDs.randomBase64UUID()), Settings.EMPTY);
+            new IndexSettings(createIndexMetadata("index-2", settings(UUIDs.randomBase64UUID())), Settings.EMPTY);
         SearchSlowLog log2 = new SearchSlowLog(settings2);
 
         int numberOfLoggersAfter = context.getLoggers().size();
         assertThat(numberOfLoggersAfter, equalTo(numberOfLoggersBefore));
     }
 
-    private IndexMetadata createIndexMetadata(SlowLogLevel level, String index, String uuid) {
-        return newIndexMeta(index, Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexMetadata.SETTING_INDEX_UUID, uuid)
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), level)
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_TRACE_SETTING.getKey(), "10nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_DEBUG_SETTING.getKey(), "20nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_INFO_SETTING.getKey(), "30nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_WARN_SETTING.getKey(), "40nanos")
-
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING.getKey(), "10nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING.getKey(), "20nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING.getKey(), "30nanos")
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING.getKey(), "40nanos")
-            .build());
+    private IndexMetadata createIndexMetadata(String index, Settings.Builder put) {
+        return newIndexMeta(index, put.build());
     }
 
     public void testSlowLogHasJsonFields() throws IOException {
@@ -272,71 +277,6 @@ public class SearchSlowLogTests extends ESSingleNodeTestCase {
         assertThat(p.get("id"), equalTo("my_id"));
     }
 
-    public void testLevelSetting() {
-        SlowLogLevel level = randomFrom(SlowLogLevel.values());
-        IndexMetadata metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), level)
-            .build());
-        IndexSettings settings = new IndexSettings(metadata, Settings.EMPTY);
-        SearchSlowLog log = new SearchSlowLog(settings);
-        assertEquals(level, log.getLevel());
-        level = randomFrom(SlowLogLevel.values());
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-        level = randomFrom(SlowLogLevel.values());
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-
-
-        settings.updateIndexMetadata(newIndexMeta("index",
-            Settings.builder().put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), level).build()));
-        assertEquals(level, log.getLevel());
-
-        settings.updateIndexMetadata(newIndexMeta("index", Settings.EMPTY));
-        assertEquals(SlowLogLevel.TRACE, log.getLevel());
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        log = new SearchSlowLog(settings);
-        try {
-            settings.updateIndexMetadata(newIndexMeta("index",
-                Settings.builder().put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), "NOT A LEVEL").build()));
-            fail();
-        } catch (IllegalArgumentException ex) {
-            final String expected = "illegal value can't update [index.search.slowlog.level] from [TRACE] to [NOT A LEVEL]";
-            assertThat(ex, hasToString(containsString(expected)));
-            assertNotNull(ex.getCause());
-            assertThat(ex.getCause(), instanceOf(IllegalArgumentException.class));
-            final IllegalArgumentException cause = (IllegalArgumentException) ex.getCause();
-            assertThat(cause, hasToString(containsString("No enum constant org.elasticsearch.index.SlowLogLevel.NOT A LEVEL")));
-        }
-        assertEquals(SlowLogLevel.TRACE, log.getLevel());
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), SlowLogLevel.DEBUG)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        SearchSlowLog debugLog = new SearchSlowLog(settings);
-
-        metadata = newIndexMeta("index", Settings.builder()
-            .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
-            .put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
-            .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), SlowLogLevel.INFO)
-            .build());
-        settings = new IndexSettings(metadata, Settings.EMPTY);
-        SearchSlowLog infoLog = new SearchSlowLog(settings);
-
-        assertEquals(SlowLogLevel.DEBUG, debugLog.getLevel());
-        assertEquals(SlowLogLevel.INFO, infoLog.getLevel());
-    }
-
     public void testSetQueryLevels() {
         IndexMetadata metadata = newIndexMeta("index", Settings.builder()
             .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)

+ 0 - 57
server/src/test/java/org/elasticsearch/index/SlowLogLevelTests.java

@@ -1,57 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.index;
-
-import org.elasticsearch.test.ESTestCase;
-
-
-public class SlowLogLevelTests extends ESTestCase {
-
-    public void testTracePrecedence() {
-        assertTrue(SlowLogLevel.TRACE.isLevelEnabledFor(SlowLogLevel.TRACE));
-        assertTrue(SlowLogLevel.TRACE.isLevelEnabledFor(SlowLogLevel.DEBUG));
-        assertTrue(SlowLogLevel.TRACE.isLevelEnabledFor(SlowLogLevel.INFO));
-        assertTrue(SlowLogLevel.TRACE.isLevelEnabledFor(SlowLogLevel.WARN));
-    }
-
-    public void testDebugPrecedence() {
-        assertFalse(SlowLogLevel.DEBUG.isLevelEnabledFor(SlowLogLevel.TRACE));
-
-        assertTrue(SlowLogLevel.DEBUG.isLevelEnabledFor(SlowLogLevel.DEBUG));
-        assertTrue(SlowLogLevel.DEBUG.isLevelEnabledFor(SlowLogLevel.INFO));
-        assertTrue(SlowLogLevel.DEBUG.isLevelEnabledFor(SlowLogLevel.WARN));
-    }
-
-    public void testInfoPrecedence() {
-        assertFalse(SlowLogLevel.INFO.isLevelEnabledFor(SlowLogLevel.TRACE));
-        assertFalse(SlowLogLevel.INFO.isLevelEnabledFor(SlowLogLevel.DEBUG));
-
-        assertTrue(SlowLogLevel.INFO.isLevelEnabledFor(SlowLogLevel.INFO));
-        assertTrue(SlowLogLevel.INFO.isLevelEnabledFor(SlowLogLevel.WARN));
-    }
-
-    public void testWarnPrecedence() {
-        assertFalse(SlowLogLevel.WARN.isLevelEnabledFor(SlowLogLevel.TRACE));
-        assertFalse(SlowLogLevel.WARN.isLevelEnabledFor(SlowLogLevel.DEBUG));
-        assertFalse(SlowLogLevel.WARN.isLevelEnabledFor(SlowLogLevel.INFO));
-
-        assertTrue(SlowLogLevel.WARN.isLevelEnabledFor(SlowLogLevel.WARN));
-    }
-}

+ 0 - 2
x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/TransportResumeFollowAction.java

@@ -412,12 +412,10 @@ public class TransportResumeFollowAction extends TransportMasterNodeAction<Resum
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING,
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING,
             SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING,
-            SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_DEBUG_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_INFO_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_TRACE_SETTING,
-            IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_REFORMAT_SETTING,
             IndexingSlowLog.INDEX_INDEXING_SLOWLOG_MAX_SOURCE_CHARS_TO_LOG_SETTING,
             MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING,