gpt4 book ai didi

Java Logger 未记录到 Netbeans 中的输出

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:07 24 4
gpt4 key购买 nike

我正在 Netbeans 中使用 Maven 开始一个 Java 项目。我写了一些代码来使用 Logger 类进行日志记录。但是,日志记录似乎不起作用。在我的程序开始时,我运行:

Logger.getLogger(ProjectMainClass.class.getName()).setLevel(LOG_LEVEL);
Logger.getLogger(ProjectMainClass.class.getName()).log(LOG_LEVEL, "Hello Logger");

第二行从不将我的消息输出到 Netbeans 的输出屏幕。System.out.print 语句确实显示在输出中。

我觉得我需要设置一些配置选项。我四处搜索,但我无法弄清楚(过去我总是使用 System.out 和调试器进行调试,但我认为记录器更强大(也更令人困惑))。

最佳答案

如果您正在使用 Java Logging API 并且您有一个类似下一个的 java 类:

import java.util.logging.Level;
import static java.util.logging.Level.*;
import java.util.logging.Logger;

public class Main {

private static final Logger LOG = Logger.getLogger(Main.class.getName());

public static void main(String[] args) {
Level[] levels = {
OFF, SEVERE, WARNING, INFO,
CONFIG, FINE, FINER, FINEST, ALL
};
for (Level level : levels) {
LOG.setLevel(level);
LOG.log(level, "Hello Logger");
}
}
}

你注意到输出是:

Jun 7, 2013 6:30:16 PM Main main
SEVERE: Hello Logger
Jun 7, 2013 6:30:16 PM Main main
WARNING: Hello Logger
Jun 7, 2013 6:30:16 PM Main main
INFO: Hello Logger

会发生什么?其他级别呢?我究竟做错了什么?不用担心。要开心!这是因为 Java Logging API 的默认级别是 INFO。您可以在 JRE 的配置文件 logging.properties 中找到它,例如

D:\Software\jdk1.6.0_43\jre\lib\logging.properties

在这个文件中,我们可以看到几行:

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers. For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO

并且,如文本所示,控制台处理程序的级别:

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO

这就是为什么输出中的最大详细信息级别为 INFO 的原因。你可以在这个文件或你的代码中更改级别(最好不要影响其他进程的级别),例如:

import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import static java.util.logging.Level.*;
import java.util.logging.Logger;

public class Main {

private static final Logger LOG = Logger.getLogger(Main.class.getName());

public static void main(String[] args) {
Level[] levels = {
OFF, SEVERE, WARNING, INFO,
CONFIG, FINE, FINER, FINEST, ALL
};


Logger root = Logger.getLogger("");
// .level= ALL
root.setLevel(ALL);
for (Handler handler : root.getHandlers()) {
if (handler instanceof ConsoleHandler) {
// java.util.logging.ConsoleHandler.level = ALL
handler.setLevel(ALL);
}
}

for (Level level : levels) {
LOG.setLevel(level);
LOG.log(level, "Hello Logger");
}
}
}

最后一段代码的输出是:

Jun 7, 2013 6:31:13 PM Main main
SEVERE: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
WARNING: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
INFO: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
CONFIG: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
FINE: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
FINER: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
FINEST: Hello Logger
Jun 7, 2013 6:31:13 PM Main main
ALL: Hello Logger

编辑

您还可以使用另一个文件 logging.properties,将所需级别添加到虚拟机的参数:

-Djava.util.logging.config.file="C:\mylogging.properties"

关于Java Logger 未记录到 Netbeans 中的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16992381/

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