我决定将 Log4J 日志框架用于一个新的 Java 项目。 我想知道我应该使用什么策略来创建/管理 Logger 实例,为什么?
每个类一个 Logger 实例 例如
class Foo { private static final Logger log = Logger.getLogger(Foo.class); }
- 每个线程一个 Logger 实例
- 每个应用程序一个 Logger 实例
- 水平切片:应用程序的每一层(例如 View 层、 Controller 层和持久层)中都有一个 Logger 实例
- 垂直切片:应用程序功能分区内的一个 Logger 实例
注意:这些文章已经在一定程度上考虑了这个问题:
最佳答案
通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示它们),因此以这种方式对记录器进行切片可能是多余的。
关于基于应用程序或层的记录器,问题是您必须找到一个位置来粘贴该 Logger 对象。没什么大不了的。更大的问题是某些类可能会在多个应用程序的多个级别上使用......可能很难让您的记录器正确。或者至少很棘手。
...您最不想看到的就是日志记录设置中的错误假设。
如果您关心应用程序和层并且有简单的分离点,那么 NDC 就是您的最佳选择。代码有时可能有点多余,但我不知道有多少次我被准确的上下文堆栈保存,显示 Foo.bar() 是从 Y 层的应用程序 X 调用的。
关于java - Log4J:创建 Logger 实例的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770076/