Является ли регистратор для каждого класса или набор регистраторов, к которым обращается все приложение? - PullRequest
12 голосов
/ 08 июля 2011

У меня есть проект на Java, и я создаю семь регистраторов, доступ к которым осуществляется фасадом из каждой точки программы. Но в Интернете я вижу много примеров с регистратором в каждом классе.

Какой самый рекомендуемый способ ведения журнала?

Ответы [ 3 ]

11 голосов
/ 08 июля 2011

Я использую один регистратор на класс для всех технических аспектов, например, ведение журнала, трассировка, отладка, метод ввода / вывода (private static final...).Часто я использовал shared логгеры для функциональных аспектов, например, контрольных журналов, безопасности;Публичный регистратор в общем классе.

Мне не известны стандарты или общие рекомендации, но этот подход хорошо сработал для меня.

8 голосов
/ 10 июля 2011

Регистратор в каждом классе лучше и проще в расширении. Причина в том, что определение одного регистратора в одном классе легко отделяет реальный API регистрации от конфигурации регистратора (формат, постоянство). Я работал с более чем одним большим и сложным Java-программным обеспечением (> 1 миллиона строк кода), все они используют один регистратор на класс.

Кроме того, определение «один регистратор на класс» не означает, что каждый класс использует отдельный экземпляр регистратора.

class Foo {
    private static final Logger log = Logger.getLogger( Foo.class );
}


class Bar {
    private static final Logger log = Logger.getLogger( Bar.class );
}

Неясно, используют ли два регистратора, на которые ссылается приведенный выше код, один и тот же экземпляр регистратора. Обычно, есть место конфигурации (в файле свойств или в коде), которое указывает, разделяют ли регистраторы в Foo и Bar экземпляр регистратора.

Таким образом, «регистратор в каждом классе» просто определяет один регистратор для каждого класса, но такие регистраторы могут ссылаться на один и тот же экземпляр регистратора, используемый в разных классах

1 голос
/ 08 июля 2011

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

Распространенной рекомендацией, если вы используете какую-либо среду ведения журналов, такую ​​как Log4J, является получение регистратора в статической переменной для каждого класса.

class Foo {
    private static final Logger log = Logger.getLogger( Foo.class );
}

В большинстве каркасов ведения журналов вы можете определить уровни журналов (WARN, ERROR, DEBUG), а также шаблон для приложений, чтобы можно было сохранять сообщения в разных файлах, фильтруя их по разным критериям.

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

...