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

问题描述 投票:0回答:2

来自文档

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

类似的属性文件有共同的规则吗?

java tomcat properties logging
2个回答
40
投票

第一行声明可以/将使用的处理程序集,第二行将处理程序分配给特定记录器(在本例中,根记录器为

.handlers
没有任何前缀)。

稍后在

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


36
投票

扩展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
而不会发送到任何其他处理程序。其他类不受此行影响。

我只是重复灵魂检查的解释,但更详细,我需要自己理解其中的区别。

© www.soinside.com 2019 - 2024. All rights reserved.