Logging 在使用Google Guice时遵守日志记录标准?

Logging 在使用Google Guice时遵守日志记录标准?,logging,dependency-injection,guice,Logging,Dependency Injection,Guice,的Java文档指示记录器名称应基于类名。Google Guice通过以下方式处理此问题: return member == null ? Logger.getAnonymousLogger() : Logger.getLogger(member.getDeclaringClass().getName()); 然而,由于每个类都有一个新的记录器,我将无法访问可能添加到记录器中的任何内容 处理在记录器中使用类名和应用一组标准处理程序的最佳方法是什么?解决方案实际上与Guic

的Java文档指示记录器名称应基于类名。Google Guice通过以下方式处理此问题:

return member == null
      ? Logger.getAnonymousLogger()
      : Logger.getLogger(member.getDeclaringClass().getName());
然而,由于每个类都有一个新的记录器,我将无法访问可能添加到记录器中的任何内容


处理在记录器中使用类名和应用一组标准处理程序的最佳方法是什么?

解决方案实际上与Guice无关,而是基于日志类在Java中的工作方式

记录器是在一个层次结构中创建的,因此,记录器x.y.z是x.y的子级,一直到名称为空字符串的根记录器。每个记录器都从其父记录器继承属性,如其日志记录级别

因此,为了全局设置日志级别或全局设置处理程序,只需在根记录器上设置它们:

LogManager logManager = LogManager.getLogManager();
Logger rootLogger = logManager.getLogger("");
rootLogger.setLevel(Level.FINEST);
rootLogger.addHandler(new ConsoleHandler());
完成后,任何注入的记录器都将从根记录器和可能存在的任何父记录器派生其属性。有关基础知识的更多信息,请参见

配置属性也存在。根据LogManager文档:

属性配置。这个物业是 旨在允许任意的 要运行的配置代码。这个 属性定义空白或逗号 类名称的分隔列表。一个新的 将为每个实例创建一个实例 命名类。默认构造函数 每个类的 更新日志记录的代码 配置,例如设置记录器 级别,添加处理程序,添加 过滤器等


这意味着这个问题有多种解决方案,因为我也可以使用一个配置类。

该解决方案实际上与Guice无关,而是基于Java中日志类的工作方式

记录器是在一个层次结构中创建的,因此,记录器x.y.z是x.y的子级,一直到名称为空字符串的根记录器。每个记录器都从其父记录器继承属性,如其日志记录级别

因此,为了全局设置日志级别或全局设置处理程序,只需在根记录器上设置它们:

LogManager logManager = LogManager.getLogManager();
Logger rootLogger = logManager.getLogger("");
rootLogger.setLevel(Level.FINEST);
rootLogger.addHandler(new ConsoleHandler());
完成后,任何注入的记录器都将从根记录器和可能存在的任何父记录器派生其属性。有关基础知识的更多信息,请参见

配置属性也存在。根据LogManager文档:

属性配置。这个物业是 旨在允许任意的 要运行的配置代码。这个 属性定义空白或逗号 类名称的分隔列表。一个新的 将为每个实例创建一个实例 命名类。默认构造函数 每个类的 更新日志记录的代码 配置,例如设置记录器 级别,添加处理程序,添加 过滤器等

这意味着这个问题有多种解决方案,因为我也可以使用一个配置类