在Java中,为什么最佳做法是声明记录器static final?
private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud) 我总是使用以下模式构建(SLF4J)记录器:
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
到目前为止这已经奏效了,但我想知道static某些情况下的上下文以及需要一直传递具体的类文字,而不是仅仅使用非静态记录器
private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
这之前基本上已经问过(并回答)了LOG4J
和这里
我意识到final基本上是强制性的,所以我想知道在非静态环境中使用SLF4J的开销实际上有多高.
问:
使用是否有任何重大的实际开销
private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
过度
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
在普通(网络)应用程序?(这里不需要"讨论"高端,重载的webapps)
注意,我最终计划使用更好的方法使用CDI获得SLF4J记录器
@Inject private final Logger log;
Run Code Online (Sandbox Code Playgroud)
如http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection所述,但我需要先了解记录器缓存.
子问题:甚至可以使用?:
@Inject private static final Logger log;
Run Code Online (Sandbox Code Playgroud)
(刚开始用CDI开头)