java - SLF4J 是线程安全的吗?

标签 java logging thread-safety slf4j thread-local

我可能有一个 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/

相关文章:

java - Spring 配置更改触发 TeamCity 构建?

java - 格式化数字 JOptionPane

python - 如何从Linux日志文件中只获取新行?

java - 线程安全/发布

java - ResultSet.getTimestamp(String, Calendar) 使用 Calendar 对象线程安全吗?

java - 在javafx中可变地设置Dialog的ContentText

java - 如何在其他类中直接访问我的库类中的方法? java

php - PHP : Log into an “global array”

php - 通过 cron 运行 php 脚本,如何记录任何输出?

java - 从 Java 8 中的流中收集同步数组列表