Каков наилучший способ объявить переменную регистратора в java

Я просто хочу знать, какой лучший способ объявить переменную регистратора в 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 Я очень ценю, если кто-нибудь знает еще один лучший альтернативный способ объявить переменную looger.

Ответ 1

Я проголосую за 3

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Я думаю, что

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

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

Ответ 9

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