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