java.util.logging.Logger在哪里存储他们的日志

Tha*_*ham 40 java java.util.logging

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

private static Logger logger = Logger.getLogger("order.web.OrderManager");
logger.info("Removed order " + id + ".");
Run Code Online (Sandbox Code Playgroud)

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

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

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

logger.log(Level.FINE, "Something");
logger.log(Level.WARNING, "Something");
logger.log(Level.SEVERE, "Something");
Run Code Online (Sandbox Code Playgroud)

log level是严重的,我可以看到所有三个日志,如果我log level是警告,那么我看不到严重日志,这是正确的吗?我该怎么设置log level

Pét*_*rök 28

我在哪里可以看到日志?

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

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

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

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

以下是Java Logging的一个很好的介绍.

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

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

要登录控制台,请将FileHandler以上内容替换为ConsoleHandler:

Handler ch = new ConsoleHandler();
Logger.getLogger("").addHandler(ch);
Run Code Online (Sandbox Code Playgroud)

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


Von*_*onC 5

的Java TM记录概述是相当有趣的回答你对Java的所有问题Logger:

记录概述

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

日志级别:

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

Level类定义了七个标准日志级别,从FINEST(最低优先级,具有最低值)至SEVERE(最高优先级,具有最高值).