使用Google Guice时是否遵守日志标准?

时间:2010-01-15 00:07:32

标签: logging dependency-injection guice

Logger的Java文档表明记录器名称应基于类名。 Google Guice会在BinderImpl.java处理此问题,执行以下操作:

return member == null
      ? Logger.getAnonymousLogger()
      : Logger.getLogger(member.getDeclaringClass().getName());

但是,由于它为每个课程获得了一个新的记录器,我将无法访问可能已添加到记录器的任何Handler's

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

1 个答案:

答案 0 :(得分:4)

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

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

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

LogManager logManager = LogManager.getLogManager();
Logger rootLogger = logManager.getLogger("");
rootLogger.setLevel(Level.FINEST);
rootLogger.addHandler(new ConsoleHandler());

完成后,任何注入的记录器都将从根记录器和可能存在的任何父记录器派生其属性。有关基础知识的更多信息,请参阅LogManager documentation

还存在config属性。根据LogManager文档:

  

属性“config”。这个属性是   意图允许任意   要运行的配置代码。该   property定义空格或逗号   分隔的类名列表。一个新的   将为每个创建实例   命名类。默认构造函数   每个类可以执行任意   用于更新日志记录的代码   配置,例如设置记录器   级别,添加处理程序,添加   过滤器等

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