【问题标题】:How to use the same logger in multiple java projects如何在多个java项目中使用相同的记录器
【发布时间】:2014-05-09 16:29:30
【问题描述】:

我正在寻找以下系统设置的解决方案。

我们有一个 Java NetBeans 项目,它处理带有所有实体和数据库层所需功能的 Oracle 数据库(我们不能用休眠代替它)。其他 Java NetBeans 项目使用此项目来读取和写入数据库。

我希望能够在 DB 项目中设置 Logger(我们使用标准的 java.util.logging.Logger)以依赖于使用它的应用程序之一。这是必需的,以便我的所有日​​志记录都在一个文件中,并且阅读它是有意义的;在拆分为多个文件的日志中无法理解事件链。

我有一个我不喜欢的简单解决方案,即在我的数据库项目的每个类中注入记录器。这使我的所有构造函数都变得更加复杂,如果我要为每个实体使用它,我将需要修改大量代码(记录 db 层实际在做什么很有用)。我想要一个解决方案,我将一个简单的参数传递给整个数据库项目,以便我所有常用的静态最终记录器都可以写入正确的位置。

这是一个示例,只是为了说明我想要得到什么

在 Db 项目中:

public class Table{
  private final static Logger logger = Logger.XXXXXXX; <--the method I need to accomplish my goal
}

在应用项目中

public class TableInteractor{
  private Table table;
  private static final Logger logger = Logger.getLogger("MyApplication");
}

我提到的解决方案需要这样的东西

public class Table{
  private final static Logger logger;
  public Table(Logger logger){
    this.logger = logger;
  }     
}

public class TableInteractor{
  private Table table;
  private static final Logger logger = Logger.getLogger("MyApplication");
  ...
  table = new Table(logger);
}

有没有办法将“MyApplication”传递给 Db 项目,以便那里的 Logger 以与应用程序中相同的方式实例化? 如果您需要有关我的设置的更多信息以便给我答案,我可以添加更多信息。

编辑:

我刚刚注意到一个记录器有一个名为 setParent(Logger l) 的方法 如果我在 DB 项目中创建了一个记录器,我可以将应用记录器传递到 DB 层并将其设置为 DB 记录器的父级吗?

作为替代方案,我正在考虑将应用程序记录器的文件处理程序传递到数据库记录器并使用它,以便两个项目使用相同的日志记录文件。

关于哪一个是最好的解决方案有什么建议吗?

【问题讨论】:

  • 您是否考虑过使用 Log4J2 或 Logback 等日志框架?这样可以很容易地将多个日志附加程序转到同一个文件。

标签: java logging netbeans


【解决方案1】:

常见的模式是在调用工厂方法时使用类名为每个类使用一个记录器。这将创建记录器的层次结构,您可以自定义在什么级别记录哪些记录器以及用于处理日志记录的处理程序。当然,可以将更多记录器的输出发送到一个文件中。其中大部分内容当然是在 Java 日志概述中编写的 - http://docs.oracle.com/javase/6/docs/technotes/guides/logging/overview.html

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2021-06-01
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多