A) в Log4J у вас есть иерархии регистраторов, а не один регистратор.Обычно это сводится к одному регистратору на класс, где регистраторы идентифицируются по имени класса.Регистратор инициализируется следующим образом:
private static final Logger logger = Logger.getLogger(MyClass.class);
Это хорошая практика, так как он позволяет вам точно настроить поведение журналирования для модулей (пакетов) или даже отдельных классов в вашем приложении.Таким образом, вы можете отключить ведение журнала для некоторых пакетов, войти на уровне INFO в других и войти на уровне DEBUG для некоторых критических классов, например, когда вы хотите поймать ошибку.
B) Однако, если вы хотите один регистраторвезде, просто используйте корневой логгер в каждом классе:
private static final Logger logger = Logger.getLogger();
C) для вызовов не слишком сложных методов, разница в производительности, вероятно, незначительна, так как JIT-компилятор в любом случае агрессивно встроит вызовы.Для сложных методов это скорее открытый вопрос.
Обратите внимание, что метод, который вы показываете, выполняет ненужную работу, загружая конфигурацию регистратора - это делается автоматически Log4J, если вы называете свой файл конфигурации log4j.properties
и помещаете его впуть к классамТем не менее, даже если вам нужно использовать нестандартное имя файла конфигурации, вы все равно можете загрузить конфигурацию Log4J в одном месте при запуске и опустить отложенную загрузку регистратора.Тогда то, что осталось, это
private static final Logger logger = Logger.getLogger(ExtractData.class);
private static Logger getLogger() {
return logger;
}
, и компилятор, несомненно, будет указывать это.Тем не менее, вы можете захотеть сохранить getLogger
, чтобы избежать изменения большого количества кода вызывающего абонента.
Обратите внимание, что getLogger
необязательно быть public
, поскольку все классы должны иметь свой собственный регистраторссылка в любом случае.