Когда я начал свой путь в области компьютерных наук 3 года назад, будучи студентом бакалавриата CS, я начал изучать основы программирования на python (операторы атрибуции, условия, циклы, функции, рекурсия и другие). Затем я перешел на Java с помощью ООП (объектно-ориентированного программирования), и за все это время я никогда не использовал ведение журнала для целей отладки или мониторинга… Я бы всегда использовал операторы печати. Только если бы я знал лучше, это сэкономило бы мне много времени.
Прежде чем перейти к деталям реализации, я дам краткий обзор ведения журнала и его уровней .
Уровни ведения журнала
Наиболее распространенными уровнями в системах ведения журнала являются Отладка , Информация , Предупреждение , Ошибка и Фатальный .
Отлаживать
Обычно это самый подробный уровень журнала. Это позволяет вам понять путь выполнения основного кода в определенных важных процессах. Как следует из названия, эти сообщения помогают отлаживать задачи, поскольку позволяют нам отслеживать, что происходит в коде.
Инфо
Этот уровень обычно используется для выделения того, когда что-то произошло. Он активен по умолчанию, в отличие от Debug. Обычно это используется как “утверждение” о том, что все работает гладко, и поскольку эти сообщения обычно содержат небольшие заметки, связанные с выполняемыми действиями, в конце дня информационные сообщения – это, по сути, просто шум.
Предупреждать
Он используется для сообщения о вредных ситуациях, которые недостаточно актуальны, чтобы требовать немедленных действий, и могут быть исправлены позже.
Ошибка
На уровне ОШИБОК регистрируются события ошибок, которые все еще могут позволить приложению продолжать работать, но все же требуют немедленного или близкого к немедленному ответа.
Роковой
Как указано в TutorialsPoint , сообщения фатального уровня используются для сообщения об очень серьезных ошибках, которые предположительно приведут к прерыванию работы приложения.
Ведение журнала Java
Пройдя обзор, давайте начнем с ведения журнала Java. Когда вы закончите чтение, вы будете знать, как подойти к ведению журнала в вашем исходном коде Java, а еще лучше, как изучить и использовать новую библиотеку в рамках вашего проекта.
Допущения
Ради сосредоточенности и простоты я собираюсь использовать IntelliJ IDEA и я также собираюсь предположить, что у вас уже есть Java JDK , установленный на вашем компьютере.
Я собираюсь использовать простой “фиктивный” проект, чтобы объяснить ведение журнала на java, но вы можете включить этот код и конфигурацию непосредственно в свой проект.
Структура моего проекта выглядит следующим образом:
Использование платформы ведения журнала
В этом руководстве я собираюсь использовать Apache Log4j 2 , потому что это широко используемый фреймворк, и он мне очень нравится, но есть множество других фреймворков ведения журнала Java (подробнее здесь ).
В этом проекте я использую Maven, поэтому, чтобы добавить log4j в проект, мне нужно добавить следующий XML в мой pom.xml
:
org.apache.logging.log4j log4j-api 2.13.3 org.apache.logging.log4j log4j-core 2.13.3
Настройка регистратора (другой подход)
В этом разделе я представляю вам подход, отличный от многих других руководств по настройке ведения журнала. Следуя мысли Роберта К. Мартина в Чистый код , я решил объяснить процесс обучения и настройки сторонней библиотеки с помощью обучающего тестирования. Как поясняет автор в книге, использование обучающих тестов для подхода к стороннему коду, который будет внедрен в ваш проект, является хорошей практикой, потому что:
- Вы можете протестировать возможности и особенности библиотеки в контролируемой среде с помощью серии объективных и точных экспериментов.
- Тесты, которые вы пишете в этом процессе обучения, являются хорошим инструментом для тестирования новых выпусков сторонних пакетов, где вы можете легко увидеть, изменилось ли что-то, что позволит вам принять обоснованное решение о том, обновлять версию пакета или нет.
Как бы то ни было, наше путешествие начинается. Первый шаг – добавить возможности тестирования в наш проект. Для этого нам нужно добавить этот XML в pom.xml
(Я собираюсь использовать JUnit 5):
org.junit.jupiter junit-jupiter-api 5.6.2 test org.junit.jupiter junit-jupiter-engine 5.6.2 test
Тестирование Поведения По Умолчанию
Далее, ничего не настраивая, мы протестируем наш сторонний пакет (log4j). Тесты, которые я написал, довольно просты, но их достаточно, чтобы протестировать основные возможности нашей платформы ведения журнала.
public class LogTest { private Logger logger; @BeforeEach public void init() { logger = LogManager.getLogger("TestLogger"); } @Test void testSimpleMessage() { String message = "Hello World!"; logger.trace(message); logger.debug(message); logger.info(message); logger.warn(message); logger.error(message); logger.fatal(message); } @Test void testFormattedMessage() { String formattedMessage = "Hello {}, this is my current grade {}!"; String word = "World"; double grade = 17.64; logger.trace(formattedMessage, word, grade); logger.debug(formattedMessage, word, grade); logger.info(formattedMessage, word, grade); logger.warn(formattedMessage, word, grade); logger.error(formattedMessage, word, grade); logger.fatal(formattedMessage, word, grade); } }
Эти тесты не потерпят неудачу, вместо этого они покажут нам, каково поведение нашего регистратора по умолчанию.
Вывод подразумевает используемый формат и какой верхний уровень включен по умолчанию ( ОШИБКА
).
Конфигурация
Сначала перейдите в окно инструментов “Проект” в IntelliJ и разверните папку, пока не найдете папку “ресурсы” (java -> src -> main), точно так же, как на изображении, которое я показал ранее.
Теперь создайте имя файла log4j2.properties
внутри этой папки.
После создания файла вставьте в файл следующие спецификации:
name = Log4j2PropertiesConfig appenders = console # configuration of console logging appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = %highlight{%-21d{yyyy-MM-dd HH:mm:ss} %-12c %-8level %m%n} # default root logging config rootLogger.level = debug rootLogger.appendRefs = stdout rootLogger.appenderRef.stdout.ref = STDOUT
Когда вы вставляете эти конфигурации, результат повторного запуска тестов – это тот, который вы можете увидеть ниже:
Некоторые детали:
имя
: просто указывает имя этого конкретного макета конфигурации.appenders
: имя различных компонентов appender (тех, которые эффективно записывают сообщение на какой-либо носитель).- Остальная конфигурация следует тому же принципу мышления, и более подробную информацию см. в разделе здесь .
Счастливого Обучения!
То, что я пытался показать вам сегодня, – это просто упрощенное введение в путь понимания использования и настройки ведения журнала с помощью log4j2 . Если вы хотите, вам еще многому предстоит научиться!
Вот несколько советов о том, что вы можете сделать:
- Узнайте, как иметь несколько приложений, каждое из которых имеет свой тип вывода (консоль, файл и т.д.).
- Узнайте, как настроить различные регистраторы, по одному для каждого уровня журнала.
- Поиграйте с опциями, доступными для записи “макет”.
- Узнайте о других способах настройки log4j.
Кроме того, как я уже сказал, существует множество вариантов фреймворков ведения журнала; когда вы почувствуете себя достаточно уверенно с log4j, попробуйте некоторые из них.
Оригинал: “https://dev.to/vascoalramos/get-started-with-java-logging-and-some-tips-to-easily-learn-new-libraries-4c83”