В Java классе все методы-функции static. Т.к. static, то нет смысла в коде специально своими руками создавать экземпляры этого класса, сразу можно вызывать - ИмяКласса.имяМетода().В методах вызывается log4j. Log4j положено инициализировать. Можно инициализацию вызвать в конструкторе, но ведь экземпляр-то класса не создаётся, и потому конструктор не бывает вызван, и потому инициализация оттуда не вызывается без создания нового экземпляра.
Выходит: в каждый static метод надо незабывать ставить в начале инициализацию логгера. Это даёт иниц. логгера, но можно забыть вставить эту инит.строку.
Как бы организовать автоматичекую инициализацию в единственном месте, и так, чтобы невозможно было забыть написать вызов этого Инит???
Пример кода:
class AClassName {
private static final Logger LOG = Logger.getLogger(AClassName.class); /* Не бывает вызван без создания экз.класса.
*/
public VCardSamsungHelper() {
LoggerHelper.initLogger(LOG);
}
/* Метод ниже можно вызывать без специального создания экз.класса.
* Например:
* AClassName.doSomething();
*/
public static void doSomething () {
// Нужно в каждый метод ставить иниц.:
// ---> LoggerHelper.initLogger(LOG);
// Вызов логгера.
LOG.info("Строчка в журнал.")
}
}
Если нужно, то вот LoggerHelper, но он напрямую не касается вопроса:
public class LoggerHelper { public static void initLogger(Logger log) {
log.setLevel(Level.INFO);
ConsoleAppender ca = new ConsoleAppender(new PatternLayout("%d{ISO8601} [%5p %c{1}:%L] %m%n"));
ca.setTarget("System.out");
log.addAppender(ca);
}
}
P.S. Откуда родился вопрос. Если логгер не инициализировать, то он в ответ на одинарный вызов сыпет в консоль порядка сотни дублей сообщения. Ок. Тогда можно конфиг. файл сделать, но голову сломал, как на всю программу сделать единственный централизованный файл конфига. Можно сделать как выше - "вшить" в код инит. в отдельном классе-хелпере. Но тогда вопрос, тот что выше.