我一直使用以下模式来构建(SLF4J)记录器:
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
到目前为止,这已经奏效了,但是我想知道static
在某些时候上下文以及是否需要一直传入具体的类文字,而不是仅仅使用像这样的非静态记录器
private final Logger log = LoggerFactory.getLogger(getClass());
对于 LOG4J,这基本上已经被问到(并得到了回答)
和这里
我意识到final
基本上是强制性的,所以我想知道在非静态上下文中使用 SLF4J 的开销到底有多高。
问:
使用是否有任何重大的实际开销
private final Logger log = LoggerFactory.getLogger(getClass());
超过
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
在普通(网络)应用程序中?(这里无需“讨论”高端、重载的 webapps)
请注意,我最终计划使用更好的方法,使用 CDI 来获取 SLF4J 记录器,例如
@Inject private final Logger log;
如此处所述http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection,但我需要先了解记录器缓存。
子问题:甚至可以使用吗?:
@Inject private static final Logger log;
(老实说,只是从 CDI 开始)