banner

Новости

Jun 01, 2023

Руководство по ведению журналов Java: основы

Арфан Шариф - 13 февраля 2023 г.

Ведение журнала помогает вам понять, как работает приложение или что пошло не так в случае сбоя. Эта информация может иметь решающее значение для целей отладки и аудита. Журналы отслеживают каждое событие во время выполнения программы, делая эти записи доступными для последующего анализа.

Однако эффективное ведение журнала не происходит автоматически. Разработчикам приложений необходимо обеспечить систематическую регистрацию важных данных в удобном для обработки формате.

Самый элементарный подход к ведению журнала — это простое использование операторов печати для отображения необходимых сведений о приложении. Конечно, это не идеальный подход по следующим причинам:

По всем этим причинам многие языки программирования, такие как Java, включают в себя специальные API и платформы для ведения журналов. В этом обзоре — первой части серии — мы познакомим вас с основными концепциями ведения журналов для приложений Java. Мы рассмотрим варианты ведения журналов, а затем рассмотрим несколько доступных платформ ведения журналов и их поддерживаемые конфигурации.

Ознакомьтесь с полной серией руководств по ведению журналов Java:

Как и все остальное в своей архитектуре, Java использует расширяемый и настраиваемый подход к ведению журналов. Платформа java.util.logging является опцией по умолчанию для всех функций, связанных с журналированием. Эта платформа предоставляет все основные функции, необходимые для ведения журналов, а также позволяет сторонним платформам расширять эти функции.

Эта структура ведения журналов включает в себя три основных модуля:

Еще одна концепция, на которую стоит обратить внимание, — это Фильтр. Фильтры позволяют разработчику перехватить LogRecord и решить, какой обработчик следует использовать. Хотя фильтры и не нужны для базового ведения журнала, они могут помочь удовлетворить сложные требования к ведению журнала.

Для платформы ведения журналов Java местом вывода по умолчанию является домашний каталог пользователя.

Хотя платформа ведения журналов Java предоставляет все основные функции, сторонние платформы могут многое сделать, комбинируя регистраторы, обработчики и форматтеры. Log4j 2 и Logback — две популярные платформы ведения журналов, каждая из которых имеет свои сильные стороны.

Поскольку для Java доступно множество платформ и их наборы функций постоянно развиваются, разработчики часто хотят попробовать что-то другое. Здесь в игру вступают абстракторы журналирования. Абстракторы позволяют разработчикам быстро переключаться между платформами ведения журналов, используя стандартную спецификацию функций. Simple Logging Facade для Java (SLF4J) — популярный абстрактор журналирования, поддерживающий платформу по умолчанию Log4j 2 и Logback. Протоколирование сообщества Apache — еще один такой абстрактор.

Однако важно отметить, что неисправленные версии Log4j 2 представляют критическую угрозу безопасности (CVE-2021-44228). Хотя и менее серьезные, но значительные риски безопасности также существуют для Log4j 1.x (CVE-2021-4104) и Logback (CVE-2021-42550). Поскольку использование абстракторов по-прежнему зависит от этих базовых инфраструктур, крайне важно, чтобы эти уязвимые библиотеки были должным образом обновлены и исправлены для безопасного использования.

Платформа по умолчанию использует файл конфигурации для определения деталей приложений, средств ведения журнала и макетов. По умолчанию этот файл присутствует в папке lib каталога установки Java, но это глобальный файл конфигурации.

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

Простой файл конфигурации будет выглядеть так:

Здесь конфигурация записывает события приложения в файл, который она создает в домашнем каталоге пользователя. Значение %h обозначает домашний каталог, а %u обозначает произвольный уникальный номер, который Java установит для различения файлов журналов.

Теперь, чтобы создать новый файл журнала из нового класса, вы можете использовать приведенный ниже фрагмент кода:

Когда и что регистрировать, полностью зависит от разработчика приложения и от стратегии журналирования, принятой командой приложения. Как только разработчик решает, какие события регистрировать, для регистрации требуется всего лишь одна строка кода. Вот пример:

ДЕЛИТЬСЯ