Подтвердить что ты не робот

Почему нам нужны два обработчика записи в tomcat logging.properties?

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

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? Существуют ли общие правила для похожих файлов свойств?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Строка 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 для этого регистратора ".

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

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