为什么在Tomcat的logging.properties中需要两个写入处理程序?

39

来自文档:

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个回答

39

第一行声明将要使用的处理程序集,第二行将处理程序分配给特定的记录器(在这种情况下,根记录器因为.handlers未以任何前缀开头)。

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


35
为了扩展 soulcheck的回答,一开始我并没有理解...... 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的记录器(最后一个没有命名,因为只有一个,所以没有歧义)."

另一方面,.handlers行将是一个"赋值"。

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

我将1catalina和控制台处理程序分配给根记录器。这意味着应用程序中进行的任何日志记录都将转发到这些处理程序(除非被覆盖)。

.handlers中的.指的是你正在应用它的对象。在这种情况下,由于.左侧没有任何内容,因此您将其应用于所有记录器继承的根记录器。

但是,这正是此行中所采用的相同原理:

com.mycompany.MyClass.handlers = java.util.logging.ConsoleHandler
在这种情况下,.handlers 左边有一些内容,这意味着我们不将这些处理程序分配给根记录器,而是分配给特定的记录器。这行代码的意思是:“我要覆盖此特定记录器的标准记录器->处理程序分配。在这种情况下,请不要像根记录器配置那样操作。在这种情况下,我只想让你使用该记录器的 ConsoleHandler。”
这意味着任何针对 MyClass 的日志记录都将仅发送到 ConsoleHandler 而不是任何其他处理程序。其他类不受此行的影响。
再次强调,我只是在详细解释 soulcheck 的解释,我自己也需要理解其中的区别。

你对 '.handlers' 部分的解释真的很好。现在我更明白了。 - sylye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接