Skip to content
This repository was archived by the owner on Jul 1, 2022. It is now read-only.

Commit fd9f743

Browse files
esukramjpkrohling
authored andcommitted
Add logging for SenderException in RemoteReporter (#662)
In order to get more context if a SenderException has been thrown, the complete exception is logged with `error` level. Unit test has been added. Signed-off-by: Markus Heimbach <[email protected]>
1 parent 23a8223 commit fd9f743

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

jaeger-core/src/main/java/io/jaegertracing/internal/reporters/RemoteReporter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public void close() {
104104
metrics.reporterSuccess.inc(n);
105105
} catch (SenderException e) {
106106
metrics.reporterFailure.inc(e.getDroppedSpanCount());
107+
log.error("Remote reporter error", e);
107108
}
108109
flushTimer.cancel();
109110
}

jaeger-core/src/test/java/io/jaegertracing/internal/reporters/RemoteReporterTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@
2121
import static org.junit.Assert.assertFalse;
2222
import static org.junit.Assert.assertThat;
2323
import static org.junit.Assert.assertTrue;
24+
import static org.mockito.ArgumentMatchers.argThat;
25+
import static org.mockito.Mockito.mock;
26+
import static org.mockito.Mockito.verify;
27+
import static org.mockito.Mockito.when;
2428

29+
import ch.qos.logback.classic.spi.ILoggingEvent;
30+
import ch.qos.logback.core.Appender;
2531
import io.jaegertracing.internal.JaegerSpan;
2632
import io.jaegertracing.internal.JaegerTracer;
2733
import io.jaegertracing.internal.exceptions.SenderException;
@@ -31,6 +37,7 @@
3137
import io.jaegertracing.internal.samplers.ConstSampler;
3238
import io.jaegertracing.internal.senders.InMemorySender;
3339
import io.jaegertracing.spi.Reporter;
40+
import io.jaegertracing.spi.Sender;
3441
import java.util.ArrayList;
3542
import java.util.List;
3643
import java.util.concurrent.CountDownLatch;
@@ -40,6 +47,8 @@
4047
import org.junit.Before;
4148
import org.junit.Ignore;
4249
import org.junit.Test;
50+
import org.mockito.ArgumentMatcher;
51+
import org.slf4j.LoggerFactory;
4352

4453
public class RemoteReporterTest {
4554
private Reporter reporter;
@@ -203,6 +212,40 @@ public void testCloseWhenQueueFull() {
203212
// expect no exception thrown
204213
}
205214

215+
@Test
216+
public void testCloseLogSenderException() throws SenderException {
217+
218+
// set up mocking
219+
ch.qos.logback.classic.Logger root =
220+
(ch.qos.logback.classic.Logger) LoggerFactory
221+
.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
222+
223+
@SuppressWarnings("unchecked") final Appender<ILoggingEvent> mockAppender =
224+
mock(Appender.class);
225+
when(mockAppender.getName()).thenReturn("MOCK");
226+
root.addAppender(mockAppender);
227+
228+
final Sender mockedSender = mock(Sender.class);
229+
when(mockedSender.close()).thenThrow(SenderException.class);
230+
231+
final RemoteReporter testReporter = new RemoteReporter.Builder()
232+
.withSender(mockedSender)
233+
.build();
234+
235+
// call the to be tested code path
236+
testReporter.close();
237+
238+
// verify the actual log was written
239+
verify(mockAppender).doAppend(argThat(new ArgumentMatcher<ILoggingEvent>() {
240+
241+
@Override
242+
public boolean matches(ILoggingEvent event) {
243+
return event.getFormattedMessage().startsWith("Remote reporter error");
244+
}
245+
246+
}));
247+
}
248+
206249
@Test
207250
public void testFlushWhenQueueFull() {
208251
// change sender to blocking mode

0 commit comments

Comments
 (0)