状态的JavaDocsjava.util.logging.Level
:
级别降序为:
SEVERE
(最高值)WARNING
INFO
CONFIG
FINE
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
(FINER
或FINEST
)输出,需要进行哪些更改?
感谢Vineet Reynolds的回答,该版本可以按照我的期望工作。它显示3条INFO
消息和3条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日志记录概述》指南,以了解基础设计。该指南涵盖了Logger和Handler概念之间的区别。
编辑处理程序级别
1.使用配置文件
所述的java.util.logging属性文件(默认情况下,这是logging.properties
在文件JRE_HOME/lib
)可以被修改,以改变ConsoleHandler的缺省级别:
java.util.logging.ConsoleHandler.level = FINER
2.在运行时创建处理程序
不建议这样做,因为这会导致覆盖全局配置。在您的整个代码库中使用此命令将导致记录器html" target="_blank">配置可能无法管理。
Handler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.FINER);
Logger.getAnonymousLogger().addHandler(consoleHandler);
我正在将一个应用程序从Log4J 1.2.16迁移到Log4J 2.13.3。为此,我使用log4j21.2到2.13.3桥。在我自己的开发机器上,一切都运转良好。但是,当我将应用程序部署到测试服务器时,日志只会发送到根日志记录器,我定义的其他日志文件保持为空。 配置文件完全相同,只是附件中的路径不同。我的开发机器运行Windows,测试服务器运行Linux。该应用程序已部署到Weblogic 1
我怀疑这可能是我包含的一个库,它正在扰乱我的日志。这有可能吗?librray可以改变我的日志显示方式吗?既然我有点迷路了,我该怎么调查呢?
我在ReactJS中工作,我通过API从服务器获取数据。我做了一些搜索过滤,我想显示消息,如果没有记录可用?我是ReactJS的初学者,没有太多关于ReactJS的知识。 代码:
我用的是Android Studio。我编辑了logcat消息,以便只记录要显示的应用程序。但在运行时,我发现logact显示了我的日志和系统日志,如下例所示: 请告诉我为什么logcat仍然显示系统日志
我正在使用卡哈DB作为持久存储来保存ActiveMQ 5.16.4中的消息。 我正在发送持久消息,然后在代理运行时,我正在删除KahaDB日志文件(下图中的),这些文件应该保存队列的消息。但是,删除日志文件似乎不会执行任何操作。在 ActiveMQ 控制台中,我仍然可以看到持久消息,并且我还可以发送更多消息,这些消息由连接的使用者从 Spring Boot 应用程序接收。我认为删除这些日志文件将摆
我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?