SLF4J 是否具有线程安全性?

我可能有一个类,该类具有在多个线程之间共享的单个实例。我计划对所有日志记录使用SLF4J:Dog

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

    // ...etc.
}

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


答案 1

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

我发现了以下关于各种主流实现的线程安全的语句:

(显然,这些是相应代码设计为线程安全的语句。总会有错误。例如,在Log4j 2跟踪器中编写几个开放线程安全错误,尽管这些错误似乎不会直接影响您的示例代码。

实际上,无法保证 a 将始终是线程安全的。有人可以实现他们自己的slf4j兼容日志记录类。这样的实现可能是非线程安全的,可能是偶然的,也可能是设计使然。如果是这样,那么通过slf4j外观暴露的也将是非线程安全的。LoggerLogger


答案 2

推荐