Skip to content

Commit be7f5dd

Browse files
authored
Disallow logger methods with Object parameter (#28969)
Log4j2 provides a wide range of logging methods. Our code typically only uses a subset of them. In particular, uses of the methods trace|debug|info|warn|error|fatal(Object) or trace|debug|info|warn|error|fatal(Object, Throwable) have all been wrong, leading to not properly logging the provided message. To prevent these issues in the future, the corresponding Logger methods have been blacklisted.
1 parent 7afe5ad commit be7f5dd

File tree

6 files changed

+36
-23
lines changed

6 files changed

+36
-23
lines changed

buildSrc/src/main/resources/forbidden/es-server-signatures.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,17 @@ java.time.OffsetDateTime#withYear(int)
133133
java.time.zone.ZoneRules#getStandardOffset(java.time.Instant)
134134
java.time.zone.ZoneRules#getDaylightSavings(java.time.Instant)
135135
java.time.zone.ZoneRules#isDaylightSavings(java.time.Instant)
136+
137+
@defaultMessage Use logger methods with non-Object parameter
138+
org.apache.logging.log4j.Logger#trace(java.lang.Object)
139+
org.apache.logging.log4j.Logger#trace(java.lang.Object, java.lang.Throwable)
140+
org.apache.logging.log4j.Logger#debug(java.lang.Object)
141+
org.apache.logging.log4j.Logger#debug(java.lang.Object, java.lang.Throwable)
142+
org.apache.logging.log4j.Logger#info(java.lang.Object)
143+
org.apache.logging.log4j.Logger#info(java.lang.Object, java.lang.Throwable)
144+
org.apache.logging.log4j.Logger#warn(java.lang.Object)
145+
org.apache.logging.log4j.Logger#warn(java.lang.Object, java.lang.Throwable)
146+
org.apache.logging.log4j.Logger#error(java.lang.Object)
147+
org.apache.logging.log4j.Logger#error(java.lang.Object, java.lang.Throwable)
148+
org.apache.logging.log4j.Logger#fatal(java.lang.Object)
149+
org.apache.logging.log4j.Logger#fatal(java.lang.Object, java.lang.Throwable)

server/src/main/java/org/elasticsearch/common/util/concurrent/QueueResizingEsThreadPoolExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ protected void afterExecute(Runnable r, Throwable t) {
197197
}
198198
} catch (ArithmeticException e) {
199199
// There was an integer overflow, so just log about it, rather than adjust the queue size
200-
logger.warn((Supplier<?>) () -> new ParameterizedMessage(
200+
logger.warn(() -> new ParameterizedMessage(
201201
"failed to calculate optimal queue size for [{}] thread pool, " +
202202
"total frame time [{}ns], tasks [{}], task execution time [{}ns]",
203203
getName(), totalRuntime, tasksPerFrame, totalNanos),

server/src/main/java/org/elasticsearch/index/IndexService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ private void closeShard(String reason, ShardId sId, IndexShard indexShard, Store
448448
}
449449
} catch (Exception e) {
450450
logger.warn(
451-
(Supplier<?>) () -> new ParameterizedMessage(
451+
() -> new ParameterizedMessage(
452452
"[{}] failed to close store on shard removal (reason: [{}])", shardId, reason), e);
453453
}
454454
}
@@ -467,7 +467,7 @@ private void onShardClose(ShardLock lock) {
467467
} catch (IOException e) {
468468
shardStoreDeleter.addPendingDelete(lock.getShardId(), indexSettings);
469469
logger.debug(
470-
(Supplier<?>) () -> new ParameterizedMessage(
470+
() -> new ParameterizedMessage(
471471
"[{}] failed to delete shard content - scheduled a retry", lock.getShardId().id()), e);
472472
}
473473
}
@@ -623,7 +623,7 @@ public synchronized void updateMetaData(final IndexMetaData metadata) {
623623
shard.onSettingsChanged();
624624
} catch (Exception e) {
625625
logger.warn(
626-
(Supplier<?>) () -> new ParameterizedMessage(
626+
() -> new ParameterizedMessage(
627627
"[{}] failed to notify shard about setting change", shard.shardId().id()), e);
628628
}
629629
}
@@ -832,7 +832,7 @@ public final void run() {
832832
if (lastThrownException == null || sameException(lastThrownException, ex) == false) {
833833
// prevent the annoying fact of logging the same stuff all the time with an interval of 1 sec will spam all your logs
834834
indexService.logger.warn(
835-
(Supplier<?>) () -> new ParameterizedMessage(
835+
() -> new ParameterizedMessage(
836836
"failed to run task {} - suppressing re-occurring exceptions unless the exception changes",
837837
toString()),
838838
ex);

server/src/main/java/org/elasticsearch/indices/IndicesService.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ Map<Index, List<IndexShardStats>> statsByShard(final IndicesService indicesServi
311311
}
312312
} catch (IllegalIndexShardStateException | AlreadyClosedException e) {
313313
// we can safely ignore illegal state on ones that are closing for example
314-
logger.trace((Supplier<?>) () -> new ParameterizedMessage("{} ignoring shard stats", indexShard.shardId()), e);
314+
logger.trace(() -> new ParameterizedMessage("{} ignoring shard stats", indexShard.shardId()), e);
315315
}
316316
}
317317
}
@@ -561,7 +561,7 @@ public void removeIndex(final Index index, final IndexRemovalReason reason, fina
561561
deleteIndexStore(extraInfo, indexService.index(), indexSettings);
562562
}
563563
} catch (Exception e) {
564-
logger.warn((Supplier<?>) () -> new ParameterizedMessage("failed to remove index {} ([{}][{}])", index, reason, extraInfo), e);
564+
logger.warn(() -> new ParameterizedMessage("failed to remove index {} ([{}][{}])", index, reason, extraInfo), e);
565565
}
566566
}
567567

@@ -617,7 +617,7 @@ public void deleteUnassignedIndex(String reason, IndexMetaData metaData, Cluster
617617
}
618618
deleteIndexStore(reason, metaData, clusterState);
619619
} catch (Exception e) {
620-
logger.warn((Supplier<?>) () -> new ParameterizedMessage("[{}] failed to delete unassigned index (reason [{}])", metaData.getIndex(), reason), e);
620+
logger.warn(() -> new ParameterizedMessage("[{}] failed to delete unassigned index (reason [{}])", metaData.getIndex(), reason), e);
621621
}
622622
}
623623
}
@@ -669,9 +669,9 @@ private void deleteIndexStoreIfDeletionAllowed(final String reason, final Index
669669
}
670670
success = true;
671671
} catch (LockObtainFailedException ex) {
672-
logger.debug((Supplier<?>) () -> new ParameterizedMessage("{} failed to delete index store - at least one shards is still locked", index), ex);
672+
logger.debug(() -> new ParameterizedMessage("{} failed to delete index store - at least one shards is still locked", index), ex);
673673
} catch (Exception ex) {
674-
logger.warn((Supplier<?>) () -> new ParameterizedMessage("{} failed to delete index", index), ex);
674+
logger.warn(() -> new ParameterizedMessage("{} failed to delete index", index), ex);
675675
} finally {
676676
if (success == false) {
677677
addPendingDelete(index, indexSettings);
@@ -774,7 +774,7 @@ public IndexMetaData verifyIndexIsDeleted(final Index index, final ClusterState
774774
try {
775775
metaData = metaStateService.loadIndexState(index);
776776
} catch (Exception e) {
777-
logger.warn((Supplier<?>) () -> new ParameterizedMessage("[{}] failed to load state file from a stale deleted index, folders will be left on disk", index), e);
777+
logger.warn(() -> new ParameterizedMessage("[{}] failed to load state file from a stale deleted index, folders will be left on disk", index), e);
778778
return null;
779779
}
780780
final IndexSettings indexSettings = buildIndexSettings(metaData);
@@ -783,7 +783,7 @@ public IndexMetaData verifyIndexIsDeleted(final Index index, final ClusterState
783783
} catch (Exception e) {
784784
// we just warn about the exception here because if deleteIndexStoreIfDeletionAllowed
785785
// throws an exception, it gets added to the list of pending deletes to be tried again
786-
logger.warn((Supplier<?>) () -> new ParameterizedMessage("[{}] failed to delete index on disk", metaData.getIndex()), e);
786+
logger.warn(() -> new ParameterizedMessage("[{}] failed to delete index on disk", metaData.getIndex()), e);
787787
}
788788
return metaData;
789789
}
@@ -960,7 +960,7 @@ public void processPendingDeletes(Index index, IndexSettings indexSettings, Time
960960
nodeEnv.deleteIndexDirectoryUnderLock(index, indexSettings);
961961
iterator.remove();
962962
} catch (IOException ex) {
963-
logger.debug((Supplier<?>) () -> new ParameterizedMessage("{} retry pending delete", index), ex);
963+
logger.debug(() -> new ParameterizedMessage("{} retry pending delete", index), ex);
964964
}
965965
} else {
966966
assert delete.shardId != -1;
@@ -970,7 +970,7 @@ public void processPendingDeletes(Index index, IndexSettings indexSettings, Time
970970
deleteShardStore("pending delete", shardLock, delete.settings);
971971
iterator.remove();
972972
} catch (IOException ex) {
973-
logger.debug((Supplier<?>) () -> new ParameterizedMessage("{} retry pending delete", shardLock.getShardId()), ex);
973+
logger.debug(() -> new ParameterizedMessage("{} retry pending delete", shardLock.getShardId()), ex);
974974
}
975975
} else {
976976
logger.warn("{} no shard lock for pending delete", delete.shardId);

server/src/main/java/org/elasticsearch/rest/RestController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public void dispatchRequest(RestRequest request, RestChannel channel, ThreadCont
177177
channel.sendResponse(new BytesRestResponse(channel, e));
178178
} catch (Exception inner) {
179179
inner.addSuppressed(e);
180-
logger.error((Supplier<?>) () ->
180+
logger.error(() ->
181181
new ParameterizedMessage("failed to send failure response for uri [{}]", request.uri()), inner);
182182
}
183183
}

server/src/main/java/org/elasticsearch/transport/TransportService.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,15 +249,15 @@ protected void doStop() {
249249
public void onRejection(Exception e) {
250250
// if we get rejected during node shutdown we don't wanna bubble it up
251251
logger.debug(
252-
(Supplier<?>) () -> new ParameterizedMessage(
252+
() -> new ParameterizedMessage(
253253
"failed to notify response handler on rejection, action: {}",
254254
holderToNotify.action()),
255255
e);
256256
}
257257
@Override
258258
public void onFailure(Exception e) {
259259
logger.warn(
260-
(Supplier<?>) () -> new ParameterizedMessage(
260+
() -> new ParameterizedMessage(
261261
"failed to notify response handler on exception, action: {}",
262262
holderToNotify.action()),
263263
e);
@@ -611,15 +611,15 @@ private <T extends TransportResponse> void sendRequestInternal(final Transport.C
611611
public void onRejection(Exception e) {
612612
// if we get rejected during node shutdown we don't wanna bubble it up
613613
logger.debug(
614-
(Supplier<?>) () -> new ParameterizedMessage(
614+
() -> new ParameterizedMessage(
615615
"failed to notify response handler on rejection, action: {}",
616616
holderToNotify.action()),
617617
e);
618618
}
619619
@Override
620620
public void onFailure(Exception e) {
621621
logger.warn(
622-
(Supplier<?>) () -> new ParameterizedMessage(
622+
() -> new ParameterizedMessage(
623623
"failed to notify response handler on exception, action: {}",
624624
holderToNotify.action()),
625625
e);
@@ -667,8 +667,7 @@ public void onFailure(Exception e) {
667667
channel.sendResponse(e);
668668
} catch (Exception inner) {
669669
inner.addSuppressed(e);
670-
logger.warn(
671-
(Supplier<?>) () -> new ParameterizedMessage(
670+
logger.warn(() -> new ParameterizedMessage(
672671
"failed to notify channel of error message for action [{}]", action), inner);
673672
}
674673
}
@@ -681,7 +680,7 @@ public void onFailure(Exception e) {
681680
} catch (Exception inner) {
682681
inner.addSuppressed(e);
683682
logger.warn(
684-
(Supplier<?>) () -> new ParameterizedMessage(
683+
() -> new ParameterizedMessage(
685684
"failed to notify channel of error message for action [{}]", action), inner);
686685
}
687686
}
@@ -1191,7 +1190,7 @@ protected void processException(final TransportResponseHandler handler, final Re
11911190
handler.handleException(rtx);
11921191
} catch (Exception e) {
11931192
logger.error(
1194-
(Supplier<?>) () -> new ParameterizedMessage(
1193+
() -> new ParameterizedMessage(
11951194
"failed to handle exception for action [{}], handler [{}]", action, handler), e);
11961195
}
11971196
}

0 commit comments

Comments
 (0)