【问题标题】:Should be logger always final and static?记录器应该始终是最终的和静态的吗?
【发布时间】:2011-11-11 13:39:36
【问题描述】:
可以从多个线程访问类。在这种情况下,记录器也必须是最终的和静态的?
谢谢。
【问题讨论】:
标签:
java
logging
static
final
【解决方案1】:
是的,记录器应该是静态的和最终的。也最好是私人的。每个类只需要一个记录器实例,而且除非您要动态更改日志首选项,否则最好将其设为 final。
Logger 是线程安全的,您不必担心线程问题。
【解决方案2】:
将记录器设为最终和/或静态不会以任何方式影响记录器使用的线程安全性。如果记录器实例被多个线程使用,请确保您使用的是线程安全记录器。
一般来说,记录器应该是私有的静态最终的,但不要假设这使它成为线程安全的。大多数常见的日志框架都是线程安全的,所以如果你使用其中之一,你应该很好。
【解决方案3】:
所有主要的 java 日志记录包(java.util.logging、log4j 等)都是同步和线程安全的。即使从多个线程调用该类,每个类的 private final static 记录器的标准模式也很好。