У меня есть код, который является автономным java-приложением, состоящим из 30 классов.Использование того же log4j logger в автономной java-приложении
Большинство из них наследуется от некоторых других базовых классов.
Каждый класс имеет этот метод, чтобы получить и использовать log4j регистратор
public static Logger getLogger() {
if (logger != null) return logger;
try {
PropertyUtil propUtil = PropertyUtil.getInstance("app-log.properties");
if (propUtil != null && propUtil.getProperties() != null)
PropertyConfigurator.configure(propUtil.getProperties());
logger = Logger.getLogger(ExtractData.class);
return logger;
} catch (Exception exception) {
exception.printStackTrace();
}
}
А) Мой вопрос, является ли это должно быть переработан к некоторому общему регистратору, который инициализируется один раз и используется по всем классам? Это лучшая практика?
B) Если да, как это можно сделать? Как я могу пропустить журнал?
C) Это фактически используется в коде не как Logger.debug()
, а getLogger().debug()
. Каково влияние этого с точки зрения производительности?
Возможно, я ошибаюсь, но я не думаю, что PropertyConfigurer.configure() является потокобезопасным, поэтому, если ваш код многопоточен, вызов этого метода getLogger() из нескольких потоков может вызвать проблемы. Лучше всего использовать стандартное использование log4j, как описано Péter Török. –
@matt b - спасибо за указание. я буду проверять использование, так как этот код, возможно, выполнен из нескольких потоков – shinynewbike