我决定为一个新的 Java 项目使用 Log4J 日志记录框架。我想知道我应该使用什么策略来创建/管理 Logger 实例,为什么?
- 每个类一个 Logger 实例,例如
class Foo {
private static final Logger log = Logger.getLogger(Foo.class);
}
- 每个线程一个 Logger 实例
- 每个应用程序一个 Logger 实例
- 水平切片:应用程序的每一层(例如视图层、控制器层和持久层)中的一个 Logger 实例
- 垂直切片:应用程序功能分区中的一个 Logger 实例
注意:这些文章已经在某种程度上考虑了这个问题:
原文由 Adrian 发布,翻译遵循 CC BY-SA 4.0 许可协议
通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示它们)因此以这种方式切片记录器可能是多余的。
关于基于应用程序或层的记录器,问题是您必须找到一个地方来粘贴该 Logger 对象。没什么大不了的。更大的问题是某些类可能在多个应用程序的多个级别上使用……可能很难让您的记录器正确。或者至少是棘手的。
…您最不想要的是日志记录设置中的错误假设。
如果您关心应用程序和层并且有简单的分离点,那么 NDC 是您的不二之选。代码有时可能有点过分,但我不知道有多少次我被一个准确的上下文堆栈保存了下来,显示我 Foo.bar() 是从 Y 层的应用程序 X 调用的。