Что такое маркеры в фреймворках Java Logging и в чем причина их использования?

110

Я впервые слышу о маркерах при чтении:

http://slf4j.org/faq.html

Проверяю доступные методы для объекта Logger :

и нашел интерфейсы:

Более подробную информацию я получаю из:

но все же в замешательстве ... Обратите внимание, что я спрашиваю, почему , а не как их использовать, так что это не дубликат:

ОБНОВЛЕНИЕ Похоже, что когда вы используете маркеры, вам также необходимо написать собственный код Java, вместо того, чтобы выполнять настройку в файлах XML или .property ...

ОБНОВЛЕНИЕ 2 из http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));
гавенкоа
источник
Чтобы использовать маркеры, вам необходимо использовать API маркеров, предоставляемый SLF4J. Это то, что вы подразумеваете под «нестандартным кодом Java»?
Ceki
@Ceki Похоже, что использование только Logger.warn (Marker, msg) не дало вам никаких преимуществ, пока вы не написали собственный класс для фильтров и не зарегистрируете их ... Простой синтаксис logback.xml не имеет специальных возможностей для работы с Marker (просто распечатайте их по
метке
1
Что вы считаете "особенным" в том, что представлено на logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki
@Ceki Спасибо за замечание! Это единственное место, где можно использовать маркеры?
gavenkoa
1
@Ceki Теперь, когда мы используем Elasticsearch, это способ отмечать особые события. Мы храним предопределенные маркеры в специальном классе для повторного использования. Это было не очевидно, когда вы просто использовали grepтекстовые журналы.
gavenkoa 05

Ответы:

118

Это переработанная версия моего ответа на вопрос « Лучшие практики использования маркеров в SLF4J / Logback ».

Маркеры можно использовать для раскрашивания или маркировки одного отчета журнала. Что вы будете делать с этими цветами, то есть маркеры, полностью зависит от вас. Однако для использования маркеров обычно характерны два шаблона.

  1. Запуск : Некоторому приложению может быть дано указание совершить действие при наличии определенного маркера. Например, SMTPAppenderможно настроить отправку электронного письма всякий раз, когда событие записи в журнал отмечено NOTIFY_ADMINмаркером, независимо от уровня журнала. См маркер на основе запуска в документации Logback. Вы также можете комбинировать уровни журнала и маркеры для запуска.

  2. Фильтрация : маркеры очень полезны для выделения определенных ценных отчетов журнала. Например, вы можете раскрасить / пометить все журналы, связанные с сохранением (в различных и нескольких файлах классов), цветом «DB». Затем вы можете отфильтровать "DB": отключить ведение журнала, за исключением операторов журнала, отмеченных DB. См. Главу о фильтрах в документации по логбэку для получения дополнительной информации (поиск MarkerFilter). Обратите внимание, что фильтрацию по маркерам можно выполнять не только с помощью логбэка, но и с помощью инструментов анализа логов.

До появления маркеров для достижения аналогичного поведения у вас была возможность 1) использовать настраиваемые уровни 2) использовать измененные имена регистраторов. SLF4J API в настоящее время не поддерживает настраиваемые уровни. Что касается варианта 2, то можно использовать суффикс (или префикс) в именах регистраторов, если необходимо изменить один или два регистратора. Такой подход становится непрактичным, как только 3 или более регистратора необходимо «подклассифицировать», поскольку связанные файлы конфигурации становятся неуправляемыми.

Даже если один маркер уже может быть очень полезным, следующая версия SLF4J, то есть версия 2.0, позволит использовать несколько маркеров для каждого оператора журнала.

Ceki
источник
1
Также может быть использован в SiftingAppender для discrimnator stackoverflow.com/a/30552012/1012497
nikli