Image

exceptions thrown

Итак, постараюсь быть краток и следовать какой то логической цепочки в то время как излагаю свои мысли. Допустим мы пишем webapp, для того что делать логи мы используем Log4j. Для того чтобы не перенастраивать логгер каждый раз когда надо что то записать создаем класс в котором собираем все в кучку, при этом данный класс следует модели singleton. Базово делаем вот так:



public class LogUtilsx {

  private static LogUtilsx lu = null;

  private Logger logger = null;

  private boolean configure = false;

  

  public static LogUtilsx getInstance () throws ClassCannotBeConfiguredException, NotConfiguredClassException {

    if (LogUtilsx.lu == null)

      LogUtilsx.lu = new LogUtilsx ();

    return LogUtilsx.lu;

  }

  private LogUtilsx () throws NotConfiguredClassException, ClassCannotBeConfiguredException {

    this.configure ();

  }

  public Logger getLogger () {

    return this.logger;

  }

  public void configure () throws NotConfiguredClassException, ClassCannotBeConfiguredException {

    PropertyConfigurator.configure (PropUtils.getInstance().getAll());

    this.logger = Logger.getLogger ("MyLogger");

    this.configure = true;

  }

}




Методы getInstance() и внутренний конструктор думаю объяснять не надо. Идем дальше, как видно при создании объекта зовется метод configure(), который собственно этот синглтон конфигурирует. И вот тут возникают проблемы. Где то по ходу проекта используется класс PropUtils который собственно является контейнером для всех пропертис, имеется в виду вообще всех, глобально. Properties для Log4j находятся там же. Так вот, если юзер что то напутал в properties файле то данный класс, который тоже синглтон и который тоже должен быть скофигурирован выкидывает exceptions, которые перебрасываются наверх в нашем классе. Отсюда вытекает проблема, которую требуется решить, если в какой то момент нужно позвать логгер то делаем соответственно:
Logger loggger = LogUtils.getInstance().getLogger()
Естественно as is это не скомпилируется, надо использовать try-catch, что есть говно, ибо это а) чрезывчайно гиморно б) не совсем логично использовать данную конструкцию внутри еще одного try-catch, а ведь это ситуация где оное имеет наиболее эффективное применение.
Вот вроде все сказал, любые комментарии по теме приветствуются. Кстати у меня самого, кроме создания вспомогательного логгера с какими то минимальными настройками "по умолчанию", идей на этот счет пока нет.