42

这可能是一个愚蠢的问题,但我对 java Logger 有点迷茫

private static Logger logger = Logger.getLogger("order.web.OrderManager");
logger.info("Removed order " + id + ".");

我在哪里可以看到日志?这也是来自 java.util.logging.Logger 库的引用:

在每个日志调用中,Logger 最初都会根据记录器的有效日志级别对请求级别(例如 SEVERE 或 FINE)进行廉价检查。如果请求级别低于日志级别,则日志调用立即返回。
通过这个初始(廉价)测试后,Logger 将分配一个 LogRecord 来描述日志消息。然后它将调用过滤器(如果存在)来更详细地检查是否应该发布记录。如果通过了,它会将 LogRecord 发布到其输出处理程序。`

这是否意味着如果我有 3 个request level日志:

logger.log(Level.FINE, "Something");
logger.log(Level.WARNING, "Something");
logger.log(Level.SEVERE, "Something");

而且我log level的是严重的,我可以看到所有三个日志,如果我log level的是警告,那么我看不到严重的日志,对吗?我该如何设置log level

4

3 回答 3

28

我在哪里可以看到日志?

在日志文件或标准输出中,取决于您的实际日志处理程序配置。这可以通过属性文件或直接通过日志 API 设置。

这是否意味着如果我有 3 个请求级别的日志...

SEVERE是最重要的(最高优先级),并且FINE是示例中显示的 3 个消息类型中最不重要的消息类型。因此,如果您的日志级别为SEVERE,则仅SEVERE记录消息。如果 level 为FINE,则记录所有 3 条消息。

这在实际生产环境中非常有用,您可能只想记录错误和可能的警告(希望很少见,但您想了解它们),因此您可以将日志级别设置为WARNING. 但是,在您的开发环境中,例如调试问题时,您希望查看日志中的所有信息,即使它会创建大量日志数据并减慢应用程序的速度。因此,您将日志级别设置为FINEor FINEST

这是对 Java Logging 的一个很好的介绍

更新:上面页面中的一个简单示例,用于配置记录器以记录到级别的文件FINEST

Handler fh = new FileHandler("%t/wombat.log");
Logger.getLogger("").addHandler(fh);
Logger.getLogger("com.wombat").setLevel(Level.FINEST);

要登录到控制台,请将FileHandler上面的内容替换为ConsoleHandler

Handler ch = new ConsoleHandler();
Logger.getLogger("").addHandler(ch);

这只是一个例子——在一个真实的应用程序中,最好通过配置属性文件来配置日志记录。

于 2010-06-11T19:55:32.290 回答
5

Java TM 日志概述非常有趣,可以回答您关于 Java 的所有问题Logger

日志概述

您将看到您的日志,其中Handler与您关联的 (s)Logger将生成所述日志(在 a 中Console,或在Stream...中)。
默认配置在根记录器上建立一个处理程序,用于将输出发送到控制台。

日志级别

每条日志消息都有一个关联的日志级别。该级别对日志消息的重要性和紧迫性给出了粗略的指导。日志级别对象封装了一个整数值,值越高表示优先级越高。

该类Level定义了七个标准日志级别,范围从FINEST(最低优先级,最低值)到SEVERE最高优先级,最高值)。

于 2010-06-11T19:58:47.353 回答
1

它的去向取决于您的配置。API 文档中有关于此的详细信息。日志级别与您所说的完全相反。如果您的配置为FINE,所有内容FINE, WARNING, SEVERE都会显示,但如果您将其设置为,SEVERE则只会显示那些。

一般来说,您应该在调试时使用并在生产环境中FINE切换到。SEVERE

于 2010-06-11T20:00:39.543 回答