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

时间:2012-02-04 09:42:32

标签: java tomcat properties logging

来自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? 类似属性文件是否有通用规则?

2 个答案:

答案 0 :(得分:32)

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

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

答案 1 :(得分:12)

扩展soulcheck's answer,我一开始并不理解......

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 ..一个类型为{{的记录器1}}(不指定最后一个,因为那里只有一个,所以没有歧义)。"

另一方面,ConsoleHandler行将是"赋值"。

.handlers

"我指定1catalina&控制台处理程序到根记录器。这意味着在应用程序中完成的任何日志记录都将转发给这些处理程序(除非重写)"

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler 中的.指的是您正在应用的内容。在这种情况下,由于.handlers左侧没有任何内容,您可以将其应用于所有记录器继承的根记录器。

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

.

在这种情况下,com.mycompany.MyClass.handlers = java.util.logging.ConsoleHandler 的{​​{1}}左侧有一些内容,这意味着我们不会将这些处理程序分配给根记录程序,而是分配给特定的记录程序。使用此行,您说"我将覆盖此特定记录器的标准记录器 - >处理程序分配。在这种情况下,请不要像根记录器配置那样行事。在这种情况下,我希望您只使用.作为记录器"。

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

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