Skip to content

Commit a60d4c8

Browse files
committed
AbstractLogService: fix notification of LogListerners
The method notifyListeners should only notify the log listeners. It must NOT be used for overloading or to output log messages.
1 parent acbefd7 commit a60d4c8

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

src/main/java/org/scijava/log/AbstractLogService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ public void setLevelForLogger(final String source, final int level) {
9090
rootLogger.getSource().subSource(source).setLogLevel(level);
9191
}
9292

93+
abstract protected void messageLogged(LogMessage message);
94+
9395
// -- Logger methods --
9496

9597
@Override
@@ -184,7 +186,7 @@ private Map<String, Integer> setupMapFromProperties(Properties properties,
184186
private class RootLogger extends DefaultLogger {
185187

186188
public RootLogger() {
187-
super(AbstractLogService.this::notifyListeners, LogSource.newRoot(),
189+
super(AbstractLogService.this::messageLogged, LogSource.newRoot(),
188190
LogLevel.NONE);
189191
}
190192

src/main/java/org/scijava/log/StderrLogService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void setPrintStreams(Function<Integer, PrintStream> levelToStream) {
6161
}
6262

6363
@Override
64-
public void notifyListeners(LogMessage message) {
64+
protected void messageLogged(LogMessage message) {
6565
final PrintStream out = levelToStream.apply(message.level());
6666
out.print(message);
6767
}

src/test/java/org/scijava/log/LogServiceTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.junit.Test;
44

5+
import java.util.ArrayList;
6+
import java.util.List;
57
import java.util.Properties;
68
import java.util.function.BiConsumer;
79
import java.util.function.Function;
@@ -200,6 +202,15 @@ public void testListener() {
200202
listener.hasLogged(m -> msg2.equals(m.text()));
201203
}
202204

205+
@Test
206+
public void testLogListenerIsNotifiedOnce() {
207+
List<LogMessage> list = new ArrayList<>();
208+
LogService logService = new TestableLogService();
209+
logService.addLogListener(list::add);
210+
logService.error("dummy");
211+
assertEquals(1, list.size());
212+
}
213+
203214
// -- Helper classes --
204215

205216
private static class MyTestClass {
@@ -241,7 +252,7 @@ public Throwable exception() {
241252
}
242253

243254
@Override
244-
public void notifyListeners(LogMessage message) {
255+
protected void messageLogged(LogMessage message) {
245256
this.message = message.toString();
246257
this.exception = message.throwable();
247258
}

0 commit comments

Comments
 (0)