java - Singleton Runnable 中奇怪的双重日志记录

标签 java multithreading logging singleton slf4j

我有这个代码:

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/

相关文章:

java - 如何在 Spring Kafka 中以编程方式设置 Jsonserializer Type Value 方法

c# - C# 中委托(delegate)语法的问题

java - 如何知道Java中InterruptedException的原因

.net - SQL Server 停止加载程序集

java - 对象引用能够直接访问私有(private)数据成员

java - 如何在 Gradle 中配置 Quasar

javascript - AJax 调用 Controller 从 JSP 页面传递数据

c# - 尝试触发事件时出现 NullReferenceException

Python 日志变量 : interpolation or format?

java - Logback - 如何通过在日志语句上指定来写入任何日志级别?