Придерживаться стандартного журнала при использовании Google Guice? - PullRequest
1 голос
/ 15 января 2010

Документы Java для Logger указывают, что имя регистратора должно основываться на имени класса. Google Guice обрабатывает это в BinderImpl.java , где выполняет следующие действия:

return member == null
      ? Logger.getAnonymousLogger()
      : Logger.getLogger(member.getDeclaringClass().getName());

Однако, поскольку он получает новый регистратор для каждого класса, я потерял бы доступ к тому, что Обработчик мог быть добавлен в мой регистратор.

Каков наилучший способ справиться с использованием имени класса, используемого в регистраторе, и применения стандартного набора обработчиков?

1 Ответ

4 голосов
/ 15 января 2010

Решение на самом деле не имеет ничего общего с Guice, а скорее основано на том, как классы журналирования работают в Java.

Регистраторы создаются в иерархии, таким образом, регистратор x.y.z является дочерним по отношению к x.y, вплоть до корневого регистратора, имя которого - пустая строка . Каждый регистратор наследует свойства, как и уровень ведения журнала, от своего родителя.

Таким образом, чтобы установить глобальный уровень журнала (или глобально установить обработчики), просто установите их в корневом логгере:

LogManager logManager = LogManager.getLogManager();
Logger rootLogger = logManager.getLogger("");
rootLogger.setLevel(Level.FINEST);
rootLogger.addHandler(new ConsoleHandler());

Как только это будет сделано, любые внедренные регистраторы получат свои свойства из корневого регистратора и любых родительских регистраторов, которые могут существовать. Для получения дополнительной информации об основах см. Документацию LogManager .

A config свойство также существует. Согласно документации LogManager:

Свойство "config". Это свойство предназначен для разрешения произвольного код конфигурации для запуска. свойство определяет пробел или запятую разделенный список имен классов. Новый экземпляр будет создан для каждого названный класс. Конструктор по умолчанию каждого класса может выполняться произвольно код для обновления журнала конфигурация, такая как настройка логгера уровни, добавление обработчиков, добавление фильтры и пр.

Это означает, что существует несколько решений проблемы, поскольку я мог бы также использовать класс конфигурации.

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