У нас есть много кода класса, у которого есть некоторый шаблон, подобный следующему:
private static Logger logger = null;
private static Logger getLogger() {
if (logger == null) {
logger = Logger.getLogger(MyClass.class);
}
return logger;
}
Идея состоит в том, что класс может регистрировать отладочную информацию в Logger.Первый код, который должен что-то регистрировать, вызывает getLogger (), и это приводит к появлению регистратора.
Есть несколько вещей, которые мне не нравятся в этом шаблоне.Сначала синглтон getLogger () не синхронизируется и не синхронизирует его, в то время как корректный вызов будет обременительным для каждого последующего вызова без какой-либо причины.
Я действительно хочу иметь возможность сжать его до следующего:
private static final Logger logger = Logger.getLogger(MyClass.class);
Тогда я могу просто ссылаться на регистратор напрямую и даже не беспокоиться об одноэлементном геттере.
Проблема, которую я боюсь, состоит в том, что, делая это, я вызываю создание Logger, когда класс загружается дажеесли регистратор никогда не вызывается.У меня более 10000 нечетных классов, все они вызывают getLogger (), так сколько экземпляров Logger я на самом деле создаю здесь?Если в моих свойствах log4j есть несколько дополнений, я просто снова и снова ссылаюсь на один и тот же регистратор, или я создаю 10 000 таких вещей?