28

我可能有一个Dog类,它具有跨多个线程共享的单个实例。我计划将 SLF4J 用于所有日志记录:

public class Dog {
    private Logger logger = LoggerFactory.getLogger(Dog.class);

    // ...etc.
}

我的logger实例线程安全吗?为什么/为什么不?

4

1 回答 1

48

当然,每个人都认为aLogger将是线程安全的。并且(IMO)这是一个合理的工作假设。但是,您需要查看外观背后的实现类的代码/javadocs 才能确定

我发现以下关于各种主流实现的线程安全声明:

(显然,这些声明表明各自的代码被设计为线程安全的。总是可能存在错误。例如,在Log4j 2 跟踪器中编写几个开放的线程安全错误时,虽然它没有似乎这些错误会直接影响您的示例代码。)

事实上,不可能保证 aLogger总是线程安全的。有人可以实现他们自己的 slf4j 兼容日志记录类。这样的实现可能是非线程安全的,偶然的或设计的。如果是这样,那么Logger通过 slf4j 门面暴露也将是非线程安全的。

于 2013-08-31T01:40:39.613 回答