log4j дополнительные аргументы логирования - PullRequest
1 голос
/ 25 февраля 2009

Я разрабатываю (внутреннюю) библиотеку, в которой я хочу, чтобы разработчики, использующие эту библиотеку, включали текстовый идентификатор при регистрации сообщений об ошибках или сообщениях с фатальным уровнем. Без изменения log4j то, что мы хотим применить, похоже на:

logger.error («E1234: Произошла ошибка»);

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

Однако нам хотелось бы добавить дополнительный аргумент в метод error. E.g.:

logger.error ("E1234", "Произошла ошибка");

Это может быть выполнено путем реализации некоторого класса фасада для класса Log4j Logger.

У кого-нибудь еще была подобная проблема? Каково было ваше решение? На данный момент мы предпочитаем первый пример кода. В будущем мы могли бы реализовать анализатор кода для выполнения во время ночных сборок (или кто-нибудь знает о существующем анализаторе кода, который можно настроить для обнаружения пропущенного идентификатора текста из вызова метода error ()?)

1 Ответ

6 голосов
/ 25 февраля 2009

Избегайте составных ключей, таких как: «E1234: Произошла ошибка»

Я бы использовал

public enum Error {
 E1234("E1234", "An error has occured"),
 E1245("E1235", "Other error has occured"),
 private final String code;
 private final String description;
 Error(code, description) {
   this.code;
   this.description = description
 }
 @Override
 public String toString() {
   return this.code + ": " + this.description;
 }
}

Затем вы можете создать свой собственный интерфейс с методами, которые принимают ошибку:

public interface MyLogger {
 void error(Error);
 void info(Error);
 void warn(Error);
 void debug(Error);
}

Затем реализуйте его и передайте log4j реальное задание регистрации. Это поможет вашему разработчику избежать проблем.

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