diff --git a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java index 58c828635c0..7ee2adda978 100644 --- a/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java +++ b/exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java @@ -79,7 +79,7 @@ public CompletableResultCode flush() { try { handler.flush(); } catch (Throwable t) { - resultCode.fail(); + return resultCode.fail(); } } return resultCode.succeed(); diff --git a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingMetricExporterTest.java b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingMetricExporterTest.java index a3021dc8a61..d85fe7528ae 100644 --- a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingMetricExporterTest.java +++ b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingMetricExporterTest.java @@ -89,16 +89,39 @@ void export() { @Test void flush() { AtomicBoolean flushed = new AtomicBoolean(false); - Logger.getLogger(LoggingMetricExporter.class.getName()) - .addHandler( - new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { - @Override - public synchronized void flush() { - flushed.set(true); - } - }); - exporter.flush(); - assertThat(flushed.get()).isTrue(); + Logger logger = Logger.getLogger(LoggingMetricExporter.class.getName()); + StreamHandler handler = + new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { + @Override + public synchronized void flush() { + flushed.set(true); + } + }; + logger.addHandler(handler); + try { + exporter.flush(); + assertThat(flushed.get()).isTrue(); + } finally { + logger.removeHandler(handler); + } + } + + @Test + void flushFailure() { + Logger logger = Logger.getLogger(LoggingMetricExporter.class.getName()); + StreamHandler failingHandler = + new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { + @Override + public synchronized void flush() { + throw new RuntimeException("Flush failed"); + } + }; + logger.addHandler(failingHandler); + try { + assertThat(exporter.flush().isSuccess()).isFalse(); + } finally { + logger.removeHandler(failingHandler); + } } @Test diff --git a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingSpanExporterTest.java b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingSpanExporterTest.java index 0a4c504f39e..25e28b41632 100644 --- a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingSpanExporterTest.java +++ b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingSpanExporterTest.java @@ -127,16 +127,39 @@ void export() { @Test void flush() { AtomicBoolean flushed = new AtomicBoolean(false); - Logger.getLogger(LoggingSpanExporter.class.getName()) - .addHandler( - new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { - @Override - public synchronized void flush() { - flushed.set(true); - } - }); - exporter.flush(); - assertThat(flushed.get()).isTrue(); + Logger logger = Logger.getLogger(LoggingSpanExporter.class.getName()); + StreamHandler handler = + new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { + @Override + public synchronized void flush() { + flushed.set(true); + } + }; + logger.addHandler(handler); + try { + exporter.flush(); + assertThat(flushed.get()).isTrue(); + } finally { + logger.removeHandler(handler); + } + } + + @Test + void flushFailure() { + Logger logger = Logger.getLogger(LoggingSpanExporter.class.getName()); + StreamHandler failingHandler = + new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) { + @Override + public synchronized void flush() { + throw new RuntimeException("Flush failed"); + } + }; + logger.addHandler(failingHandler); + try { + assertThat(exporter.flush().isSuccess()).isFalse(); + } finally { + logger.removeHandler(failingHandler); + } } @Test