我有这个代码:
public enum Something {
INSTANCE;
private static final Logger LOGGER = LoggerFactory.getLogger(Something.class);
private Something() {
Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
// do something
LOGGER.info("TESTTHREAD: This should only appear once!");
}
});
testThread.setName("TestThread");
testThread.start();
}
}
当我运行时
Something.INSTANCE.getClass();
记录的内容(具有完全相同的时间戳)是:
TESTTHREAD: This should only appear once!
TESTTHREAD: This should only appear once!
有没有人见过这样的事情,或者知道会发生什么?
最佳答案
我认为您所看到的是附加器可加性的结果。我假设您有一个带有 appender-ref
的 ROOT 记录器和一个单独的记录器(针对您的类)也带有 appender-ref
。默认情况下,附加程序是继承的,因此通过子记录器发送的任何日志语句都将发送到子级的附加程序和父级的附加程序。您想要做的是将子记录器的 additivity
属性设置为 false
来禁用此功能。
关于java - Singleton Runnable 中奇怪的双重日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24063426/