我有这段代码:
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!
有没有人见过这样的事情,或者知道会发生什么事?
答案 0 :(得分:2)
我认为你看到的是appender可加性的结果。我假设你有一个带有appender-ref
的ROOT记录器和一个单独的记录器(对于你的班级)也有一个appender-ref
。默认情况下,Appender是继承的,因此通过子记录器发送的任何日志语句都将是子项的appender和父项的appender。您要执行的操作是将子记录器的additivity
属性设置为false
来禁用此功能。
答案 1 :(得分:0)
当我运行时
import java.util.logging.Logger;
public class Main {
enum Singleton {
INSTANCE;
private static final Logger LOGGER = Logger.getLogger(Singleton.class.getName());
Singleton() {
Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
LOGGER.info("Print only once");
}
});
testThread.start();
}
}
public static void main(String... ignored) {
Singleton.INSTANCE.toString();
}
}
我只得到
Jun 05, 2014 10:03:08 AM Main$Singleton$1 run
INFO: Print only once