Logger в Java: следует ли объявлять в верхнем регистре?
Быстрый ответ
Обычно для объектов типа Java static final Logger используется нижний регистр. Это подчеркивает, что Logger по сути не является истинной константой, а служит изменяемым элементом приложения.
// Логгеры — это функционал, требующий удобочитаемости.
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
Верхний или нижний регистр?
В Java принято обозначать верхним регистром неизменяемые константы, которые компилируются и остаются статичными на протяжении всего исполнения программы.
// Стабильность как скала.
public static final String CONSTANT_NAME = "ImmutableValue";
Однако, объект типа Logger изменяем: его состояние может меняться в течение работы приложения, что отличает его от «скальных» констант.
Понимание изменяемости и неизменяемости
Статические финальные поля можно разделить на две категории: неизменяемые и изменяемые.
- Неизменяемые: к ним относятся строки и примитивы, написание которых принято в верхнем регистре
UPPERCASE
.
// Максимальное количество соединений неизменно, как количество посетителей в баре вечером пятницы.
public static final int MAX_CONNECTIONS = 50;
- Изменяемые: к ним относится Logger, который использует
camelCase
.
//... логгеры ценим на вес золота – со временем они только улучшаются.
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
Инструменты и стандарты соблюдения
Автоматические инструменты для анализа кода, такие как PMD или Checkstyle, соблюдают принятые соглашения об именовании, что улучшает читаемость и поддерживаемость кода. Обычно они отдают предпочтение нижнему регистру при именовании изменяемых static final полей.
Учтите ваши фреймворки для логирования
Разные фреймворки для логирования могут предпочитать разное именование. SLF4J допускает использование как LOGGER
, так и logger
, в то время как Log4J или Util Logging от Java склоняются к logger
.
// Стилистика 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":
Представьте свой код как комплект инструментов:
🧰 Комплект кода
– 🔨 Молоток (Общий инструмент)
– 🪛 Отвертка (Общий инструмент)
– static_final_logger (Специализированный инструмент)
Правила именования:
- 🧰 Общие инструменты (переменные): `lowerCamelCase`
- 🔧 Специализированный инструмент (static final Logger): `LOGGER` или `logger`
Logger — это инструмент с узким спектром применения, который отвечает стандартным правилам именования Java:
🔧 ВЕРХНИЙ РЕГИСТР: для неизменяемых общих значений
🪓 нижний регистр: для изменяемых и часто используемых
Приоритетом должны являться читаемость и эстетика, а не строгие правила. 📘👁️
Полезные материалы
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.