我可能有一个 Dog
类,它有一个跨多个线程共享的实例。我计划将 SLF4J 用于所有日志记录:
public class Dog {
private Logger logger = LoggerFactory.getLogger(Dog.class);
// ...etc.
}
我的 logger
实例线程安全吗?为什么/为什么不?
最佳答案
当然,每个人都假设 Logger
将是线程安全的。而且(IMO)这是一个合理的工作假设。但是,您需要查看外观背后的实现类的代码/javadocs 才能确定绝对。
我发现以下关于各种主流实现的线程安全声明:
(很明显,这些语句表明各自的代码设计为线程安全的。总是可能存在错误。例如,在撰写本文时 the Log4j 2 tracker 中有几个开放的线程安全错误,尽管这些错误似乎不会直接影响您的示例代码。)
事实上,不可能保证 Logger
总是线程安全的。有人可以实现他们自己的 slf4j 兼容日志记录类。这样的实现可能是非线程安全的,偶然的或设计的。如果是,那么通过 slf4j 外观暴露的 Logger
也将是非线程安全的。
关于java - SLF4J 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543642/