В настоящее время я работаю над большим проектом с множеством приложений, которые общаются друг с другом.
Я и моя команда управляем и настраиваем приложения в системе с необходимыми исправлениями ошибок и запросами на изменение. Система интенсивно используется, и приложения используют большое количество журналов.
Типичный пример:
Клиент сообщений
public void save(final Message message) {
logger.info("Trying to save message: {}", message);
boolean result = false;
try {
result = messageService.save(message);
} catch (final MessageStoreException e) {
logger.warn("Unable to save message {}", message, e);
throw e;
} catch (final Exception e) {
logger.error("Unknown error when trying to save message!", e);
}
if (!result) {
logger.warn("Could not save the message!");
}
}
Служба сообщений
public boolean save(final Message message) throws MessageStoreException {
if (message == null) {
throw new IllegalArgumentException("message!");
}
final boolean result = messageStore.store(message);
if (result) {
logger.info("Stored: {}", message.getId());
} else {
logger.warn("Unable to store: {}", message.getId());
}
return result;
}
ПРИМЕЧАНИЕ. Я знаю, что пример кода не обеспечивает наилучшей обработки ошибок, но именно так он выглядит во многих приложениях, которыми мы управляем.
Конечно, это делает лог-файлы ОЧЕНЬ большими.
Я хотел бы включить уровень журнала info
и уровень журнала warn
в производственной среде и оставить включенным только уровень error
, чтобы файлы журналов содержали только непредвиденные ошибки, требующие внимания, и ничего больше.
Другим разработчикам эта идея не нравится, так как они не знают, как следить за «потоком приложения», когда просматривают лог-файлы в поисках багов и ошибок.
Я понимаю эти аргументы и чувствую, что мне нужен вклад сообщества.
Итак, что здесь лучше всего? Должны ли мы использовать уровни журнала информации/предупреждения в производственной среде или мы должны использовать только регистрацию ошибок? Или, может быть, оба?
Спасибо!
ОБНОВЛЕНИЕ: приложения работают на нескольких серверах, и в настоящее время мы регистрируем все в файл (обычно один файл журнала для каждого приложения с RollingFileAppender). Чтобы начать регистрацию в базе данных, требуется много работы, поэтому это не вариант.
ЗАКЛЮЧЕНИЕ. Ведение журнала — не совсем тривиальная задача. Мы не будем отключать уровни информации и предупреждений (это было довольно резкое действие), а вместо этого, как говорит @jgauffin, пройдем и проанализируем бизнес-правила для приложений, которые печатают «ненужные» сообщения журнала.
Дело закрыто! Спасибо всем за отличный вклад и хорошие советы.