Как реализовать ведение журнала в синглтоне enum? - PullRequest
6 голосов
/ 25 ноября 2010

Я использую синглтон enum, но реализация логирования проблематична.Это:

public enum Foo {
  INSTANCE;

  private final Logger log = Logger.getLogger(Foo.class.getName());

  ...
}

Создание регистратора таким образом, как я бы создал экземпляр регистратора для нормального класса Java, но, конечно, я получаю следующую ошибку:

Foo.java: illegal reference to static field from initializer 

Есть лиэквивалентный способ входа в enum singletons?

Ответы [ 3 ]

15 голосов
/ 25 ноября 2010

В ответ на ваш вопрос просто сделайте регистратор статичным ...

Кстати, я считаю стандартной практикой использование статического регистратора даже для экземпляров объектов. Другими словами, регистратор находится в классе; все объекты используют ссылки статического регистратора.

См

http://logging.apache.org/log4j/1.2/manual.html

В большинстве примеров использования логгера логгер является статическим свойством ...

4 голосов
/ 25 ноября 2010

Журнал динамически:

Logger.getLogger(Foo.class.getName()).info("log info");
2 голосов
/ 21 сентября 2011

Немного короче: используйте метод: logger (). Debug (...)

private static Logger logger()
{
    if(logger == null)
    {
        logger = Logger.getLogger(AnEnum.class);
    }

    return logger;
}

/** Logger **/
private static Logger logger;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...