2009-02-25 3 views
1

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

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

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

Однако мы хотели бы добавить дополнительный аргумент в метод ошибки. Например:

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

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

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

ответ

6

Избегайте сложных клавиш как это: «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 реальную работу по регистрации. Это поможет разработчику избежать проблем.

+0

Вам не нужно переопределять toString()? –

+0

был превзойден, спасибо –

+0

Делегирование log4j требует дополнительной работы, чтобы убедиться, что исходный файл и номера строк верны. –

Смежные вопросы