Какова цель именованных иерархических регистраторов? - PullRequest
0 голосов
/ 29 мая 2020

Согласно этому примеру http://tutorials.jenkov.com/java-logging/logger-hierarchy.html

у нас есть три логгера «com», «com.jenkov» и «com.jenkov.web». Почему они должны быть в иерархии, в чем преимущество сворачивания сообщений?

1 Ответ

0 голосов
/ 29 мая 2020

Почему они должны быть в иерархии ...?

Наследование. Per Обзор ведения журнала Java ™ - 1.3 Регистраторы :

В частности, регистратор может наследовать:

уровень ведения журнала. Если для уровня Logger установлено значение NULL, то Logger будет использовать эффективный уровень, который будет получен путем перехода вверх по родительскому дереву и использования первого ненулевого уровня. Обработчики. По умолчанию Logger будет регистрировать любые выходные сообщения для своих родительских обработчиков и так далее рекурсивно вверх по дереву. Имена пакетов ресурсов. Если регистратор имеет нулевое имя пакета ресурсов, он наследует любое имя пакета ресурсов, определенное для его родителя, и так далее рекурсивно вверх по дереву.

Использование замедления пакета в Java, что позволяет вы можете прослушивать, отключать или отсеивать журналы для класса, пакета или даже сторонней библиотеки организации. Это также означает, что вам не нужно писать файл конфигурации с сотнями имен регистраторов, чтобы отключить все журналы. Установка root выравнивает всех дочерних элементов для вас в одну строку. Поскольку у вас есть древовидная структура, вы можете рекурсивно применить этот logi c к дочерним регистраторам, чтобы отключить определенную c библиотеку или логический программный модуль.

В учебнике это объясняется:

Logger.getLogger("com.jenkov.web") имеет только одного родителя - регистратора root. Выглядит это так: "" <- "com.jenkov.web"

Однако Logger logger = Logger.getLogger(""); Logger logger1 = Logger.getLogger("com"); Logger logger2 = Logger.getLogger("com.jenkov"); Logger logger3 = Logger.getLogger("com.jenkov.web");

заставляет LogManager создавать другую иерархию, которая выглядит так: "" <- "com." <- "com.jenkov." <- "com.jenkov.web"

Добавление кода, подобного этому не требуется в log4j, но требуется в JUL, если вы хотите изменить иерархию, чтобы вы могли контролировать ее во время выполнения . Также логгеры должны быть закреплены в памяти, чтобы избежать сборки мусора , если вам нужно проделать этот трюк.

... в чем преимущество сворачивания сообщений?

Я так понимаю, вы имеете в виду отправку сообщений родительским регистраторам ??? Это позволяет конфигурации отсеивать записи журнала в определенные c обработчики и совместно использовать общие настройки обработчика. Например, в конфигурации среды разработки вы можете захотеть отправить весь вывод на консоль, подключившись к root, а затем отправить в FileHandler только для определенного пакета c. Преимущество дерева регистратора в том, что вам не нужно присоединять второй ConsoleHandler к указанному пакету c, чтобы увидеть вывод консоли.

...