有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我们需要在tomcat日志中编写两次处理程序。财产?

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

我没有找到任何解释为什么需要写处理程序和之后。处理者? 类似属性文件是否有通用规则


共 (2) 个答案

  1. # 1 楼答案

    来扩展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的记录器。一个类型为ConsoleHandler的记录器(由于只有一个,所以没有命名最后一个,所以没有歧义)。”

    另一方面,.handlers行将是一个“赋值”

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

    “我将1catalina&;console处理程序分配给根日志记录器。这意味着在应用程序中完成的任何日志记录都将转发给这些处理程序(除非被重写)”

    .handlers中的.指的是你在应用它。在本例中,由于.左侧没有任何内容,因此将其应用于根记录器,所有记录器都从根记录器继承

    但在这方面,这正是同样的原则:

    com.mycompany.MyClass.handlers = java.util.logging.ConsoleHandler
    

    在本例中,.的左边有一个.handlers的对象,这意味着我们不将这些处理程序分配给根记录器,而是分配给特定的记录器。这句话的意思是“我正在覆盖这个特定记录器的标准记录器->;处理程序分配。在这种情况下,不要表现得像基于根记录器配置一样。在这种情况下,我希望您只使用该记录器的ConsoleHandler

    这意味着MyClass的任何日志记录将只发送给ConsoleHandler,而不会发送给任何其他处理程序。其他课程不受这条线的影响

    再一次,我只是重复soulcheck的解释,但更详细,我需要自己去理解其中的区别

  2. # 2 楼答案

    第一行声明可以/将要使用的处理程序集,第二行将处理程序分配给特定的记录器(在本例中,根记录器as.handlers没有任何前缀)

    稍后在logging.properties中,将配置每个处理程序