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