Опубликовано: 17.04.2021 Последнее обновление: 26.04.2024
Оригинальный текст изображения.
Несмотря на большое количество статей о работе с логами, принципах написания и использования, вопросы продолжают возникать:
Для того, чтоб понять, а нужны ли логи, стоит ответить на единственный вопрос: "Для кого логируем?"
Можно выделить следующих потребителей логов:
Устранение проблемы с использованием подробной информации, полученной из логов.
Оперативное реагирование на проблему с использованием логов и, возможное, решение проблемы без обращения к разработке.
Пресечение противоправных действий как со стороны сотрудников, так и со стороны пользователей приложения.
Исходя из понимания того, для кого логируем - приходим к пониманию - как логируем.
Самый подробный уровень логирования.
Разработка
Вся доступная информация в момент логирования:
logger.trace(
"method='register' action='start new user register' ip={} username={} action={} head={} response={} requestId={}",
ip, username, action, head, response, requestId
)
Служба поддержки. Не использует.
Бизнес. Не использует.
Служба безопасности. Не использует.
Подробный диагностический уровень.
Разработка
Значение переменных критичных для системы:
logger.debug(
"method='register' action='start new user register' username={} action={} requestId={}",
username, action, requestId
)
Вход и выход из функции:
logger.debug(
"method='register' action='start new user register' username={} action={} requestId={}",
username, action, requestId
)
logger.debug(
"method='register' action='register new user success' username={} action={} requestId={} result={}",
username, action, requestId, result
)
Выполнение условий перехода по веткам и сам переход:
logger.debug(
"method='register' action='user authenticated' isAuthenticated={},
isAuthenticated
)
Служба поддержки. Не использует.
Бизнес. Не использует.
Служба безопасности
Данные запросов, такие как IP, пользователь, устройство:
logger.debug(
"method='register' action='user authenticated' isAuthenticated={} ip={} agent={},
isAuthenticated, ip, agent
)
Информация о важных шагах работы приложения.
Разработка
Инициализация функционала:
logger.info(
action="'subscription service enabled'"
)
Доступность функционала:
logger.info(
action="'sms service avalible'"
)
Нормальное завершение работы:
logger.info(
action="'synchronization service stopped'"
)
Служба поддержки
Пользуется данными для разработки.
Если есть особенные пожелания логирования:
logger.info(
action='subscription service enabled. User who launched={}'", username
)
Бизнес
Обращение к функциональности:
logger.info(
action='sms service usage'"
)
Работоспособность функциональности:
logger.info(
action='sms service available and usage'"
)
Завершение работы функциональности:
logger.info(
action='sms service stopped because engineering works'"
)
Служба безопасности
Обращение к функциональности авторизованным пользователем или нет:
logger.info(
action='service was called not authorized user'"
)
В случае некорректного поведения или состояния приложения, которое не влечёт за собой отказ в работоспособности, но в перспективе может повлечь за собой негативные последствия. Требуется внимание со стороны сопровождения.
Разработка
Детализация сообщения с состоянием приложения и причиной возникновения некорректного поведения:
logger.warn(
method='showInfo' action='name for user must not be null. " +
"Perhaps the data was not added to the questionnaire' username={}", username"
)
Служба поддержки
Детализация сообщения в человеко-понятном виде с причинами возникновения некорректного поведения и описанием (если возможно) устранения причин такого поведения:
logger.warn(
method='showInfo' action='name for user must not be null. " +
"Perhaps the data was not added to the questionnaire' username={}", username"
)
Бизнес. Не использует.
Служба безопасности
Детализация сообщения в виде добавления важных для безопасности значений (авторизован ли пользователь, IP, агент и т.д):
logger.warn(
method='showInfo' action='name for user '{}' must not be null. " +
"Perhaps the data was not added to the questionnaire. Last edited username ={}'", username, editedUsername
)
В случае некорректного поведения приложения, которое нарушает привычный поток обработки и требует немедленного вмешательства для восстановления работоспособности.
Разработка
Подробная детализация сообщения с состоянием приложения и причиной возникновения некорректного поведения:
logger.error(
method='editProfile' action='it is impossible to edit the profile. The user's service is not available'" +
"url={} username={}", url, username
)
Служба поддержки
Подробная детализация сообщения в человеко-понятном виде с причинами возникновения некорректного поведения и описанием (если возможно) устранения причин такого поведения:
logger.error(
method='editProfile' action='it is impossible to edit the profile. The user's service is not available'" +
"url={} username={}", url, username
)
Бизнес. Могут быть интересны причины инцидента.
Служба безопасности
Детализация сообщения в виде добавления существенных для безопасности значений (авторизован ли пользователь, IP, агент и т.д):
logger.error(
method='editProfile' action='the action cannot be performed because no agent is specified. There is a possibility of unauthorized access.'" +
"ip={}", ip
)
Правильная работа с логами - такая же важная часть разработки приложения, как и написание кода.
Помните - "Много логов - не бывает".
А как в вашей команде обстоят дела с логами?
Успехов!
© 2020 - 2025