Logger в Java: следует ли объявлять в верхнем регистре?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

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

Java
Скопировать код
// Логгеры — это функционал, требующий удобочитаемости.
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
Кинга Идем в IT: пошаговый план для смены профессии

Верхний или нижний регистр?

В Java принято обозначать верхним регистром неизменяемые константы, которые компилируются и остаются статичными на протяжении всего исполнения программы.

Java
Скопировать код
// Стабильность как скала.
public static final String CONSTANT_NAME = "ImmutableValue";

Однако, объект типа Logger изменяем: его состояние может меняться в течение работы приложения, что отличает его от «скальных» констант.

Понимание изменяемости и неизменяемости

Статические финальные поля можно разделить на две категории: неизменяемые и изменяемые.

  • Неизменяемые: к ним относятся строки и примитивы, написание которых принято в верхнем регистре UPPERCASE.
Java
Скопировать код
// Максимальное количество соединений неизменно, как количество посетителей в баре вечером пятницы.
public static final int MAX_CONNECTIONS = 50;
  • Изменяемые: к ним относится Logger, который использует camelCase.
Java
Скопировать код
//... логгеры ценим на вес золота – со временем они только улучшаются.
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

Инструменты и стандарты соблюдения

Автоматические инструменты для анализа кода, такие как PMD или Checkstyle, соблюдают принятые соглашения об именовании, что улучшает читаемость и поддерживаемость кода. Обычно они отдают предпочтение нижнему регистру при именовании изменяемых static final полей.

Учтите ваши фреймворки для логирования

Разные фреймворки для логирования могут предпочитать разное именование. SLF4J допускает использование как LOGGER, так и logger, в то время как Log4J или Util Logging от Java склоняются к logger.

Java
Скопировать код
// Стилистика SLF4J
// LOGGER — это имя для особых случаев, для тождественности
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);

// Стиль Log4J/Common logging
// Logger предпочитает более непосредственное обращение.
private static final Logger logger = Logger.getLogger(MyClass.class);

Поддерживая единый стиль

Важно сохранять единый стиль в проекте. Если вы привыкли видеть LOGGER, придерживайтесь этого, и наоборот, если привычнее использовать logger. Единообразие кода облегчает привлечение новых участников и поддержку проекта.

Если вы дополняете проект, где LOGGER и logger используются равноценно, важно ясно определить выбранное соглашение и руководствоваться им при кодировании.

Поиск стилевых руководств

Стилевые руководства содержат обобщенный опыт разработчиков, лучшие практики и рекомендации по написанию прозрачного кода.

Визуализация

Визуализация "Конвенции именования static final Logger":

Представьте свой код как комплект инструментов:

Markdown
Скопировать код
🧰 Комплект кода
  – 🔨 Молоток (Общий инструмент)
  – 🪛 Отвертка (Общий инструмент)
  – static_final_logger (Специализированный инструмент)

Правила именования:

Markdown
Скопировать код
- 🧰 Общие инструменты (переменные): `lowerCamelCase`
- 🔧 Специализированный инструмент (static final Logger): `LOGGER` или `logger`

Logger — это инструмент с узким спектром применения, который отвечает стандартным правилам именования Java:

Markdown
Скопировать код
🔧 ВЕРХНИЙ РЕГИСТР: для неизменяемых общих значений
🪓 нижний регистр: для изменяемых и часто используемых

Приоритетом должны являться читаемость и эстетика, а не строгие правила. 📘👁️

Полезные материалы

1) Соглашения по кодированию в языке Java: 9. Соглашения об именовании – Руководство Oracle по статическим final полям. 2) Should a "static final Logger" be declared in UPPER_CASE? – Stack Overflow – Взгляд сообщества на именование static final логгеров в Java. 3) FAQ SLF4J – Лучшие практики и ответы на вопросы об именовании логгеров SLF4J. 4) [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/) – Экспертные советы по именованию переменных и шаблонам в Java. 5) Logger (Java Platform SE 8 ) – Официальная документация по классу Logger в Java SE 8. 6) Java Style Guide by Google – Интерпретация Google стандартов стиля в Java. 7) @Log (and friends) – Упрощение работы с логированием в Java с помощью Project Lombok.