Skip to content

Commit 2e8e058

Browse files
authored
Do not throttle deprecated field logs (elastic#70009)
The commit elastic#55115 removed the possibility to directly force deprecation log to be emitted. This means that usage of deprecated fields was throttled and only one deprecation was logged. The key was common for all fields = "deprecated_field". This commit appends a used deprecated field name to prevent that throttled.
1 parent 048b7d4 commit 2e8e058

File tree

3 files changed

+77
-15
lines changed

3 files changed

+77
-15
lines changed

qa/logging-config/src/test/java/org/elasticsearch/common/logging/JsonLoggerTests.java

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
import org.apache.logging.log4j.core.config.Configurator;
1616
import org.elasticsearch.cli.UserException;
1717
import org.elasticsearch.common.CheckedConsumer;
18+
import org.elasticsearch.common.ParseField;
1819
import org.elasticsearch.common.io.PathUtils;
1920
import org.elasticsearch.common.settings.Settings;
2021
import org.elasticsearch.common.util.concurrent.ThreadContext;
22+
import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
2123
import org.elasticsearch.env.Environment;
2224
import org.elasticsearch.index.shard.ShardId;
2325
import org.elasticsearch.tasks.Task;
@@ -76,7 +78,7 @@ public void tearDown() throws Exception {
7678
}
7779

7880
public void testDeprecatedMessageWithoutXOpaqueId() throws IOException {
79-
final DeprecationLogger testLogger = DeprecationLogger.getLogger("test");
81+
final DeprecationLogger testLogger = DeprecationLogger.getLogger("org.elasticsearch.test");
8082

8183
testLogger.deprecate(DeprecationCategory.OTHER, "a key", "deprecated message1");
8284

@@ -91,7 +93,7 @@ public void testDeprecatedMessageWithoutXOpaqueId() throws IOException {
9193
allOf(
9294
hasEntry("event.dataset", "elasticsearch.deprecation"),
9395
hasEntry("log.level", "DEPRECATION"),
94-
hasEntry("log.logger", "deprecation.test"),
96+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
9597
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
9698
hasEntry("elasticsearch.node.name", "sample-name"),
9799
hasEntry("message", "deprecated message1"),
@@ -111,7 +113,7 @@ public void testDeprecatedMessageWithoutXOpaqueId() throws IOException {
111113
public void testCompatibleLog() throws Exception {
112114
withThreadContext(threadContext -> {
113115
threadContext.putHeader(Task.X_OPAQUE_ID, "someId");
114-
final DeprecationLogger testLogger = DeprecationLogger.getLogger("test");
116+
final DeprecationLogger testLogger = DeprecationLogger.getLogger("org.elasticsearch.test");
115117
testLogger.deprecate(DeprecationCategory.OTHER,"someKey", "deprecated message1")
116118
.compatibleApiWarning("compatibleKey","compatible API message");
117119

@@ -131,7 +133,7 @@ public void testCompatibleLog() throws Exception {
131133
hasEntry("event.dataset", "elasticsearch.deprecation"),
132134
hasEntry("data_stream.dataset", "elasticsearch.deprecation"),
133135
hasEntry("data_stream.type", "logs"),
134-
hasEntry("log.logger", "deprecation.test"),
136+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
135137
hasEntry("ecs.version", DeprecatedMessage.ECS_VERSION),
136138
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
137139
hasEntry("elasticsearch.node.name", "sample-name"),
@@ -146,7 +148,7 @@ public void testCompatibleLog() throws Exception {
146148
hasEntry("event.dataset", "elasticsearch.deprecation"),
147149
hasEntry("data_stream.dataset", "elasticsearch.deprecation"),
148150
hasEntry("data_stream.type", "logs"),
149-
hasEntry("log.logger", "deprecation.test"),
151+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
150152
hasEntry("ecs.version", DeprecatedMessage.ECS_VERSION),
151153
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
152154
hasEntry("elasticsearch.node.name", "sample-name"),
@@ -163,10 +165,70 @@ public void testCompatibleLog() throws Exception {
163165
});
164166
}
165167

168+
public void testParseFieldEmittingLogs() throws Exception {
169+
withThreadContext(threadContext -> {
170+
threadContext.putHeader(Task.X_OPAQUE_ID, "someId");
171+
172+
ParseField deprecatedField = new ParseField("new_name", "deprecated_name");
173+
assertTrue(deprecatedField.match("deprecated_name", LoggingDeprecationHandler.INSTANCE));
174+
175+
ParseField deprecatedField2 = new ParseField("new_name", "deprecated_name2");
176+
assertTrue(deprecatedField2.match("deprecated_name2", LoggingDeprecationHandler.INSTANCE));
177+
178+
final Path path = PathUtils.get(
179+
System.getProperty("es.logs.base_path"),
180+
System.getProperty("es.logs.cluster_name") + "_deprecated.json"
181+
);
182+
183+
try (Stream<Map<String, String>> stream = JsonLogsStream.mapStreamFrom(path)) {
184+
List<Map<String, String>> jsonLogs = stream.collect(Collectors.toList());
185+
186+
assertThat(
187+
jsonLogs,
188+
contains(
189+
// deprecation log for field deprecated_name
190+
allOf(
191+
hasEntry("log.level", "DEPRECATION"),
192+
hasEntry("event.dataset", "elasticsearch.deprecation"),
193+
hasEntry("data_stream.dataset", "elasticsearch.deprecation"),
194+
hasEntry("data_stream.type", "logs"),
195+
hasEntry("log.logger", "org.elasticsearch.deprecation.common.ParseField"),
196+
hasEntry("ecs.version", DeprecatedMessage.ECS_VERSION),
197+
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
198+
hasEntry("elasticsearch.node.name", "sample-name"),
199+
hasEntry("message", "Deprecated field [deprecated_name] used, expected [new_name] instead"),
200+
hasEntry(DeprecatedMessage.KEY_FIELD_NAME, "deprecated_field_deprecated_name"),
201+
hasEntry(DeprecatedMessage.X_OPAQUE_ID_FIELD_NAME, "someId"),
202+
hasEntry("elasticsearch.event.category", "api")
203+
),
204+
// deprecation log for field deprecated_name2
205+
allOf(
206+
hasEntry("log.level", "DEPRECATION"),
207+
hasEntry("event.dataset", "elasticsearch.deprecation"),
208+
hasEntry("data_stream.dataset", "elasticsearch.deprecation"),
209+
hasEntry("data_stream.type", "logs"),
210+
hasEntry("log.logger", "org.elasticsearch.deprecation.common.ParseField"),
211+
hasEntry("ecs.version", DeprecatedMessage.ECS_VERSION),
212+
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
213+
hasEntry("elasticsearch.node.name", "sample-name"),
214+
hasEntry("message", "Deprecated field [deprecated_name2] used, expected [new_name] instead"),
215+
hasEntry(DeprecatedMessage.KEY_FIELD_NAME, "deprecated_field_deprecated_name2"),
216+
hasEntry(DeprecatedMessage.X_OPAQUE_ID_FIELD_NAME, "someId"),
217+
hasEntry("elasticsearch.event.category", "api")
218+
)
219+
)
220+
);
221+
}
222+
223+
assertWarnings("Deprecated field [deprecated_name] used, expected [new_name] instead",
224+
"Deprecated field [deprecated_name2] used, expected [new_name] instead");
225+
});
226+
}
227+
166228
public void testDeprecatedMessage() throws Exception {
167229
withThreadContext(threadContext -> {
168230
threadContext.putHeader(Task.X_OPAQUE_ID, "someId");
169-
final DeprecationLogger testLogger = DeprecationLogger.getLogger("test");
231+
final DeprecationLogger testLogger = DeprecationLogger.getLogger("org.elasticsearch.test");
170232
testLogger.deprecate(DeprecationCategory.OTHER, "someKey", "deprecated message1");
171233

172234
final Path path = PathUtils.get(
@@ -183,7 +245,7 @@ public void testDeprecatedMessage() throws Exception {
183245
allOf(
184246
hasEntry("event.dataset", "elasticsearch.deprecation"),
185247
hasEntry("log.level", "DEPRECATION"),
186-
hasEntry("log.logger", "deprecation.test"),
248+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
187249
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
188250
hasEntry("elasticsearch.node.name", "sample-name"),
189251
hasEntry("message", "deprecated message1"),
@@ -374,7 +436,7 @@ public void testJsonInStacktraceMessageIsNotSplitted() throws IOException {
374436

375437

376438
public void testDuplicateLogMessages() throws Exception {
377-
final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger("test");
439+
final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger("org.elasticsearch.test");
378440

379441
// For the same key and X-Opaque-ID deprecation should be once
380442
withThreadContext(threadContext -> {
@@ -393,7 +455,7 @@ public void testDuplicateLogMessages() throws Exception {
393455
allOf(
394456
hasEntry("event.dataset", "elasticsearch.deprecation"),
395457
hasEntry("log.level", "DEPRECATION"),
396-
hasEntry("log.logger", "deprecation.test"),
458+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
397459
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
398460
hasEntry("elasticsearch.node.name", "sample-name"),
399461
hasEntry("message", "message1"),
@@ -425,7 +487,7 @@ public void testDuplicateLogMessages() throws Exception {
425487
allOf(
426488
hasEntry("event.dataset", "elasticsearch.deprecation"),
427489
hasEntry("log.level", "DEPRECATION"),
428-
hasEntry("log.logger", "deprecation.test"),
490+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
429491
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
430492
hasEntry("elasticsearch.node.name", "sample-name"),
431493
hasEntry("message", "message1"),
@@ -435,7 +497,7 @@ public void testDuplicateLogMessages() throws Exception {
435497
allOf(
436498
hasEntry("event.dataset", "elasticsearch.deprecation"),
437499
hasEntry("log.level", "DEPRECATION"),
438-
hasEntry("log.logger", "deprecation.test"),
500+
hasEntry("log.logger", "org.elasticsearch.deprecation.test"),
439501
hasEntry("elasticsearch.cluster.name", "elasticsearch"),
440502
hasEntry("elasticsearch.node.name", "sample-name"),
441503
hasEntry("message", "message1"),

qa/logging-config/src/test/resources/org/elasticsearch/common/logging/json_layout/log4j2.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ appender.plaintext.filter.rate_limit.type = RateLimitingFilter
3737
appender.header_warning.type = HeaderWarningAppender
3838
appender.header_warning.name = header_warning
3939

40-
logger.deprecation.name = deprecation.test
40+
logger.deprecation.name = org.elasticsearch.deprecation
4141
logger.deprecation.level = deprecation
4242
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecated
4343
logger.deprecation.appenderRef.deprecatedconsole.ref = deprecatedconsole

server/src/main/java/org/elasticsearch/common/xcontent/LoggingDeprecationHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,21 @@ private LoggingDeprecationHandler() {
4242
@Override
4343
public void usedDeprecatedName(String parserName, Supplier<XContentLocation> location, String usedName, String modernName) {
4444
String prefix = parserName == null ? "" : "[" + parserName + "][" + location.get() + "] ";
45-
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field",
45+
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field_" + usedName,
4646
"{}Deprecated field [{}] used, expected [{}] instead", prefix, usedName, modernName);
4747
}
4848

4949
@Override
5050
public void usedDeprecatedField(String parserName, Supplier<XContentLocation> location, String usedName, String replacedWith) {
5151
String prefix = parserName == null ? "" : "[" + parserName + "][" + location.get() + "] ";
52-
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field",
52+
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field_" + usedName,
5353
"{}Deprecated field [{}] used, replaced by [{}]", prefix, usedName, replacedWith);
5454
}
5555

5656
@Override
5757
public void usedDeprecatedField(String parserName, Supplier<XContentLocation> location, String usedName) {
5858
String prefix = parserName == null ? "" : "[" + parserName + "][" + location.get() + "] ";
59-
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field",
59+
deprecationLogger.deprecate(DeprecationCategory.API, "deprecated_field_" + usedName,
6060
"{}Deprecated field [{}] used, this field is unused and will be removed entirely", prefix, usedName);
6161
}
6262
}

0 commit comments

Comments
 (0)