Ручное логирование и бизнес-события
Автоматическое логирование фиксирует системные события (HTTP-запросы, проверки доступа, ошибки), но не отражает внутреннюю бизнес-логику приложения.
Ручное логирование используется для фиксации действий и изменений, важных с точки зрения продукта — того, что видит или делает пользователь.
Назначение
Ручные логи применяются для описания событий, которые отражают состояние системы и бизнес-процессы:
- создание, изменение и удаление сущностей;
- начало и завершение процессов;
- изменение статуса или состояния;
- ошибки бизнес-операций;
- любые другие действия, значимые для анализа и аудита.
Такое логирование помогает понять, что происходило внутри системы, даже без включённой отладки или доступа к базе данных.
Правила оформления логов
Общие принципы
Сообщения должны быть:
- краткими — не длиннее одной фразы;
- человеко-читаемыми — понятными без знания кода;
- однозначными — описывать факт, а не процесс;
- на английском, в прошедшем времени, без артиклей и пунктуации.
Если операция завершилась неудачей, сообщение должно оканчиваться на failed.
Логирование выполняется после завершения операции — независимо от результата.
Примеры сообщений
Успешные операции:
Project createdContest launchedReview assignedEvaluation completed
Ошибки и неудачи:
Project update failedFile upload failedReview submission failed
Неправильные формулировки:
Creating project...— отражает процесс, а не факт.Contest ${id} launched— содержит шаблон и динамику.Project created successfully!— избыточно и разговорно.
Дополнительные данные
Контекст события передаётся отдельным объектом (details). Включайте только данные, которые
действительно помогают при анализе.
Рекомендации:
- Всегда указывайте идентификаторы (
project,contest,userи т. д.). - В идентификаторах избегайте суфиксов
id(пример:projectвместоprojectId). - Добавляйте причину (
reason) при ошибках или отказах. - Указывайте новое состояние (
status,result) при изменениях. - Не включайте чувствительные данные — токены, e-mail, пароли, персональные сведения.
Пример:
logger.log('Project created', { project: 42, user: 7 });
logger.error('Project update failed', { project: 42, reason: 'invalid_status' });
Бизнес-события
Что считается бизнес-событием
Бизнес-события описывают действия и изменения на уровне предметной области, например:
Contest launched— запуск конкурса;Project submitted— заявка подана;Review assigned— эксперт назначен;Evaluation completed— оценка завершена.
Все бизнес-события логируются на уровне
info(logger.log()), а ошибки бизнес-операций — на уровнеerror.
Длительные процессы
Для долгих операций допускается логирование двух фаз:
- начало —
<Action> started; - завершение —
<Action>(применяется обычные правила оформления сообщений).
Пример:
logger.log('File export started', { contest: 3 });
logger.log('File exported', { contest: 3, durationMs: 14250 });
logger.error('File export failed', { contest: 3, reason: 'timeout' });
Такой подход позволяет отслеживать прогресс и измерять длительность операций.
Зачем нужны бизнес-события
- Повышают прозрачность бизнес-процессов.
- Используются при анализе и аудите.
- Позволяют отследить жизненный цикл сущностей — от создания до завершения.
- Упрощают поиск причин ошибок на уровне сценариев пользователей.
Чек-лист перед ревью
- Контекст логгера задан.
- Сообщение короткое, на английском и в прошедшем времени.
- В
detailsуказаны идентификаторы и причина (если применимо). - Уровень логирования выбран корректно (
infoилиerror). - Лог не дублирует автоматические записи (HTTP, RBAC).
- Отсутствуют конфиденциальные данные.