【问题标题】:Where does java.util.logging.Logger store their logjava.util.logging.Logger 在哪里存储他们的日志
【发布时间】:2010-06-11 19:36:34
【问题描述】:

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

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

在哪里可以看到日志?这也是来自 java.util.logging.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

【问题讨论】:

  • 内置记录器不是那么好。将其替换为 log4j (logging.apache.org/log4j/1.2)。 log4j 网站上有一些很好的文档解释了如何使用它...
  • @bwawok:针对 Apache Commons Logging 编写代码也不错。如果 log4j 可用,它将使用 log4j,如果 log4j 不可用,它将回退到内置日志记录。
  • 我不会使用公共日志记录。它有很多问题,并且在使用tomcat时很臭。如果在 log4j 中为自己编码。如果编写库代码,请使用 slf4j (slf4j.org)
  • 与其只是说“内置日志记录很糟糕”,不如解释一下为什么而不是盲目地模仿流行观点可能会有所帮助......

标签: java java.util.logging


【解决方案1】:

我在哪里可以看到日志?

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

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

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

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

这是一个很好的introduction to 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);

这只是一个示例 - 在实际应用中,最好通过配置属性文件配置日志记录。

【讨论】:

  • 哦,这恰恰相反。非常感谢你。彼得,你能告诉我如何配置日志以打印到文件或控制台吗?
  • 您提到在实际应用中,最好通过属性文件配置日志记录。能告诉我怎么做吗?
  • @Harry,我不确定格式是否标准,但至少对于 Log4J,您可以在此处找到带有解释的好示例:logging.apache.org/log4j/1.2/manual.html,在“配置”部分。
  • 谢谢。但是“Java 日志简介”链接不起作用。如果你更新它会很棒。
  • 您在某些地方有getLogger(""),在其他地方有getLogger("com.wombat")。当我尝试将第三方库日志记录到使用Logger.getLogger("com.wombat.MyClass") 构建的控制台时,我应该使用什么?
【解决方案2】:

Java TM Logging Overview 很有趣,可以回答你关于 Java 的所有问题Logger

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

日志级别

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2017-07-18
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多