Log4j - Log4j

Apache Log4j
Apache Log4j Logo.png
Разработчики) Фонд программного обеспечения Apache
изначальный выпуск 8 января 2001 г . ; 20 лет спустя  ( 2001-01-08 )
Стабильный выпуск
2.14.1 / 6 марта 2021 г . ; 9 дней назад  ( 2021-03-06 )
Репозиторий Репозиторий Log4j
Написано в Ява
Операционная система Кроссплатформенность
Тип логирование
Лицензия Лицензия Apache 2.0
Интернет сайт ведение журнала .apache .org / log4j / 2 .x /

Apache Log4j - это утилита ведения журнала на основе Java . Первоначально она была написана Ceki Gülcü и является частью сервиса протоколирования Apache проекта Apache Software Foundation . Log4j - одна из нескольких платформ ведения журналов Java .

С тех пор Gülcü начал проекты SLF4J и Logback с намерением предложить преемника Log4j.

Команда Apache Log4j создала преемника Log4j 1 с номером версии 2. Log4j 2 был разработан с упором на проблемы Log4j 1.2, 1.3, java.util.logging и Logback, а также устраняет проблемы, которые возникли в этих средах. Кроме того, Log4j 2 предлагает архитектуру плагинов, которая делает его более расширяемым, чем его предшественник. Log4j 2 не имеет обратной совместимости с версиями 1.x, хотя доступен «адаптер».

5 августа 2015 года комитет по управлению проектами Apache Logging Services объявил, что срок службы Log4j 1 подошел к концу и пользователям Log4j 1 рекомендуется перейти на Apache Log4j 2.

Apache Log4j 2

Apache Log4j 2 является преемником Log4j 1, который был выпущен как версия GA в июле 2014 года. Фреймворк был переписан с нуля и основан на существующих решениях для ведения журналов, включая Log4j 1 и java.util.logging. Основные отличия от Log4j 1:

  • Повышенная надежность. Сообщения не теряются при перенастройке фреймворка, как в Log4j 1 или Logback
  • Расширяемость: Log4j 2 поддерживает систему плагинов, позволяющую пользователям определять и настраивать собственные компоненты.
  • Упрощенный синтаксис конфигурации
  • Поддержка конфигураций xml, json, yaml и свойств.
  • Улучшенные фильтры
  • Поддержка поиска свойств для значений, определенных в файле конфигурации, системных свойствах, переменных среды, карте контекста потока и данных, присутствующих в событии.
  • Поддержка нескольких API: Log4j 2 можно использовать с приложениями, использующими API Log4j 2, Log4j 1.2, SLF4J, Commons Logging и java.util.logging (JUL).
  • Пользовательские уровни журнала
  • Поддержка лямбда-выражения в стиле Java 8 для «ленивого ведения журнала»
  • Маркеры
  • Поддержка определяемых пользователем объектов сообщений
  • "Без мусора или с минимальным объемом мусора" в обычных конфигурациях
  • Повышенная скорость

Одной из наиболее узнаваемых особенностей Log4j 2 является производительность «асинхронных регистраторов». Log4j 2 использует LMAX Disruptor . Библиотека снижает потребность в блокировке ядра и увеличивает производительность ведения журнала в 12 раз. Например, в той же среде Log4j 2 может записывать более 18 000 000 сообщений в секунду, тогда как другие платформы, такие как Logback и Log4j 1, просто записывают <2 000 000 сообщений. в секунду.

Уровни журнала Log4j

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

Уровень Описание
ВЫКЛЮЧЕННЫЙ Максимально возможный ранг и предназначен для отключения регистрации.
ФАТАЛЬНЫЙ Серьезные ошибки, вызывающие преждевременное завершение работы. Ожидайте, что они будут немедленно видны на консоли состояния.
ОШИБКА Другие ошибки времени выполнения или непредвиденные условия. Ожидайте, что они будут немедленно видны на консоли состояния.
ПРЕДУПРЕЖДАТЬ Использование устаревших API, плохое использование API, «почти» ошибки, другие ситуации выполнения, которые являются нежелательными или неожиданными, но не обязательно «неправильными». Ожидайте, что они будут немедленно видны на консоли состояния.
ИНФОРМАЦИЯ Интересные события во время выполнения (запуск / завершение работы). Ожидайте, что они сразу же будут видны на консоли, поэтому будьте консервативны и сведите к минимуму.
ОТЛАЖИВАТЬ Подробная информация о потоке через систему. Ожидайте, что они будут записаны только в журналы. Вообще говоря, большинство строк, регистрируемых вашим приложением, следует записывать как DEBUG.
СЛЕД Самая подробная информация. Ожидайте, что они будут записаны только в журналы. Начиная с версии 1.2.12.

Пользовательские уровни журнала

Log4j 2 позволяет пользователям определять свои собственные уровни ведения журнала. Инструмент генератора исходного кода предназначен для создания регистраторов, которые поддерживают настраиваемые уровни журнала, идентичные уровням встроенного журнала. Пользовательские уровни журнала могут дополнять или заменять встроенные уровни журнала.

Конфигурация Log4j

Log4j можно настроить с помощью файла конфигурации или с помощью кода Java. Файлы конфигурации могут быть записаны в формате XML , JSON , YAML или файла свойств . В конфигурации вы можете определить три основных компонента: регистраторы, приложения и макеты. Настройка ведения журнала через файл имеет то преимущество, что его можно включать или выключать, не изменяя приложение, использующее Log4j. Например, приложению можно разрешить запуск с выходом из системы до тех пор, пока не возникнет проблема, а затем снова включить ведение журнала, просто изменив файл конфигурации.

Регистраторы называются адресатами сообщений журнала. Это имена, известные приложению Java. Каждый регистратор независимо настраивается относительно того, какой уровень ведения журнала (FATAL, ERROR и т. Д.) Он в настоящее время регистрирует. В ранних версиях Log4j они назывались категорией и приоритетом, но теперь они называются регистратором и уровнем соответственно. Регистратор может отправлять сообщения журнала нескольким приложениям.

Фактические результаты выполняются Appenders . Доступно множество приложений с описательными именами, например FileAppender, RollingFileAppender, ConsoleAppender, SocketAppender, SyslogAppender и SMTPAppender. В Log4j 2 добавлены приложения, которые пишут в Apache Flume , Java Persistence API , Apache Kafka , базы данных NoSQL , файлы с отображением памяти, файлы произвольного доступа и конечные точки ZeroMQ . К любому регистратору можно подключить несколько приложений, поэтому можно записывать одну и ту же информацию на несколько выходов; например, в файл локально и в прослушиватель сокетов на другом компьютере.

Приложения используют макеты для форматирования записей журнала. Популярным способом форматирования файлов журнала по одной строке за раз является PatternLayout, который использует строку шаблона, как и функция printf в C / C ++ . Существуют также средства форматирования HTMLLayout и XMLLayout для использования, когда форматы HTML или XML более удобны соответственно. Log4j 2 добавил макеты для CSV , Graylog Extended Log Format (GELF), JSON , YAML и RFC-5424.

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

Чтобы отладить некорректную конфигурацию:

  • В конфигурациях Log4j 2 установите для status атрибута значение TRACE для отправки выходных данных внутренней регистрации состояния на стандартный выход . Чтобы включить ведение журнала состояния до того, как конфигурация будет найдена, используйте свойство Java VM -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace .
  • В Log4j 1 используйте свойство Java VM -Dlog4j.debug .

Чтобы узнать, откуда был загружен файл конфигурации log4j2.xml, из inspect getClass().getResource("/log4j2.xml") .

Существует также неявная «ненастроенная» или «по умолчанию» конфигурация Log4j, конфигурация Java-приложения с инструментами Log4j, в которой отсутствует какая-либо конфигурация Log4j. Это выводит на стандартный вывод предупреждение о том, что программа не настроена, и URL-адрес веб-сайта Log4j, на котором можно найти подробную информацию о предупреждении и конфигурации. Помимо вывода этого предупреждения ненастроенное приложение Log4j будет печатать только записи журнала ERROR или FATAL в стандартном формате.

Пример для Log4j 2

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" monitorInterval="60">
  <Properties>
    <Property name="filename">target/test.log</Property>
  </Properties>
 
  <Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
    </Console>

    <File name="file" fileName="${filename}">
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>
 
  <Loggers> 
    <!-- 
         loggers whose name starts with 'org.springframework' will only log messages of level "info" or higher;
         if you retrieve Loggers by using the class name (e.g. Logger.getLogger(AClass.class))
         and if AClass is part of the org.springframework package, it will belong to this category
    -->
    <Logger name="org.springframework" level="info" additivity="false" />

    <!--
        Filter example: for loggers whose name starts with 'com.mycompany.myproduct',
        log entries of level "debug" or higher whose ThreadContextMap data contains
        the key-value pair "test=123", also send these log entries to the "STDOUT" appender.
    -->
    <Logger name="com.mycompany.myproduct" level="debug" additivity="true">
      <ThreadContextMapFilter>
        <KeyValuePair key="test" value="123"/>
      </ThreadContextMapFilter>
      <AppenderRef ref="STDOUT"/>
    </Logger>
 
    <!--
        By default, all log messages of level "trace" or higher will be logged.
        Log messages are sent to the "file" appender and 
        log messages of level "error" and higher will be sent to the "STDOUT" appender.
    -->
    <Root level="trace">
      <AppenderRef ref="file"/>
      <AppenderRef ref="STDOUT" level="error"/>
    </Root>
  </Loggers>
 
</Configuration>

Пример для Log4j 1.2

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <!-- 
         an appender is an output destination, such as the console or a file;
         names of appenders are arbitrarily chosen.
    -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
        </layout>
    </appender>
 
    <!-- 
         loggers of category 'org.springframework' will only log messages of level "info" or higher;
         if you retrieve Loggers by using the class name (e.g. Logger.getLogger(AClass.class))
         and if AClass is part of the org.springframework package, it will belong to this category
    -->
    <logger name="org.springframework">
        <level value="info"/>
    </logger>

    <!-- 
         everything of spring was set to "info" but for class 
         PropertyEditorRegistrySupport we want "debug" logging 
    -->
    <logger name="org.springframework.beans.PropertyEditorRegistrySupport">
        <level value="debug"/>
    </logger>
 
    <logger name="org.acegisecurity">
        <level value="info"/>
    </logger>
    
    
    <root>
        <!-- 
            all log messages of level "debug" or higher will be logged, unless defined otherwise 
            all log messages will be logged to the appender "stdout", unless defined otherwise 
        -->
        <level value="debug" />
        <appender-ref ref="stdout" />
    </root>
</log4j:configuration>

ТТКС

TTCC - это формат сообщения, используемый log4j. TTCC - это аббревиатура от Time Thread Category Component . Он использует следующий шаблон:

 %r [%t] %-5p %c %x - %m%n

Где

Мнемонический Описание
Используется для вывода количества миллисекунд, прошедших от создания макета до создания события регистрации.
% t Используется для вывода имени потока, который сгенерировал событие регистрации.
%п Используется для вывода приоритета события регистрации.
% c Используется для вывода категории события регистрации.
%Икс Используется для вывода NDC (вложенного диагностического контекста), связанного с потоком, который сгенерировал событие регистрации.
% X {ключ} Используется для вывода MDC (сопоставленного диагностического контекста), связанного с потоком, который сгенерировал событие регистрации для указанного ключа.
% m Используется для вывода предоставленного приложением сообщения, связанного с событием регистрации.
% n Используется для вывода специфичного для платформы символа или символов новой строки .

Пример вывода
467 [main] INFO org.apache.log4j.examples.Sort - Выход из основного метода.

Порты

  • log4c - порт для C. Log4C - это библиотека журналирования на основе C , выпущенная на SourceForge под лицензией LGPL . Для различных операционных систем Unix предусмотрены файлы autoconf и automake . В ОС Windows Makefile предназначен для использования с MSVC . Разработчики также могут использовать свою собственную систему make для компиляции исходного кода, в зависимости от своих инженерных требований к сборке. Экземпляр библиотеки log4c можно настроить тремя способами: с использованием переменных среды , программно или через файл конфигурации XML . log4c имеет приложения для файлов, потоков и файлов с отображением памяти. (Без адаптера Socket.) Последняя версия - 1.2.4, выпущенная в 2013 году, и проект больше не активно развивается.
  • log4js - порт для JavaScript . Log4js доступен по лицензии Apache Software Foundation . Одной из особенностей Log4js является возможность удаленно регистрировать события браузера на сервере. Используя Ajax, можно отправлять события журнала в нескольких форматах ( XML , JSON , простой ASCII и т. Д.) На сервер для оценки там. Для log4js реализованы следующие приложения : AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender и WindowsEventsAppender. Предоставляются следующие классы макета: BasicLayout, HtmlLayout, JSONLayout и XMLLayout. Последняя версия - 1.1, выпущенная в 2008 году.
  • log4javascript - еще один порт для JavaScript. log4javascript - это среда ведения журналов JavaScript, основанная на log4j . Последняя версия - 1.4.9, выпущенная в мае 2014 года.
  • JSNLog - порт для JavaScript . Автоматически помещает сообщения из регистраторов JavaScript в журналы на стороне сервера с помощью серверного компонента .NET, который взаимодействует с Log4Net, NLog, Elmah или Common.Logging. Это обеспечивает интегрированный журнал событий на стороне клиента и сервера. Идентификаторы запросов коррелируют события, связанные с конкретным пользователем. Конфигурация осуществляется через файл web.config на стороне сервера. Поддерживает ведение журнала исключений, включая трассировку стека. В июле 2014 года последней версией была 2.7.1, и обновления производились регулярно.
  • Apache Log4net - порт для Microsoft .NET Framework . Первоначальная работа была сделана Neoworks и передана в дар Apache Software Foundation в феврале 2004 года. Фреймворк похож на исходный log4j, но использует новые возможности среды выполнения .NET. Предоставляет вложенный диагностический контекст (NDC) и сопоставленный диагностический контекст (MDC). Последняя версия - 2.0.8, выпущенная в 2017 году.
  • log4perl - Perl- порт популярного пакета протоколирования log4j. Последняя версия - 1.49, выпущенная в феврале 2017 года.
  • Apache log4php - «Универсальный фреймворк для ведения журналов для PHP . Первоначально портированный с Apache log4j на PHP, теперь он включает в себя различные специфические особенности PHP».
  • PL-SQL-Logging-Utility - это адаптация log4j к PL / SQL.
  • Log4db2 - это утилита ведения журнала для DB2 для LUW, которая использует инструкции SQL с кодом SQL PL.
  • Apache Log4cxx - фреймворк для ведения журналов для C ++, созданный по образцу Apache log4j, который использует Apache Portable Runtime для большей части кода, зависящего от платформы, и должен использоваться на любой платформе, поддерживаемой APR. В настоящее время он находится в стадии инкубации, последняя версия - 0.10.0, выпущенная в 2008 году.
  • Log4r - всеобъемлющая и гибкая библиотека журналов, написанная на Ruby для использования в программах Ruby. Он был вдохновлен и предоставляет многие функции проекта Apache Log4j.

Смотрите также

Рекомендации

дальнейшее чтение

  • Гюльджю, Цеки (февраль 2010 г.), Полное руководство по Log4j (2-е изд.), QOS.ch, стр. 204, ISBN   978-2-9700369-0-6
  • Гупта, Самудра (22 июня 2005 г.), Pro Apache Log4j (2-е изд.), Apress , стр. 224, ISBN   978-1-59059-499-5

внешняя ссылка