java - 如何在多个java项目中使用同一个记录器

标签 java logging netbeans

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

我们有一个 Java NetBeans 项目,用于处理 Oracle 数据库以及数据库层所需的所有实体和功能(我们无法用 hibernate 替换它)。其他 Java NetBeans 项目使用该项目来读取和写入数据库。

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

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

这是一个例子,只是为了澄清我想要得到什么

在数据库项目中:

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以与应用程序中的Logger相同的方式实例化? 如果您需要有关我的设置的更多信息以便给我答案,我可以添加更多信息。

编辑:

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

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

有什么建议是最好的解决方案吗?

最佳答案

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

关于java - 如何在多个java项目中使用同一个记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569664/

相关文章:

android - 如何从android进程中获取错误日志以及何时调用get error log方法?

c++ - 如何在 NetBeans 中使用框架

java - Tomcat : Context path not being set

java - InputStream、HashMap、ArrayList的内部实现?

c# - 如何使用异步/等待方法管理类似 NDC 的 log4net 堆栈? (每个任务堆栈?)

netbeans - 如何让 NetBeans 12.0 在 Mac 上启动(MAC OS 11.0 beta/Big Sur)

java - 重叠 JTextField 和 JLabel

java - 我们可以使用 String.format() 来填充/前缀所需长度的字符吗?

java - 使用 JDBC 将对象(文档文件)存储到 SQL 中

php - 网站宕机,无法理解网络服务器进程日志?