Development

Перегруженный журнал ошибок может лишить вас сна

(В оригинале – Verbose Logging Will Disturb Your Sleep)

У системы, запущенной в эксплуатацию, первым признаком наличия проблем является перегруженный лог. Вы понимаете, что я имею в виду – когда каждый клик мышью в нормальном процессе работы приводит к тому, что единственный лог системы записывается куча сообщений. Слишком детальное логирование столь же бесполезно, как и его отсутствие.

Если вы разрабатываете системы, подобные моим, то после того, как ваша работа заканчивается, начинается работа других людей. После запуска системы в эксплуатацию она, скорее всего, будет работать некоторое, иногда достаточно продолжительное время, если повезет. Как вы собираетесь узнавать о том, что что-то в системе не так, и что вы будете с этим делать?

Возможно, кто-то будет мониторить систему, возможно, вы это будете делать сами. В любом случае, логи скорее всего будут частью мониторинга. И если что-то поднимет вас посреди ночи, вы хотите быть уверены в том, что для этого была веская причина. Если моя система решила умереть, я хочу об этом знать. Но если это лишь небольшой сбой, я предпочту спокойно поспать до утра.

Для многих систем первым индикатором того, что что-то пошло не так, является запись сообщения в лог. Скорее всего, в лог ошибок. Сделайте так, чтобы с первого дня работы системы каждая запись в лог ошибок приводила к немедленному оповещению вас, даже посреди ночи. Если вы можете имитировать нагрузку во время тестирования, то чистый журнал ошибок – первый сигнал о том, что система достаточно устойчивая. Или же первое предупреждение для вас, если это не так.

Распределенные системы вносят в игру еще один уровень сложности. Вам нужно решить, что вы будете делать, если откажет удаленный компонент. Для распределенных систем такой отказ – это в порядке вещей. Учитывайте это, когда проектируете политику ведения лога ошибок.
В целом, лучший индикатор того, что с системой все хорошо – очень редкие низкоприоритетные события в логе. Я буду счастлив, если буду получать одно сообщение низкого приоритета на каждое значимое событие в приложении.

Перегруженный лог – это индикатор того, что систему будет сложно контролировать после запуска. Если вы не ожидаете того, что в журнале ошибок будет что-то появляться, то вам будет гораздо проще понять, что нужно делать, когда там что-то однажды появится.

Автор оригинала – Johannes Brodwall