为什么我们在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
而不会发送到任何其他处理程序。 其他类不受此行的影响。
我只是重复灵魂检查中的解释,但更详细地说,我需要自己理解差异。