在Java中,为什么最佳做法是声明记录器static final
?
private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 198
private
- 这样任何其他类都无法劫持您的记录器static
- 因此每个类只有一个记录器实例,也避免了序列化记录器的尝试final
- 无需在课程的整个生命周期内更改记录器此外,我更喜欢名称log
尽可能简单,但更具描述性.
编辑:但是这些规则有一个有趣的例外:
protected final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
而不是:
private static final Logger log = LoggerFactory.getLogger(Foo.class);
Run Code Online (Sandbox Code Playgroud)
前一种方法允许您在整个继承层次结构中的所有类中使用相同的记录器名称(实际类的名称).因此,如果Bar
扩展Foo
,两者都将记录到Bar
记录器.有些人觉得它更直观.
yeg*_*256 12
查看此博文:摆脱Java静态记录器.这是你如何使用slf4j与jcabi-log:
import com.jcabi.log.Logger;
class Foo {
void save(File f) {
Logger.info(this, "file %s saved successfully", f);
}
}
Run Code Online (Sandbox Code Playgroud)
永远不要再使用静电噪音了.
您什么时候想要更改该字段的值?
如果您永远不会更改该值,则将该字段设置为 Final 会明显表明您永远不会更改该值。
static
意味着每个类只能创建一个Logger,而每个类实例不能创建一个Logger 。通常,这就是您想要的-因为记录器往往仅根据类而有所不同。
final
表示您不会更改logger
变量的值。的确如此,因为您几乎总是将所有日志消息(来自一个类)扔给同一记录器。即使在极少数的情况下,一个类可能希望向其他记录器发送一些消息,创建另一个记录器变量(例如widgetDetailLogger
)也要比动态更改静态变量的值更为清晰。
归档时间: |
|
查看次数: |
82327 次 |
最近记录: |