Почему нам нужны два обработчика записи в 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? Существуют ли общие правила для похожих файлов свойств?
Ответы
Ответ 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
а не любому другому обработчику. Другие классы не затрагиваются этой строкой.
Опять же, я просто повторяю объяснение из проверки души, но более подробно, в котором я нуждался, чтобы понять разницу.