У нас есть много классов, который имеет некоторую кокетную табличку, как следующее:
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 из этих вещей?