为什么我们在tomcat logging.properties中需要两次写处理程序?

来自docs:

handlers = 1catalina.org.apache.juli.FileHandler, \ 2localhost.org.apache.juli.FileHandler, \ 3manager.org.apache.juli.FileHandler, \ java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler 

我没有找到任何解释为什么需要写处理程序和后.handlers? 类似属性文件是否有通用规则? 谢谢。

第一行声明可以/将要使用的处理程序集,第二行指定处理程序到特定记录程序(在这种情况下,根记录程序为.handlers不带任何前缀)。

稍后在logging.properties中配置每个处理程序。

扩展灵魂检查的答案 ,我一开始并不理解……

handlers = ...行可以看作是“变量声明”。

 handlers = 1catalina.org.apache.juli.FileHandler, \ 2localhost.org.apache.juli.FileHandler, \ 3manager.org.apache.juli.FileHandler, \ java.util.logging.ConsoleHandler 

“我声明了一个名为1catalina的记录器并输入了FileHandler ,一个名为2localhost的记录器,并且输入了FileHandler ..一个类型为ConsoleHandler的记录ConsoleHandler (没有命名最后一个,因为只有一个,所以没有歧义)。”

另一方面, .handlers行将是“赋值”。

 .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler 

“我将1catalina和控制台处理程序分配给根记录器。这意味着在应用程序中完成的任何记录都将转发给这些处理程序(除非覆盖)”

这个. in .handlers指的是你正在申请的内容。 在这种情况下,因为左边没有任何东西. ,您将它应用于所有记录器inheritance的根记录器。

但这与此行中的原则完全相同:

 com.mycompany.MyClass.handlers = java.util.logging.ConsoleHandler 

在这种情况下,左边有一些东西. 对于.handlers ,这意味着我们不会将这些处理程序分配给根记录程序,而是分配给特定的记录程序。 使用此行,您会说“我正在覆盖此特定记录器的标准记录器 – >处理程序分配。在这种情况下,请不要像根记录器配置那样操作。在这种情况下,我希望您只使用该记录器的ConsoleHandler “。

这意味着MyClass任何日志记录都只会发送到ConsoleHandler而不会发送到任何其他处理程序。 其他类不受此行的影响。

我只是重复灵魂检查中的解释,但更详细地说,我需要自己理解差异。