如何为单个java类启用FINE日志记录

时间:2009-06-12 02:44:54

标签: java logging

我正在使用java.util.logging.Logger登录我的程序。如何为单个类启用FINE日志记录,同时为每个其他类设置WARNING

我更喜欢在我的main()方法中以编程方式执行此操作,而不是需要设置其他属性文件。

5 个答案:

答案 0 :(得分:1)

Logger log = Logger.getLogger(this.getClass().getName()).setLevel(Level.FINE);

答案 1 :(得分:1)

如果你不想为每个有问题的类定义一个记录器,而是想在类之间共享记录器,你可以选择实现自己的java.util.logging.Handler,它有自己的类过滤方式名称使用LogRecord.getSourceClassName()。

提供的信息

答案 2 :(得分:1)

我知道OP已经要求以编程方式执行此操作,但这里也是如何在属性文件中执行此操作的示例。

警告:我认为它值得包含,因为标题不以编程方式表示,许多开发人员希望通过logging.properties来管理它。此外,关于这一点并没有真正的在线,它可能会令人困惑,并且与log4j

略有不同

根目录日志级别由.level config指示。这决定了默认情况下捕获哪些事件并“分发”以进行日志记录。根日志记录级别是日志记录层次结构中“根记录器”使用的级别。请参阅this onjava article for more info on the logging hierarchy

下面,根日志级别设置为WARNING,因此通常只捕获WARNING事件。这是由层次结构中的所有子记录器继承的,除非您另外配置(稍后):

.level=WARNING

此根目录级别仅指示捕获的内容,而不是“已分发”的内容。如何分发捕获的事件(消息)取决于与记录器关联的处理程序。例如,ConsoleHandler会将事件输出到控制台。例如:

java.util.logging.ConsoleHandler.level = WARNING

此ConsoleHandler.level指示此处理程序应分发或打印消息的级别。因此,如果使用上述配置接收到FINE消息,则此处理程序将不会打印它。它会打印任何警告日志级别或更高级别的消息。

设置为ALL将确保ConsoleHandler将所有消息打印到控制台(我们还需要配置根级别以确保捕获所有消息):

.level=ALL
java.util.logging.ConsoleHandler.level = ALL

然而,这会产生很多我们也不想要的噪音。因此,为了将FINE级事件减少到我们感兴趣的类,我们只更改这些特定记录器的日志记录级别:

com.level = WARNING
com.mypackage.MyClass1.level = FINE
com.mypackage.MyClass2.level = FINE
com.mypackage.mysubpackage.MyClass3.level = FINE

请注意,在上面,我已经明确地将“com”记录器的级别设置为WARNING。

答案 3 :(得分:0)

我相信您可以将Handler和特定类Logger的日志级别设置为FINE,同时将其余代码库的所有其他Logger保留为警告应该做的伎俩。 LoggerHandler都需要通过级别过滤器才能记录消息。

答案 4 :(得分:0)

嗯,这是我添加到我的邮件类中的一种实际工作的方法。我仍然欢迎其他人的改进。

private static void setupLogging() {
  // To enable FINE logging in a single class, apparently this bewildering
  // maze of statements is required.
  Logger.getLogger("").setLevel(Level.FINE);
  for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.FINE);
  }
  MyOtherClass.logger.setLevel(Level.FINE);
  Logger.getLogger("").setLevel(Level.WARNING);
}