java - Log4J:创建 Logger 实例的策略

标签 java logging log4j

我决定将 Log4J 日志框架用于一个新的 Java 项目。 我想知道我应该使用什么策略来创建/管理 Logger 实例,为什么?

  • 每个类一个 Logger 实例 例如

    class Foo {
        private static final Logger log = Logger.getLogger(Foo.class);
    }
    
  • 每个线程一个 Logger 实例
  • 每个应用程序一个 Logger 实例
  • 水平切片:应用程序的每一层(例如 View 层、 Controller 层和持久层)中都有一个 Logger 实例
  • 垂直切片:应用程序功能分区内的一个 Logger 实例

注意:这些文章已经在一定程度上考虑了这个问题:

Whats the overhead of creating a Log4j Logger

最佳答案

通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示它们),因此以这种方式对记录器进行切片可能是多余的。

关于基于应用程序或层的记录器,问题是您必须找到一个位置来粘贴该 Logger 对象。没什么大不了的。更大的问题是某些类可能会在多个应用程序的多个级别上使用......可能很难让您的记录器正确。或者至少很棘手。

...您最不想看到的就是日志记录设置中的错误假设。

如果您关心应用程序和层并且有简单的分离点,那么 NDC 就是您的最佳选择。代码有时可能有点多余,但我不知道有多少次我被准确的上下文堆栈保存,显示 Foo.bar() 是从 Y 层的应用程序 X 调用的。

关于java - Log4J:创建 Logger 实例的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770076/

相关文章:

java - 无法找到 MyModule.gwt.xml 使用 Ant 编译 GWT 项目

java - AudioRecord 在 Android 5.01 上产生零间隙

java - json转换

python - python可以在没有INFO :root的情况下输出日志吗

java - 在 RollingFileAppender 的情况下在 log4j 中滚动

logging - 如何设置中央日志服务器并将日志事件与测试和生产分开?

java - 使用 Jackson 自定义 JSON 反序列化

logging - 将Qemu控制台重定向到文件或主机终端?

java - 难以理解的日志记录行为

java - AppEngine - Log4j 和日志级别