Изучаю Spring, хочу вынести обработку и логгирование ошибок в отдельный класс: имеется ряд действий (в разных классах-контроллерах), результаты которых логгируются - удачно или нет они выполнились. В настоящее время это сделано так:
- базовый класс, который выполняет операции. если операция закончилась неудачно, то генерируется исключение с текстом сообщения об ошибке, иначе в лог выдается, что операция прошла успешно
if (item==null) {
throw new MyException(Message.ERROR_READING);
}
else
{
log.info(Message.SUCCESS_READING);
}
- статичный класс с текстом сообщений об ошибках и успешно выполненных действиях
public final class Message {
public static final String ERROR_READING = "Ошибка получения данных";
public static final String SUCCESS_READING = "Данные получены";
}
- класс исключения, которому при создании в свойство message передается текстовое сообщение для возникшей ошибки, в конструкторе исключения записывается в лог текст ошибки.
public class ItemException extends RuntimeException {
static Logger log = Logger.getLogger(App.class.getName());
public MyException(String message) {
super(message);
log.error (message);
}
}
Подскажите, пожалуйста, как улучшить архитектуру приложения (или я вообще не правильно размышляю):
1. Можно ли логгировать из конструктора (чтобы не дублировать каждый раз throw MyException с текстом ошибки и тут же следом лог с тем же текстом)?
2. Как быть с логом успешной операции, вроде сообщение об ошибке зашито в класс ошибки?
3. Делить ли класс Message на два с успешными или не успешными операциями?