为了扩展
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 的解释,我自己也需要理解其中的区别。