Мы уже некоторое время используем комбинацию SLF4J + Logback в нашем проекте и вполне довольны этим, но наша стратегия ведения журнала довольно проста, с использованием простых средств ведения журнала на основе классов и без всяких причуд вроде MDC или маркеров.
Я хочу знать, действительно ли кто-нибудь в сообществе использует эти функции и как они используются для улучшения ведения журнала / фильтрации.
Меня особенно интересует, где, почему и как можно использовать [1] маркеры для ведения журнала. Они кажутся мне довольно удобной функцией для добавления семантического контекста в ведение журнала - например, хотя класс может обрабатывать несколько проблем, можно использовать маркеры конкретных задач / проблем для различения операторов журнала.
Какие могут быть передовые практики, соглашения или стратегии для создания и использования маркеров при регистрации?
Обновление: я думаю, что мне действительно нужно, это не столько зачем использовать маркеры, сколько как часть - есть ли некоторые хорошие практики именования маркеров (например, использование обычного текста с пробелами или именами стилей ключевых слов, разделенных тире / подчеркиванием / пунктуацией ), если будет какой-то пул «стандартных имен», именующий материал на основе бизнес-функций. Вопросы, которые я, вероятно, смогу решить для себя, но если я хочу использовать эти функции систематически и представить их команде разработчиков, имеет смысл иметь некоторый формализуемый набор руководящих принципов ...
[1] - Спрашивая, как использовать маркеры, я на самом деле не спрашиваю, как использовать API (это действительно довольно просто) - я скорее имею в виду более общий уровень того, как можно было бы настроить ведение журнала с использованием маркеров последовательно
Во-первых, MDC.
MDC действительно полезен в среде, где у вас есть одна «сущность», связанная с некоторым поведением. Типичный пример: пользователь взаимодействует с веб-приложением. Итак, допустим, у вас есть много пользователей, которые возятся с вашим веб-приложением. Используя MDC, вы можете легко отслеживать их без особых хлопот. Упрощенный пример:
Здесь вы используете MDC в двух местах: для имени пользователя и для идентификатора сеанса. Таким образом, вы можете легко использовать grep для сеанса одного пользователя, чтобы увидеть все, что он делал.
Во-вторых, маркеры.
Маркеры обычно используются для «особых» обстоятельств, таких как отправка электронной почты администратору в случае серьезных критических ошибок. Не все ошибки всегда попадают в одну категорию; с некоторыми нужно поступать соответствующим образом.
Или, когда пользователь выходит из вашей службы, он обычно попадает в журнал INFO, но вы также можете использовать маркер для таких экземпляров, если вы хотите, чтобы такие события, как это, помещались в отдельный файл журнала, чтобы вы могли его отслеживать. проще для статистического сбора пользователей вышедших.
Практическое правило:
источник
Маркеры можно использовать для раскрашивания или пометки одного отчета журнала. Что делать с этими цветами, то есть маркерами, зависит только от вас. Однако два шаблона, кажется, являются общими (первый более распространен, чем второй) для использования маркеров.
Запуск : Некоторому приложению может быть дано указание выполнить действие при наличии определенного маркера. Например,
SMTPAppender
можно настроить отправку электронного письма всякий раз, когда событие регистрации помеченоNOTIFY_ADMIN
маркером, независимо от уровня журнала. См маркер на основе запуска в документации Logback. Вы также можете комбинировать уровни журнала и маркеры для запуска.Фильтрация : вы можете, например, раскрасить / пометить все журналы, связанные с сохранением (в различных и нескольких файлах классов), цветом «DB». Затем вы можете отфильтровать «DB»: отключить ведение журнала, за исключением операторов журнала, отмеченных DB. См. Главу о фильтрах в документации по логбэку для получения дополнительной информации (поиск MarkerFilter).
источник
В качестве дополнения, если вы используете logstash и включили ведение журнала json, есть еще одно потенциальное использование Marker - для регистрации переменных для связи с конкретным сообщением журнала. Это более согласованно и проще для анализа, чем включение в тело сообщения. Очень полезно, если подходит для вашего случая использования.
Подробности здесь:
https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event
источник