我可能有一个Dog
类,它具有跨多个线程共享的单个实例。我计划将 SLF4J 用于所有日志记录:
public class Dog {
private Logger logger = LoggerFactory.getLogger(Dog.class);
// ...etc.
}
我的logger
实例线程安全吗?为什么/为什么不?
我可能有一个Dog
类,它具有跨多个线程共享的单个实例。我计划将 SLF4J 用于所有日志记录:
public class Dog {
private Logger logger = LoggerFactory.getLogger(Dog.class);
// ...etc.
}
我的logger
实例线程安全吗?为什么/为什么不?
当然,每个人都认为aLogger
将是线程安全的。并且(IMO)这是一个合理的工作假设。但是,您需要查看外观背后的实现类的代码/javadocs 才能确定。
我发现以下关于各种主流实现的线程安全声明:
(显然,这些声明表明各自的代码被设计为线程安全的。总是可能存在错误。例如,在Log4j 2 跟踪器中编写几个开放的线程安全错误时,虽然它没有似乎这些错误会直接影响您的示例代码。)
事实上,不可能保证 aLogger
总是线程安全的。有人可以实现他们自己的 slf4j 兼容日志记录类。这样的实现可能是非线程安全的,偶然的或设计的。如果是这样,那么Logger
通过 slf4j 门面暴露也将是非线程安全的。