Я отвечаю на это исходя из компонентно-ориентированной архитектуры, где организация может использовать множество компонентов, которые могут полагаться друг на друга. Во время распространяющегося сбоя уровни ведения журнала должны помочь определить, какие компоненты затронуты, а какие являются основной причиной.
ОШИБКА - У этого компонента произошел сбой, и причина считается внутренней (любое внутреннее, необработанное исключение, сбой инкапсулированной зависимости ... например, база данных, пример REST. получил ошибку 4xx из зависимости). Вытащи меня (сопровождающего этого компонента) из постели.
WARN - Сбой этого компонента, как считается, вызван зависимым компонентом (пример REST будет состоянием 5xx из зависимости). Уберите тех, кто поддерживает компонент ТО, с кровати.
ИНФОРМАЦИЯ - Все остальное, что мы хотим передать оператору. Если вы решите регистрировать счастливые пути, тогда я рекомендую ограничить до 1 сообщения журнала за значительную операцию (например, за входящий HTTP-запрос).
Для всех сообщений журнала обязательно регистрируйте полезный контекст (и отдавайте предпочтение тому, чтобы сделать сообщения удобочитаемыми / полезными, а не имеющими стопки "кодов ошибок")
- DEBUG (и ниже) - не должен использоваться вообще (и, конечно, не в производстве). В процессе разработки я бы посоветовал использовать комбинацию TDD и Debugging (при необходимости), а не загрязнять код с помощью операторов журнала. В производстве должно быть достаточно вышеуказанного ведения журнала INFO в сочетании с другими показателями.
Хороший способ визуализации вышеперечисленных уровней ведения журнала - представить набор экранов мониторинга для каждого компонента. Когда все работает хорошо, они зеленого цвета, если компонент регистрирует ПРЕДУПРЕЖДЕНИЕ, тогда он станет оранжевым (янтарным), если что-либо регистрирует ОШИБКУ, то он станет красным.
В случае инцидента один компонент (основная причина) должен иметь красный цвет, а все затронутые компоненты должны быть оранжевого / желтого цвета.