Skip to content

Commit ff6c071

Browse files
authored
Implement deprecation logging using log4j (#61629)
Backport of #61474. Part of #46106. Simplify the implementation of deprecation logging by relying of log4j more completely, and implementing additional behaviour through custom appenders and filters.
1 parent 4c9fe31 commit ff6c071

File tree

21 files changed

+532
-359
lines changed

21 files changed

+532
-359
lines changed

distribution/docker/src/docker/config/oss/log4j2.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ appender.rolling.layout.type_name = server
88
rootLogger.level = info
99
rootLogger.appenderRef.rolling.ref = rolling
1010

11+
appender.header_warning.type = HeaderWarningAppender
12+
appender.header_warning.name = header_warning
13+
1114
appender.deprecation_rolling.type = Console
1215
appender.deprecation_rolling.name = deprecation_rolling
1316
appender.deprecation_rolling.layout.type = ESJsonLayout
1417
appender.deprecation_rolling.layout.type_name = deprecation
18+
appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter
1519

1620
logger.deprecation.name = org.elasticsearch.deprecation
17-
logger.deprecation.level = warn
21+
logger.deprecation.level = deprecation
1822
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
23+
logger.deprecation.appenderRef.header_warning.ref = header_warning
1924
logger.deprecation.additivity = false
2025

2126
appender.index_search_slowlog_rolling.type = Console

distribution/src/config/log4j2.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,17 @@ appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separ
6464
appender.deprecation_rolling.layout.type = ESJsonLayout
6565
appender.deprecation_rolling.layout.type_name = deprecation
6666
appender.deprecation_rolling.layout.esmessagefields=x-opaque-id
67+
appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter
6768

6869
appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz
6970
appender.deprecation_rolling.policies.type = Policies
7071
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
7172
appender.deprecation_rolling.policies.size.size = 1GB
7273
appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
7374
appender.deprecation_rolling.strategy.max = 4
75+
76+
appender.header_warning.type = HeaderWarningAppender
77+
appender.header_warning.name = header_warning
7478
#################################################
7579
######## Deprecation - old style pattern #######
7680
appender.deprecation_rolling_old.type = RollingFile
@@ -88,9 +92,10 @@ appender.deprecation_rolling_old.strategy.type = DefaultRolloverStrategy
8892
appender.deprecation_rolling_old.strategy.max = 4
8993
#################################################
9094
logger.deprecation.name = org.elasticsearch.deprecation
91-
logger.deprecation.level = warn
95+
logger.deprecation.level = deprecation
9296
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
9397
logger.deprecation.appenderRef.deprecation_rolling_old.ref = deprecation_rolling_old
98+
logger.deprecation.appenderRef.header_warning.ref = header_warning
9499
logger.deprecation.additivity = false
95100

96101
######## Search slowlog JSON ####################

qa/evil-tests/src/test/java/org/elasticsearch/common/logging/EvilLoggerTests.java

Lines changed: 7 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import java.util.stream.Collectors;
5858
import java.util.stream.IntStream;
5959

60+
import static org.elasticsearch.common.logging.DeprecationLogger.DEPRECATION;
6061
import static org.hamcrest.Matchers.endsWith;
6162
import static org.hamcrest.Matchers.equalTo;
6263
import static org.hamcrest.Matchers.hasItem;
@@ -119,7 +120,7 @@ public void testConcurrentDeprecationLogger() throws IOException, UserException,
119120
final List<Integer> ids = IntStream.range(0, 128).boxed().collect(Collectors.toList());
120121
Randomness.shuffle(ids);
121122
final ThreadContext threadContext = new ThreadContext(Settings.EMPTY);
122-
DeprecationLogger.setThreadContext(threadContext);
123+
HeaderWarning.setThreadContext(threadContext);
123124
try {
124125
barrier.await();
125126
} catch (final BrokenBarrierException | InterruptedException e) {
@@ -171,11 +172,12 @@ public void testConcurrentDeprecationLogger() throws IOException, UserException,
171172
// we appended an integer to each log message, use that for sorting
172173
deprecationEvents.sort(Comparator.comparingInt(s -> Integer.parseInt(s.split("message")[1])));
173174
assertThat(deprecationEvents.size(), equalTo(128));
175+
174176
for (int i = 0; i < 128; i++) {
175177
assertLogLine(
176178
deprecationEvents.get(i),
177-
Level.WARN,
178-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
179+
DEPRECATION,
180+
"org.elasticsearch.common.logging.DeprecationLogger\\$DeprecationLoggerBuilder.withDeprecation",
179181
"This is a maybe logged deprecation message" + i);
180182
}
181183

@@ -185,49 +187,6 @@ public void testConcurrentDeprecationLogger() throws IOException, UserException,
185187

186188
}
187189

188-
public void testDeprecationLoggerMaybeLog() throws IOException, UserException {
189-
setupLogging("deprecation");
190-
191-
final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger("deprecation");
192-
193-
final int iterations = randomIntBetween(1, 16);
194-
195-
for (int i = 0; i < iterations; i++) {
196-
deprecationLogger.deprecate("key", "This is a maybe logged deprecation message");
197-
assertWarnings("This is a maybe logged deprecation message");
198-
}
199-
for (int k = 0; k < 128; k++) {
200-
for (int i = 0; i < iterations; i++) {
201-
deprecationLogger.deprecate("key" + k, "This is a maybe logged deprecation message" + k);
202-
assertWarnings("This is a maybe logged deprecation message" + k);
203-
}
204-
}
205-
for (int i = 0; i < iterations; i++) {
206-
deprecationLogger.deprecate("key", "This is a maybe logged deprecation message");
207-
assertWarnings("This is a maybe logged deprecation message");
208-
}
209-
210-
final String deprecationPath =
211-
System.getProperty("es.logs.base_path") +
212-
System.getProperty("file.separator") +
213-
System.getProperty("es.logs.cluster_name") +
214-
"_deprecation.log";
215-
final List<String> deprecationEvents = Files.readAllLines(PathUtils.get(deprecationPath));
216-
assertThat(deprecationEvents.size(), equalTo(1 + 128 + 1));
217-
assertLogLine(
218-
deprecationEvents.get(0),
219-
Level.WARN,
220-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
221-
"This is a maybe logged deprecation message");
222-
for (int k = 0; k < 128; k++) {
223-
assertLogLine(
224-
deprecationEvents.get(1 + k),
225-
Level.WARN,
226-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
227-
"This is a maybe logged deprecation message" + k);
228-
}
229-
}
230-
231190
public void testDeprecatedSettings() throws IOException, UserException {
232191
setupLogging("settings");
233192

@@ -250,8 +209,8 @@ public void testDeprecatedSettings() throws IOException, UserException {
250209
assertThat(deprecationEvents.size(), equalTo(1));
251210
assertLogLine(
252211
deprecationEvents.get(0),
253-
Level.WARN,
254-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
212+
DEPRECATION,
213+
"org.elasticsearch.common.logging.DeprecationLogger\\$DeprecationLoggerBuilder.withDeprecation",
255214
"\\[deprecated.foo\\] setting was deprecated in Elasticsearch and will be removed in a future release! " +
256215
"See the breaking changes documentation for the next major version.");
257216
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ appender.deprecation_file.name = deprecation_file
2424
appender.deprecation_file.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
2525
appender.deprecation_file.layout.type = PatternLayout
2626
appender.deprecation_file.layout.pattern = [%p][%l] [%test_thread_info]%marker %m%n
27+
appender.deprecation_file.filter.rate_limit.type = RateLimitingFilter
28+
29+
appender.header_warning.type = HeaderWarningAppender
30+
appender.header_warning.name = header_warning
2731

2832
logger.deprecation.name = deprecation
29-
logger.deprecation.level = warn
33+
logger.deprecation.level = deprecation
3034
logger.deprecation.appenderRef.deprecation_file.ref = deprecation_file
35+
logger.deprecation.appenderRef.header_warning.ref = header_warning
3136
logger.deprecation.additivity = false

qa/evil-tests/src/test/resources/org/elasticsearch/common/logging/deprecation/log4j2.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ appender.deprecation_file.name = deprecation_file
1818
appender.deprecation_file.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
1919
appender.deprecation_file.layout.type = PatternLayout
2020
appender.deprecation_file.layout.pattern = [%p][%l] [%test_thread_info]%marker %m%n
21+
appender.deprecation_file.filter.rate_limit.type = RateLimitingFilter
22+
23+
appender.header_warning.type = HeaderWarningAppender
24+
appender.header_warning.name = header_warning
2125

2226
logger.deprecation.name = deprecation
23-
logger.deprecation.level = warn
27+
logger.deprecation.level = deprecation
2428
logger.deprecation.appenderRef.deprecation_file.ref = deprecation_file
29+
logger.deprecation.appenderRef.header_warning.ref = header_warning
2530
logger.deprecation.additivity = false

qa/evil-tests/src/test/resources/org/elasticsearch/common/logging/no_node_name/log4j2.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ appender.deprecation_file.name = deprecation_file
1818
appender.deprecation_file.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
1919
appender.deprecation_file.layout.type = PatternLayout
2020
appender.deprecation_file.layout.pattern = [%p][%l] %marker%m%n
21+
appender.deprecation_file.filter.rate_limit.type = RateLimitingFilter
22+
23+
appender.header_warning.type = HeaderWarningAppender
24+
appender.header_warning.name = header_warning
2125

2226
logger.deprecation.name = deprecation
23-
logger.deprecation.level = warn
27+
logger.deprecation.level = deprecation
2428
logger.deprecation.appenderRef.deprecation_file.ref = deprecation_file
29+
logger.deprecation.appenderRef.header_warning.ref = header_warning
2530
logger.deprecation.additivity = false

qa/evil-tests/src/test/resources/org/elasticsearch/common/logging/settings/log4j2.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ appender.deprecation_file.name = deprecation_file
1818
appender.deprecation_file.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
1919
appender.deprecation_file.layout.type = PatternLayout
2020
appender.deprecation_file.layout.pattern = [%p][%l] [%test_thread_info]%marker %m%n
21+
appender.deprecation_file.filter.rate_limit.type = RateLimitingFilter
22+
23+
appender.header_warning.type = HeaderWarningAppender
24+
appender.header_warning.name = header_warning
2125

2226
logger.deprecation.name = org.elasticsearch.deprecation.common.settings
23-
logger.deprecation.level = warn
27+
logger.deprecation.level = deprecation
2428
logger.deprecation.appenderRef.deprecation_console.ref = console
2529
logger.deprecation.appenderRef.deprecation_file.ref = deprecation_file
30+
logger.deprecation.appenderRef.header_warning.ref = header_warning
2631
logger.deprecation.additivity = false

qa/logging-config/custom-log4j2.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ appender.rolling.type = RollingFile
99
appender.rolling.name = rolling
1010
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log
1111
appender.rolling.layout.type = PatternLayout
12-
appender.rolling.layout.pattern =%notEmpty{%node_name} %notEmpty{%node_and_cluster_id} %notEmpty{${sys:es.logs.cluster_name}} %m%n
12+
appender.rolling.layout.pattern =%notEmpty{%node_name} %notEmpty{%node_and_cluster_id} %notEmpty{${sys:es.logs.cluster_name}} %m%n
1313

1414
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
1515
appender.rolling.policies.type = Policies

0 commit comments

Comments
 (0)