Skip to content

Commit 3f03284

Browse files
committed
Include stack trace if DEBUG enabled
1 parent d698e2b commit 3f03284

File tree

2 files changed

+68
-12
lines changed

2 files changed

+68
-12
lines changed

server/src/main/java/org/elasticsearch/discovery/PeerFinder.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -372,16 +372,21 @@ public void onResponse(DiscoveryNode remoteNode) {
372372
@Override
373373
public void onFailure(Exception e) {
374374
if (verboseFailureLogging) {
375-
final StringBuilder messageBuilder = new StringBuilder();
376-
Throwable cause = e;
377-
while (cause != null && messageBuilder.length() <= 1024) {
378-
messageBuilder.append(": ").append(cause.getMessage());
379-
cause = cause.getCause();
375+
if (logger.isDebugEnabled()) {
376+
// log message at level WARN, but since DEBUG logging is enabled we include the full stack trace
377+
logger.warn(new ParameterizedMessage("{} connection failed", Peer.this), e);
378+
} else {
379+
final StringBuilder messageBuilder = new StringBuilder();
380+
Throwable cause = e;
381+
while (cause != null && messageBuilder.length() <= 1024) {
382+
messageBuilder.append(": ").append(cause.getMessage());
383+
cause = cause.getCause();
384+
}
385+
final String message = messageBuilder.length() < 1024
386+
? messageBuilder.toString()
387+
: (messageBuilder.substring(0, 1023) + "...");
388+
logger.warn("{} connection failed{}", Peer.this, message);
380389
}
381-
final String message = messageBuilder.length() < 1024
382-
? messageBuilder.toString()
383-
: (messageBuilder.substring(0, 1023) + "...");
384-
logger.warn("{} connection failed{}", Peer.this, message);
385390
} else {
386391
logger.debug(new ParameterizedMessage("{} connection failed", Peer.this), e);
387392
}

server/src/test/java/org/elasticsearch/discovery/PeerFinderTests.java

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import org.apache.logging.log4j.Level;
1212
import org.apache.logging.log4j.LogManager;
13+
import org.apache.logging.log4j.core.LogEvent;
1314
import org.elasticsearch.ElasticsearchException;
1415
import org.elasticsearch.Version;
1516
import org.elasticsearch.action.ActionListener;
@@ -740,13 +741,52 @@ public void testTimesOutAndRetriesConnectionsToBlackholedNodes() {
740741
assertFoundPeers(nodeToFind, otherNode);
741742
}
742743

743-
@TestLogging(reason = "testing logging at levels DEBUG and above", value="org.elasticsearch.discovery:DEBUG")
744+
@TestLogging(reason = "testing logging at WARN level", value="org.elasticsearch.discovery:WARN")
744745
public void testLogsWarningsIfActiveForLongEnough() throws IllegalAccessException {
745746
final DiscoveryNode otherNode = newDiscoveryNode("node-from-hosts-list");
746747

747748
providedAddresses.add(otherNode.getAddress());
748749
transportAddressConnector.unreachableAddresses.add(otherNode.getAddress());
749750

751+
peerFinder.activate(lastAcceptedNodes);
752+
final long endTime
753+
= deterministicTaskQueue.getCurrentTimeMillis() + VERBOSITY_INCREASE_TIMEOUT_SETTING.get(Settings.EMPTY).millis();
754+
755+
MockLogAppender appender = new MockLogAppender();
756+
try {
757+
appender.start();
758+
Loggers.addAppender(LogManager.getLogger("org.elasticsearch.discovery.PeerFinder"), appender);
759+
760+
appender.addExpectation(new MockLogAppender.SeenEventExpectation(
761+
"connection failed",
762+
"org.elasticsearch.discovery.PeerFinder",
763+
Level.WARN,
764+
"address [" + otherNode.getAddress() + "]* connection failed: cannot connect to*")
765+
{
766+
@Override
767+
public boolean innerMatch(LogEvent event) {
768+
return event.getThrown() == null; // no stack trace at this log level
769+
}
770+
});
771+
while (deterministicTaskQueue.getCurrentTimeMillis() <= endTime) {
772+
deterministicTaskQueue.advanceTime();
773+
runAllRunnableTasks();
774+
}
775+
appender.assertAllExpectationsMatched();
776+
777+
} finally {
778+
Loggers.removeAppender(LogManager.getLogger("org.elasticsearch.discovery.PeerFinder"), appender);
779+
appender.stop();
780+
}
781+
}
782+
783+
@TestLogging(reason = "testing logging at DEBUG level", value="org.elasticsearch.discovery:DEBUG")
784+
public void testLogsStackTraceInConnectionFailedMessages() throws IllegalAccessException {
785+
final DiscoveryNode otherNode = newDiscoveryNode("node-from-hosts-list");
786+
787+
providedAddresses.add(otherNode.getAddress());
788+
transportAddressConnector.unreachableAddresses.add(otherNode.getAddress());
789+
750790
peerFinder.activate(lastAcceptedNodes);
751791
final long endTime
752792
= deterministicTaskQueue.getCurrentTimeMillis() + VERBOSITY_INCREASE_TIMEOUT_SETTING.get(Settings.EMPTY).millis();
@@ -759,7 +799,12 @@ public void testLogsWarningsIfActiveForLongEnough() throws IllegalAccessExceptio
759799
"connection failed",
760800
"org.elasticsearch.discovery.PeerFinder",
761801
Level.DEBUG,
762-
"*connection failed*"));
802+
"address [" + otherNode.getAddress() + "]* connection failed*") {
803+
@Override
804+
public boolean innerMatch(LogEvent event) {
805+
return event.getThrown() instanceof IOException && event.getThrown().getMessage().startsWith("cannot connect to");
806+
}
807+
});
763808

764809
deterministicTaskQueue.advanceTime();
765810
runAllRunnableTasks();
@@ -769,7 +814,13 @@ public void testLogsWarningsIfActiveForLongEnough() throws IllegalAccessExceptio
769814
"connection failed",
770815
"org.elasticsearch.discovery.PeerFinder",
771816
Level.WARN,
772-
"*connection failed: cannot connect to*"));
817+
"address [" + otherNode.getAddress() + "]* connection failed*")
818+
{
819+
@Override
820+
public boolean innerMatch(LogEvent event) {
821+
return event.getThrown() instanceof IOException && event.getThrown().getMessage().startsWith("cannot connect to");
822+
}
823+
});
773824
while (deterministicTaskQueue.getCurrentTimeMillis() <= endTime) {
774825
deterministicTaskQueue.advanceTime();
775826
runAllRunnableTasks();

0 commit comments

Comments
 (0)