java.util.logger.setLevel() 和 handler.setLevel() 有什么区别?

What is the difference between java.util.logger.setLevel() and handler.setLevel()?

我在我的项目中使用 java.util.Logger 并且我使用的是一个简单的 ConsoleHandler。默认情况下,日志记录级别为 'Info'。我想将级别更改为 'Fine'。但是,我必须同时更改 Logger 和 Handler 的级别。为什么?这有什么必要?为什么要这样设计?为什么我不能单独在 Logger/Handler 上设置级别并完成它?

一个Logger可以拥有多个Handlers。例如。一个记录器可能有一个 ConsoleHandler 和一个 FileHandler,它将同时向它们转发日志事件。

A LoggerHandler 可以有不同的日志级别设置以用于过滤目的。

  • Logger.setLevel() 会将您的记录器配置为仅从 一定水平。
  • Handler.setLevel() 会将您的处理程序配置为 只处理来自某个级别的记录器的日志事件。

通过这种方式,您可以使用 Logger.setLevel(INFO) 设置记录器来记录几乎所有内容。 此外,您可以告诉您 FileHandler,它附加到您的 "Info" 记录器,只处理至少是警告 FileHandler.setLevel(WARNING) 的日志。您 ConsoleHandler 仍会显示信息日志,而在您的日​​志文件中,您只会找到警告和错误。

试试吧。很简单。