Это эффективно для получения регистратора из статического конечного инициализатора вариабели?

У нас есть много классов, который имеет некоторую кокетную табличку, как следующее:

private static Logger logger = null;

private static Logger getLogger() {
  if (logger == null) {
    logger = Logger.getLogger(MyClass.class);
  }
  return logger;
}

Идея состоит в том, что класс может Журнал отлаживает вещи в логин. Первый код, который необходимо зарегистрировать что-то, вызывает GetLogger (), и это приносит регистрацию в существование.

Есть пара вещей, которых я не люблю в этом шаблоне. Сначала Singleton GetLogger () не синхронизирован и синхронизирует его, в то время как правильно приведет к нагрузке на каждый последующий звонок без причины.

Я действительно хочу, чтобы иметь возможность конденсироваться только к этому:

private static final Logger logger = Logger.getLogger(MyClass.class);

, тогда я могу просто ссылаться на ведение журнала напрямую и даже не беспокоиться с Singleton Getter.

Проблема, которую я боюсь, это то, что, я приводя к этому, я вызываю этот регистратор, когда класс загружен, даже если регистратор никогда не вызывается. У меня есть 10 000+ нечетных классов, которые называют GetLogger (), так сколько экземпляров регистратора я на самом деле создаю здесь? Если мой Log4J Properties содержит несколько приложений, я просто ссылаюсь на тот же регистратор снова и снова, или я создаю 10000 из этих вещей?

7
задан locka 6 September 2011 в 11:58
поделиться