Какой лучший способ объявить переменную logger в Java - PullRequest
10 голосов
/ 06 января 2012

Я просто хотел узнать, как лучше объявить переменную logger в java. Ниже приведены некоторые декларации.

1> private static final Logger logger = Logger.getLogger(ServiceImpl.class);

2> private static Logger logger = Logger.getLogger(ServiceImpl.class);

3> private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class);

4> private static Logger LOGGER= Logger.getLogger(ServiceImpl.class);

P.S Я очень ценю, если кто-нибудь знает другие лучшие альтернативные способы объявить переменную более низкого уровня.

Ответы [ 9 ]

11 голосов
/ 06 января 2012

Все имена переменных в верхнем регистре являются IMO, потому что вы на самом деле не объявляете / не определяете константу, а статическую переменную.Имена в верхнем регистре больше подходят для «констант».Тем не менее, я бы лично пошел с первым подходом.

private static final Logger logger = Logger.getLogger(ServiceImpl.class);
5 голосов
/ 06 января 2012

Я голосую за 3

 private static final Logger LOGGER = Logger.getLogger(ServiceImpl.class);

Это final, поскольку вы не меняете его, и оно в верхнем регистре, так как это константа.

3 голосов
/ 06 января 2012

Я лично считаю, что private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class); - это лучший способ для семантики и производительности:

  • ваш журнал относится к классу, а не к его различным экземплярам, ​​поэтому вы должны сделать его статическим
  • он должен быть закрытым, потому что он используется классом внутри, он не является частью его открытого API
  • сделать последние два смысла имеет смысл, во-первых, потому что здесь говорится, что ссылка не изменится (как здесь), и во-вторых, потому что конечные переменные intance (особенно статические) могут быть лучше оптимизированы для скорости компилятором и JIT (подробнее здесь )
  • Называть все это заглавными буквами - это просто хорошее соглашение, вот как статические переменные объявляются в Java, это не обязательно, но делает код более читабельным
1 голос
/ 06 января 2012

Я бы выбрал первый вариант, но это вопрос личного выбора, я думаю.

0 голосов
/ 03 октября 2017

Никто здесь не использует LOG или log?Я нашел это лучше на практике.(Конечно, я не первый, кто работает в месте, где это стандарт, потому что @Log4j в Ломбоке также генерирует поле log. Конечно, это также статический финал. И кстати, это лучший способ объявитьэто поле ... добавить аннотацию @Log4j. Готово.)

0 голосов
/ 21 мая 2014

Хорошей практикой программирования является разделение одного объекта регистратора между всеми экземплярами определенного класса и использование одного и того же регистратора в течение всей программы, поэтому мы используем static и final для регистраторов.

Не рекомендуется использовать несколько регистраторов (плохая практика ведения журнала), а не уровни ведения журнала.

Я думаю, что

private static final Logger logger = Logger.getLogger(ServiceImpl.class);

- лучший вариант.

0 голосов
/ 05 октября 2012

Я бы рекомендовал не использовать такую ​​переменную в каждом классе, а вместо этого делегировать эту работу статической служебной оболочке вокруг slf4j, начиная с jcabi-log :

Logger.debug(this, "some variable = %s", value);

Также проверьте этот пост: http://www.yegor256.com/2014/05/23/avoid-java-static-logger.html

0 голосов
/ 06 января 2012

В моем понимании руководства по стилю java лучше всего использовать 'logger'.'LOGGER' будет для определенной константы.

Более того, использование 'final' должно сделать это немного быстрее.

Таким образом # 1.

0 голосов
/ 06 января 2012

Первый лучше. Я предпочитаю, чтобы регистратор был final и static ....

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