Библиотека логирования Log4j

В этой статье мы изучим такую библиотеку логирования для JVM-языков, как Log4j. Но прежде чем говорить о Log4j, давайте выясним, что вообще такое логирование и для чего оно нужно.

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

БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"

Вот некоторые ключевые аспекты логирования:

  • Отладка. Разработчики используют логи для отслеживания хода выполнения кода, выявления проблем и их отладки. Изучая логи, разработчики могут получить представление о состоянии приложения, последовательности операций и возникших ошибках.
  • Мониторинг и анализ. Логи ценны для мониторинга производительности и работоспособности приложения в производственной среде. Они помогают выявить “узкие места”, отследить использование ресурсов и предоставить информацию, необходимую для оптимизации производительности.
  • Безопасность. Логирование необходимо для аудита безопасности и обнаружения потенциальных угроз. События, связанные с безопасностью, такие как попытки входа в систему, сбои авторизации или другие подозрительные действия, могут регистрироваться в логах, что помогает выявлять и реагировать на случаи угрозы безопасности.
  • Соответствие требованиям. Приложения многих отраслей подчиняются нормативным требованиям, которые предписывают записывать и сохранять определенные события. Ведение журналов помогает соответствовать стандартам и обеспечивает аудиторский след деятельности системы.
  • Устранение неполадок. Когда пользователи сталкиваются с проблемами в работе приложения, службы поддержки могут использовать логи для диагностики основной причины и анализа последовательности событий, приведших к возникновению неполадки.

А теперь приступим непосредственно к изучению Log4j.

Log4j (сокращенно от Apache Log4j) – это утилита логирования на базе Java, обеспечивающая гибкую и масштабируемую структуру для протоколирования в Java-приложениях. Она является частью большого проекта Apache Logging Services Project компании Apache Software Foundation. Отличительными чертами Log4j являются: эффективност, настраиваемость и масштабируемость.

Основные возможности Log4j включают:

  • Уровни логирования. Log4j поддерживает различные уровни логирования, такие как DEBUG, INFO, WARN, ERROR и FATAL. Разработчики могут выбрать подходящий уровень в зависимости от серьезности сообщения.
  • Иерархическое логирование. Логгеры в Log4j организованы иерархически, что позволяет разработчикам контролировать детализацию вывода логов. Такая иерархическая структура позволяет более тонко контролировать отображение сообщений логов.
  • Аппендеры. Log4j использует концепцию аппендеров для определения места вывода сообщений. Аппендеры могут быть настроены на отправку сообщений логов в различные места назначения, такие как файлы, консоль, удаленные серверы или пользовательские места назначения.
  • Макеты. Log4j позволяет разработчикам определять формат сообщений логов с помощью макетов. Это позволяет настраивать содержание и внешний вид сообщений.
  • Конфигурация. Log4j поддерживает конфигурацию через XML, JSON или файлы свойств. Это позволяет легко настраивать параметры логирования без изменения кода приложения.
  • Производительность. Log4j разработан для обеспечения эффективности, минимизируя влияние на производительность приложения. Он включает такие функции, как асинхронное логирование, для дальнейшего повышения производительности.

В Logj4 существуют различные уровни логов. Уровни логов – это категории, которые указывают на важность регистрируемых сообщений. Они используются для управления степенью подробности и важности регистрируемой информации. Ниже приведены основные уровни, используемые в Log4j, и их значения:

Уровни логирования

TRACE:

  • Самый низкий уровень
  • Используется для регистрации очень детальной информации
  • Обычно используется для подробной трассировки потока приложений

DEBUG:

  • Используется для регистрации подробной информации о работе приложения
  • Полезен на этапах разработки и отладки

INFO:

  • Используется для предоставления информации пользователю во время текущей работы
  • Указывает на значимые события и состояния системы

WARN:

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

ERROR:

  • Указывает на наличие ошибок
  • Записи в журнале этого уровня указывают на то, что часть или все приложение функционирует не так, как ожидалось

FATAL:

  • Указывает на критические ошибки
  • Записи в журнале этого уровня обычно указывают на ситуацию, когда приложение аварийно завершает работу или сталкивается с критической ошибкой, препятствующей дальнейшей работе

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

Приведем один пример, после которого все станет ясно.

Добавим зависимости Logj4 в файл pom.xml:

<dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.12.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.12.4</version>
        </dependency>
</dependencies>

И создадим класс с именем Log4jExample:

Создание класса с именем Log4jExample

Далее в файле ресурсов создадим файл с именем log4j2.xml:

Создание файла с именем log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
        </Console>
        <RollingFile name="InfoFile" fileName="log/mobileLogs.log"
                     filePattern="${logPath}/%d{YYYYMMddHHmmss}-fargo.log">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console" level="Trace" />
        </Root>
    </Loggers>
</Configuration>

В данном примере наш Root level = “trace”. Это означает, что мы будем видеть все уровни в последовательности trace->debug->info->warn->error->fatal, так как trace – самый низкий из них.

Наконец, перейдем к нашему классу:

Импорт LogManager и Logger из библиотеки Log4j

На этом этапе импортируем LogManager и Logger из библиотеки Log4j.

В строке 7 создается объект logger. Этот объект будет использоваться для выполнения операций логирования для класса Log4jExample.

Запускаем наш код:

Как видно, в файле Log4jExample была создана папка с именем log. Внутри этой папки находится файл с именем mobileLogs. Теперь вы можете спросить: “Почему имя файла mobileLogs?”. Ответ заключается в том, что в нашем xml-файле в строке 7 (опять 7, да) мы задаем это имя. По сути оно может быть любым.

Например, мы хотим видеть только фатальные сообщения в проекте. Для этого мы можем изменить наш xml-файл. Если мы изменим строку 18 следующим образом: <Root level=”fatal”>, то будем видеть только логи уровня FATAL. Кроме того, просматривая логи, мы сможем увидеть, когда произошло фатальное событие, в каком классе и какой строке.

Запустим код еще раз:

Надеемся, эта статья помогла вам расширить знания о логировании и библиотеке Log4j.

Перевод статьи «Log4j».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *