Почему нам нужно два раза написать обработчики в tomcat logging.properties? - PullRequest
33 голосов
/ 04 февраля 2012

Из документов :

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 ]

32 голосов
/ 04 февраля 2012

Первая строка объявляет набор обработчиков, которые могут / будут использоваться, вторая - назначает обработчики для конкретного регистратора (в этом случае корневой регистратор, поскольку .handlers не имеет префикса с чем-либо).

Позже в logging.properties каждый обработчик настроен.

14 голосов
/ 30 мая 2018

Чтобы расширить ответ соулчека , который я сначала не понял ...

Строка 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, и это означает, что мы не назначаем эти обработчики корневому регистратору, а конкретному регистратору. С этой строкой вы говорите: «Я перезаписываю стандартное назначение обработчика logger-> для этого конкретного регистратора. В этом случае не ведите себя так, как вы, основываясь на конфигурации корневого регистратора. В этом случае я хочу, чтобы вы использовали ConsoleHandler для этого регистратора ".

Таким образом, это означает, что любое ведение журнала для MyClass будет отправлено только на ConsoleHandler, а не на любой другой обработчик. Эта строка не влияет на другие классы.

Опять же, я просто повторяю объяснение из проверки души, но более подробно, в котором я нуждался, чтобы понять разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...