gpt4 book ai didi

java - 为什么没有显示 Level.FINE 日志消息?

转载 作者:IT老高 更新时间:2023-10-28 11:22:45 25 4
gpt4 key购买 nike

JavaDocs for java.util.logging.Level状态:


按降序排列的级别是:

  • 严重(最高值)
  • 警告
  • 信息
  • 配置
  • 很好
  • FINER
  • FINEST(最低值)

来源

import java.util.logging.*;

class LoggingLevelsBlunder {

public static void main(String[] args) {
Logger logger = Logger.getAnonymousLogger();
logger.setLevel(Level.FINER);
System.out.println("Logging level is: " + logger.getLevel());
for (int ii=0; ii<3; ii++) {
logger.log(Level.FINE, ii + " " + (ii*ii));
logger.log(Level.INFO, ii + " " + (ii*ii));
}
}
}

输出

Logging level is: FINER
Jun 11, 2011 9:39:23 PM LoggingLevelsBlunder main
INFO: 0 0
Jun 11, 2011 9:39:24 PM LoggingLevelsBlunder main
INFO: 1 1
Jun 11, 2011 9:39:24 PM LoggingLevelsBlunder main
INFO: 2 4
Press any key to continue . . .

问题陈述

我的示例将 Level 设置为 FINER,因此我希望每个循环看到 2 条消息。相反,我看到每个循环都有一条消息(缺少 Level.FINE 消息)。

问题

为了看到 FINE(、FINERFINEST)输出需要改变什么?

更新(解决方案)

感谢 Vineet Reynolds' answer ,这个版本符合我的预期。它显示 3 x INFO 消息和 3 x FINE 消息。

import java.util.logging.*;

class LoggingLevelsBlunder {

public static void main(String[] args) {
Logger logger = Logger.getAnonymousLogger();
// LOG this level to the log
logger.setLevel(Level.FINER);

ConsoleHandler handler = new ConsoleHandler();
// PUBLISH this level
handler.setLevel(Level.FINER);
logger.addHandler(handler);

System.out.println("Logging level is: " + logger.getLevel());
for (int ii=0; ii<3; ii++) {
logger.log(Level.FINE, ii + " " + (ii*ii));
logger.log(Level.INFO, ii + " " + (ii*ii));
}
}
}

最佳答案

记录器只记录消息,即他们创建日志记录(或记录请求)。他们不会将消息发布到目的地,这由处理程序负责。设置记录器的级别,只会使其创建与该级别或更高级别匹配的日志记录。

您可能正在使用 ConsoleHandler (我无法推断您的输出是 System.err 还是文件,但我认为它是前者),默认发布级别 Level.INFO 的日志记录。您必须配置此处理程序,以发布级别 Level.FINER 及更高级别的日志记录,以获得所需的结果。

我建议阅读 Java Logging Overview指导,以了解底层设计。该指南涵盖了 Logger 和 Handler 概念之间的区别。

编辑处理程序级别

1.使用配置文件

可以修改 java.util.logging 属性文件(默认情况下,这是 JRE_HOME/lib 中的 logging.properties 文件)以更改默认级别ConsoleHandler:

java.util.logging.ConsoleHandler.level = FINER

2.在运行时创建处理程序

不建议这样做,因为它会导致覆盖全局配置。在整个代码库中使用它可能会导致无法管理的记录器配置。

Handler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.FINER);
Logger.getAnonymousLogger().addHandler(consoleHandler);

关于java - 为什么没有显示 Level.FINE 日志消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com