Skip to content

Commit f0aa24e

Browse files
authored
Implement deprecation logging using log4j (#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 d070c99 commit f0aa24e

File tree

21 files changed

+533
-371
lines changed

21 files changed

+533
-371
lines changed

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

+6-1
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 = ECSJsonLayout
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

+6-1
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,23 @@ appender.deprecation_rolling.name = deprecation_rolling
6363
appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json
6464
appender.deprecation_rolling.layout.type = ECSJsonLayout
6565
appender.deprecation_rolling.layout.type_name = deprecation
66+
appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter
6667

6768
appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz
6869
appender.deprecation_rolling.policies.type = Policies
6970
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
7071
appender.deprecation_rolling.policies.size.size = 1GB
7172
appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
7273
appender.deprecation_rolling.strategy.max = 4
74+
75+
appender.header_warning.type = HeaderWarningAppender
76+
appender.header_warning.name = header_warning
7377
#################################################
7478

7579
logger.deprecation.name = org.elasticsearch.deprecation
76-
logger.deprecation.level = warn
80+
logger.deprecation.level = deprecation
7781
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
82+
logger.deprecation.appenderRef.header_warning.ref = header_warning
7883
logger.deprecation.additivity = false
7984

8085
######## Search slowlog JSON ####################

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

+6-48
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) {
@@ -180,8 +181,8 @@ public void testConcurrentDeprecationLogger() throws IOException, UserException,
180181
for (int i = 0; i < 128; i++) {
181182
assertLogLine(
182183
deprecationEvents.get(i),
183-
Level.WARN,
184-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
184+
DEPRECATION,
185+
"org.elasticsearch.common.logging.DeprecationLogger\\$DeprecationLoggerBuilder.withDeprecation",
185186
"This is a maybe logged deprecation message" + i);
186187
}
187188

@@ -191,49 +192,6 @@ public void testConcurrentDeprecationLogger() throws IOException, UserException,
191192

192193
}
193194

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

@@ -256,8 +214,8 @@ public void testDeprecatedSettings() throws IOException, UserException {
256214
assertThat(deprecationEvents.size(), equalTo(1));
257215
assertLogLine(
258216
deprecationEvents.get(0),
259-
Level.WARN,
260-
"org.elasticsearch.common.logging.ThrottlingLogger\\$2\\.run",
217+
DEPRECATION,
218+
"org.elasticsearch.common.logging.DeprecationLogger\\$DeprecationLoggerBuilder.withDeprecation",
261219
"\\[deprecated.foo\\] setting was deprecated in Elasticsearch and will be removed in a future release! " +
262220
"See the breaking changes documentation for the next major version.");
263221
}

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

+6-1
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

+6-1
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

+6-1
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

+6-1
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

+7-1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ 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
@@ -78,6 +79,7 @@ appender.deprecation_rolling_old.name = deprecation_rolling_old
7879
appender.deprecation_rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
7980
appender.deprecation_rolling_old.layout.type = PatternLayout
8081
appender.deprecation_rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n
82+
appender.deprecation_rolling_old.filter.rate_limit.type = RateLimitingFilter
8183

8284
appender.deprecation_rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\
8385
_deprecation-%i.log.gz
@@ -87,10 +89,14 @@ appender.deprecation_rolling_old.policies.size.size = 1GB
8789
appender.deprecation_rolling_old.strategy.type = DefaultRolloverStrategy
8890
appender.deprecation_rolling_old.strategy.max = 4
8991
#################################################
92+
appender.header_warning.type = HeaderWarningAppender
93+
appender.header_warning.name = header_warning
94+
#################################################
9095
logger.deprecation.name = org.elasticsearch.deprecation
91-
logger.deprecation.level = warn
96+
logger.deprecation.level = deprecation
9297
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
9398
logger.deprecation.appenderRef.deprecation_rolling_old.ref = deprecation_rolling_old
99+
logger.deprecation.appenderRef.header_warning.ref = header_warning
94100
logger.deprecation.additivity = false
95101

96102
######## Search slowlog JSON ####################

0 commit comments

Comments
 (0)