java - Log4j2 环境中单个软件组件的 Logger 对象

标签 java multithreading logging thread-safety log4j

根据 log4j2 用户指南,看起来只为一个类创建一个 Logger 对象。

如果我从代码中的任何位置调用静态方法 LogManager.getLogger("SomeClass"),它应该返回对同一记录器对象的引用。

应用程序中具有上述代码行的多个线程最终是否使用相同的记录器对象?

最佳答案

LogManager.getLogger("SomeClass") 是一个静态调用,因此,在此基础上我会说是,如果您调用获取同一类的记录器,它将返回相同的记录器对象。

不同的线程不会有任何区别,直到它是同一个容器。

使用相同类名调用的所有线程将提供相同的记录器实例。直到并且除非您设置一个返回不同记录器(对象)的自定义记录器存储库。自定义记录器存储库意味着您可以操纵记录器对象的存储和返回方式。

我在理论上对此进行了测试。创建了2个单独的类。为这两个类创建了记录器。让传递给调用的类名保持相同。

调用记录器来打印它们的哈希值,结果是相同的。

关于java - Log4j2 环境中单个软件组件的 Logger 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289999/

相关文章:

java - 从 JSP 页面中的 HashMap 获取 URL 值(使用 Struts2)

java - log4j 使用 %p 显示日志消息

java - 为什么创建了一个JFrame对象并设置为可见后,程序还没有结束执行?

java - 并发解谜: Java Concurrency - Cyclicbarrier. 正确用法?

java - Stream 上的 collect 操作是否会关闭流和底层资源?

C#变量线程安全

java - 抛出 Swing 异常时显示对话框

Python:记录在其他输出之前打印到控制台的注释

json - 使用fluentd进行docker日志记录时如何获取容器和图像名称?

php - 使用堆栈跟踪记录捕获的异常