The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Если не создавать экземпляр класса, где вызвать иниц. логгера?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Java)
Изначальное сообщение [ Отслеживать ]

"Если не создавать экземпляр класса, где вызвать иниц. логгера?"  +/
Сообщение от Sasha Corelinen on 23-Май-12, 21:58 
В 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. Откуда родился вопрос. Если логгер не инициализировать, то он в ответ на одинарный вызов сыпет в консоль порядка сотни дублей сообщения. Ок. Тогда можно конфиг. файл сделать, но голову сломал, как на всю программу сделать единственный централизованный файл конфига. Можно сделать как выше - "вшить" в код инит. в отдельном классе-хелпере. Но тогда вопрос, тот что выше.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Если не создавать экземпляр класса, где вызвать иниц. логгера?"  +/
Сообщение от Sasha Corelinen on 23-Май-12, 22:48 
"P.S. о повторах" не по теме. Он ошибочен. Повторы - отдельная тема иерархии логгеров и совпадения appender'ов.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Если не создавать экземпляр класса, где вызвать иниц. логгера?"  +/
Сообщение от 1 (??) on 24-Май-12, 10:11 
public clss A {
static {
  //static init code
}
}
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Если не создавать экземпляр класса, где вызвать иниц. логгера?"  +/
Сообщение от deadmustdie email on 24-Май-12, 12:24 
> public clss A {
>  static {
>   //static init code
>  }
> }

+1

Вообще же по классике в один из основных jar-ников приложения кладут файл настроек логгера.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Если не создавать экземпляр класса, где вызвать иниц. логгера?"  +/
Сообщение от Sasha Corelinen on 12-Июн-12, 22:42 
> Вообще же по классике в один из основных jar-ников приложения кладут файл
> настроек логгера.

Да. В Eclipse при отладке и т.п. надо делать это автоматически. Не знаю как.

Нашёл вариант: упаковать файл в jar, и этот jar поместить в build path или подключить как библиотеку. В терминах Eclipse.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру