Skip to content

Commit 903b77a

Browse files
committed
Be more resilient to exceptions thrown by listeners when firing events
1 parent 8b11a7a commit 903b77a

File tree

2 files changed

+22
-25
lines changed

2 files changed

+22
-25
lines changed

src/main/java/net/logstash/logback/appender/AbstractLogstashTcpSocketAppender.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -995,32 +995,23 @@ protected Future<?> scheduleReaderCallable(Callable<Void> readerCallable) {
995995
}
996996

997997
protected void fireEventSent(Socket socket, Event event, long durationInNanos) {
998-
for (Listener listener : listeners) {
999-
listener.eventSent(this, socket, event, durationInNanos);
1000-
}
998+
safelyFireEvent(l -> l.eventSent(this, socket, event, durationInNanos));
1001999
}
1000+
10021001
protected void fireEventSendFailure(Event event, Throwable reason) {
1003-
for (Listener listener : listeners) {
1004-
listener.eventSendFailure(this, event, reason);
1005-
}
1002+
safelyFireEvent(l -> l.eventSendFailure(this, event, reason));
10061003
}
10071004

10081005
protected void fireConnectionOpened(Socket socket) {
1009-
for (Listener listener : listeners) {
1010-
listener.connectionOpened(this, socket);
1011-
}
1006+
safelyFireEvent(l -> l.connectionOpened(this, socket));
10121007
}
10131008

10141009
protected void fireConnectionClosed(Socket socket) {
1015-
for (Listener listener : listeners) {
1016-
listener.connectionClosed(this, socket);
1017-
}
1010+
safelyFireEvent(l -> l.connectionClosed(this, socket));
10181011
}
10191012

10201013
protected void fireConnectionFailed(InetSocketAddress address, Throwable throwable) {
1021-
for (Listener listener : listeners) {
1022-
listener.connectionFailed(this, address, throwable);
1023-
}
1014+
safelyFireEvent(l -> l.connectionFailed(this, address, throwable));
10241015
}
10251016

10261017

src/main/java/net/logstash/logback/appender/AsyncDisruptorAppender.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.concurrent.TimeUnit;
2727
import java.util.concurrent.atomic.AtomicInteger;
2828
import java.util.concurrent.atomic.AtomicLong;
29+
import java.util.function.Consumer;
2930

3031
import net.logstash.logback.appender.listener.AppenderListener;
3132
import net.logstash.logback.status.LevelFilteringStatusListener;
@@ -486,23 +487,28 @@ protected List<Object> getThreadNameFormatParams() {
486487
}
487488

488489
protected void fireAppenderStarted() {
489-
for (Listener listener : listeners) {
490-
listener.appenderStarted(this);
491-
}
490+
safelyFireEvent(l -> l.appenderStarted(this));
492491
}
492+
493493
protected void fireAppenderStopped() {
494-
for (Listener listener : listeners) {
495-
listener.appenderStopped(this);
496-
}
494+
safelyFireEvent(l -> l.appenderStopped(this));
497495
}
496+
498497
protected void fireEventAppended(Event event, long durationInNanos) {
499-
for (Listener listener : listeners) {
500-
listener.eventAppended(this, event, durationInNanos);
501-
}
498+
safelyFireEvent(l -> l.eventAppended(this, event, durationInNanos));
502499
}
500+
503501
protected void fireEventAppendFailed(Event event, Throwable reason) {
502+
safelyFireEvent(l -> l.eventAppendFailed(this, event, reason));
503+
}
504+
505+
protected void safelyFireEvent(Consumer<Listener> callback) {
504506
for (Listener listener : listeners) {
505-
listener.eventAppendFailed(this, event, reason);
507+
try {
508+
callback.accept(listener);
509+
} catch (Exception e) {
510+
addError("Failed to invoke listener " + listener, e);
511+
}
506512
}
507513
}
508514

0 commit comments

Comments
 (0)