Skip to content

Commit 3351182

Browse files
fix: LoggingSpanExporter.flush() should preserve flush failures (#8361)
1 parent 6354e09 commit 3351182

3 files changed

Lines changed: 67 additions & 21 deletions

File tree

exporters/logging/src/main/java/io/opentelemetry/exporter/logging/LoggingSpanExporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public CompletableResultCode flush() {
7979
try {
8080
handler.flush();
8181
} catch (Throwable t) {
82-
resultCode.fail();
82+
return resultCode.fail();
8383
}
8484
}
8585
return resultCode.succeed();

exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingMetricExporterTest.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,39 @@ void export() {
8989
@Test
9090
void flush() {
9191
AtomicBoolean flushed = new AtomicBoolean(false);
92-
Logger.getLogger(LoggingMetricExporter.class.getName())
93-
.addHandler(
94-
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
95-
@Override
96-
public synchronized void flush() {
97-
flushed.set(true);
98-
}
99-
});
100-
exporter.flush();
101-
assertThat(flushed.get()).isTrue();
92+
Logger logger = Logger.getLogger(LoggingMetricExporter.class.getName());
93+
StreamHandler handler =
94+
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
95+
@Override
96+
public synchronized void flush() {
97+
flushed.set(true);
98+
}
99+
};
100+
logger.addHandler(handler);
101+
try {
102+
exporter.flush();
103+
assertThat(flushed.get()).isTrue();
104+
} finally {
105+
logger.removeHandler(handler);
106+
}
107+
}
108+
109+
@Test
110+
void flushFailure() {
111+
Logger logger = Logger.getLogger(LoggingMetricExporter.class.getName());
112+
StreamHandler failingHandler =
113+
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
114+
@Override
115+
public synchronized void flush() {
116+
throw new RuntimeException("Flush failed");
117+
}
118+
};
119+
logger.addHandler(failingHandler);
120+
try {
121+
assertThat(exporter.flush().isSuccess()).isFalse();
122+
} finally {
123+
logger.removeHandler(failingHandler);
124+
}
102125
}
103126

104127
@Test

exporters/logging/src/test/java/io/opentelemetry/exporter/logging/LoggingSpanExporterTest.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,39 @@ void export() {
127127
@Test
128128
void flush() {
129129
AtomicBoolean flushed = new AtomicBoolean(false);
130-
Logger.getLogger(LoggingSpanExporter.class.getName())
131-
.addHandler(
132-
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
133-
@Override
134-
public synchronized void flush() {
135-
flushed.set(true);
136-
}
137-
});
138-
exporter.flush();
139-
assertThat(flushed.get()).isTrue();
130+
Logger logger = Logger.getLogger(LoggingSpanExporter.class.getName());
131+
StreamHandler handler =
132+
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
133+
@Override
134+
public synchronized void flush() {
135+
flushed.set(true);
136+
}
137+
};
138+
logger.addHandler(handler);
139+
try {
140+
exporter.flush();
141+
assertThat(flushed.get()).isTrue();
142+
} finally {
143+
logger.removeHandler(handler);
144+
}
145+
}
146+
147+
@Test
148+
void flushFailure() {
149+
Logger logger = Logger.getLogger(LoggingSpanExporter.class.getName());
150+
StreamHandler failingHandler =
151+
new StreamHandler(new PrintStream(new ByteArrayOutputStream()), new SimpleFormatter()) {
152+
@Override
153+
public synchronized void flush() {
154+
throw new RuntimeException("Flush failed");
155+
}
156+
};
157+
logger.addHandler(failingHandler);
158+
try {
159+
assertThat(exporter.flush().isSuccess()).isFalse();
160+
} finally {
161+
logger.removeHandler(failingHandler);
162+
}
140163
}
141164

142165
@Test

0 commit comments

Comments
 (0)