Введение
Java-фреймворк для ведения журналов - это компьютерный пакет для ведения журналов данных для платформы Java. В этой статье рассматриваются системы ведения журналов общего назначения. Регистрация относится к записи активности приложением и является общей проблемой для команд разработчиков. Фреймворки ведения журналов облегчают и стандартизируют процесс ведения журналов для платформы Java. В частности, они обеспечивают гибкость, избегая явного вывода на консоль (см. Приложение ниже). Где записываются журналы, становится независимым от кода и может быть настроен во время выполнения. К сожалению, JDK не включал в себя ведение журналов в своем первоначальном выпуске, поэтому к тому времени, когда был добавлен Java Logging API, несколько других систем ведения журналов стали широко использоваться, в частности Apache Commons Logging (также известный как Java Commons Logging или JCL) и Log4j. Это привело к проблемам при интеграции различных сторонних библиотек (JAR), каждая из которых использует разные системы ведения журналов. Для решения этой проблемы были разработаны подключаемые к дереву каркасы (обертывающие).
Обзор функциональности
Лоджинг обычно разбивается на три основные части: Logger, Formatter и Appender (или Handler). Логгер отвечает за захват сообщения, которое должно быть зарегистрировано вместе с определенными метаданными, и передачу его в систему регистрации. После получения сообщения фреймворк вызывает форматизатор с сообщением, которое форматирует его для вывода. Фреймворк затем передает отформатированное сообщение соответствующему приложению/обработчику для обработки. Это может включать в себя выход на консольный дисплей, запись на диск, добавление в базу данных или генерацию электронной почты. Простейшие системы ведения журналов, такие как Logging Framework от Object Guy, объединяют регистратор и добавляющий. Это упрощает работу по умолчанию, но менее конфигурируемо, особенно если проект перемещается по средам.
Лесозаготовитель
Логгер - это объект, который позволяет приложению вести журнал, независимо от того, где отправляется/сохраняется выход. Приложение регистрирует сообщение, передавая объект или объект и исключение с дополнительным уровнем тяжести объекту регистратора под заданным именем/идентификатором.
Уровень тяжести
Сообщение записывается на определенном уровне. Общие имена уровней скопированы из Apache Commons Logging (хотя Java Logging API определяет разные имена уровней): + Общие уровни Описание уровня FATALSочень часто возникают ошибки, которые вызывают преждевременное завершение. Ожидайте, что они будут сразу видны на консоли статуса. ERRORДругие ошибки во время выполнения или неожиданные условия. Ожидайте, что они будут сразу видны на консоли статуса. ВНИМАНИЕИспользование устаревших API, плохое использование API, "почти" ошибки, другие ситуации во время выполнения, которые нежелательны или неожиданны, но не обязательно "неправильны". Ожидайте, что они будут сразу видны на консоли статуса. ИнфоИнтересные события во время выполнения (запуск/выключение). Ожидайте, что они будут сразу видны на консоли, поэтому будьте осторожны и сохраняйте их на минимуме. DEBUG подробная информация о потоке через систему. Ожидайте, что они будут написаны только на журналах. TRACE более подробная информация. Ожидайте, что они будут написаны только на журналах. Система ведения лесозаготовок поддерживает текущий уровень ведения лесозаготовок для каждого лесозаготовителя. Уровень вырубки может быть установлен более или менее ограничительным. Например, если уровень регистрации установлен на "ПРЕДУПРЕЖДЕНИЕ", то все сообщения этого уровня или выше регистрируются: ОЧЕНЬ ОБОЖНО и СМЕРТНО. Уровни тяжести могут быть присвоены как лесорубам, так и присоединителям. Оба должны быть включены для определенного уровня тяжести для выхода, чтобы быть генерированы. Таким образом, регистратор, включенный для вывода отладки, не будет генерировать вывод, если обработчик, который получает сообщение, также не включен для отладки.
+ Common levels Level DescriptionFATALSevere errors that cause premature termination. Expect these to be immediately visible on a status console. ERROROther runtime errors or unexpected conditions. Expect these to be immediately visible on a status console. WARNINGUse of deprecated APIs, poor use of API, 'almost' errors, other runtime situations that are undesirable or unexpected, but not necessarily "wrong". Expect these to be immediately visible on a status console. INFOInteresting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum. DEBUGdetailed information on the flow through the system. Expect these to be written to logs only. TRACEmore detailed information. Expect these to be written to logs only. The logging framework maintains the current logging level for each logger. The logging level can be set more or less restrictive. For example, if the logging level is set to "WARNING", then all messages of that level or higher are logged: ERROR and FATAL. Severity levels can be assigned to both loggers and appenders. Both must be enabled for a given severity level for output to be generated. So a logger enabled for debug output will not generate output if the handler that gets the message is not also enabled for debug.
Фильтры
Фильтры заставляют игнорировать или регистрировать событие журнала. Наиболее часто используемым фильтром является уровень регистрации, описанный в предыдущем разделе. Системы ведения журналов, такие как Log4j 2 и SLF4J, также предоставляют маркеры, которые присоединенные к событию журналов также могут использоваться для фильтрации. Фильтры также могут использоваться для принятия или отклонения событий журнала на основе исключений, которые бросаются, данных в сообщении журнала, данных в ThreadLocal, которые подвергаются воздействию через API журналов, или различных других методов.
Форматирующие, макетные или рендеринговые устройства
Форматист - это объект, который форматирует данный объект. В основном это состоит в том, чтобы взять двоичный объект и преобразовать его в струнное представление. Каждая структура определяет формат вывода по умолчанию, который может быть заменен, если это необходимо.
Сравнение характеристик
+ Таблица 1 Особенности Тип системы поддерживаемые уровни журналов Стандартные дополнения Комментарии Стоимость / лицензия Log4j Система ведения журналов СМЕРТНАЯ ОЧЕНЬ ПРИМЕЧАНИЕ INFO DEBUG TRACE Слишком много, чтобы перечислить: см. Документацию дополнения Широко используется во многих проектах и платформах. Log4j 1 был объявлен "Край жизни" в 2015 году и был заменен на Log4j 2, который предоставляет API, который может использоваться с другими реализациями журналов, а также реализацией этого API. Лицензия Apache, версия 2.0 Java Logging API Logging Framework SEVERE WARNING INFO CONFIG FINE FINEST По умолчанию Java Virtual Machine (JVM) от Sun имеет следующее: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler Поставляется с JRE tinylogging Logging Framework ERROR WARNING INFO DEBUG TRACE ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter и null (отбрасывает все записи журнала) Лицензия Apache, версия 2.0 Logback Logging Logging Framework ERROR WARNING INFO DEBUG TRACE многие перечислить: см. Appender Java TooDoc Разработан как замена Log4j, с многими улучшениями. Используется многочисленными проектами, обычно за slf4j, например Akka, Apache Camel, Apache Cocoon, Artifactory, Gradle, Lift Framework, Play Framework, Scalatra, SonarQube, Spring Boot, LGPL, Версия 2.1 Apache Commons Logging (JCL) Logging Wrapper FATAL ERROR WARN INFO DEBUG TRACE Зависит от базовой структуры Широко используется, часто в сочетании с Log4j Apache License, Версия 2.0 SLF4J Logging Wrapper ERROR WARN INFO DEBUG TRACE Зависит от базовой структуры, которая поддается подключению. Предоставляет API-совместимые шимы для пакетов журналов JCL, JDK и Log4j. Он также может использовать любой из них для генерации выхода. По умолчанию используется Logback для вывода, если он доступен. Широко используется во многих проектах и платформах, часто с Logback в качестве реализации. Лицензия MIT
Рассмотрение
JCL и Log4j очень распространены просто потому, что они существуют уже так долго и были единственным выбором в течение долгого времени. Гибкость slf4j (с использованием Logback внизу) сделала его популярным выбором. SLF4J представляет собой набор оболочек для лесозаготовок (или шим), которые позволяют ему имитировать любую из других рамок. Таким образом, несколько сторонних библиотек могут быть включены в приложение, независимо от системы регистрации, которую каждый из них выбрал для использования. Однако все выходы журналов генерируются стандартным способом, как правило, через Logback. Log4j 2 предоставляет как API, так и реализацию. API может быть перенаправлен на другие реализации журналов, эквивалентные тому, как работает SLF4J. В отличие от SLF4J, Log4j 2 API регистрирует объекты сообщений вместо строк для дополнительной гибкости, а также поддерживает выражения Java Lambda. JCL - это не система для ведения лесозаготовок, а обертка для одной. Таким образом, он требует системы ведения журналов под ним, хотя по умолчанию может использовать свой собственный регистратор SimpleLog. JCL, SLF4J и Log4j 2 API полезны при разработке многоразовых библиотек, которые должны записываться в любую базовую систему ведения журналов, используемую приложением. Это также обеспечивает гибкость в гетерогенных средах, где структура лесозаготовок может меняться, хотя в большинстве случаев, как только система лесозаготовок была выбрана, нет необходимости менять ее в течение всего срока реализации проекта. SLF4J и Log4j 2 выигрывают от того, что они новые и опираются на уроки, извлеченные из старых рамок. Кроме того, JCL имеет известные проблемы с классами загрузчиков при определении того, какую библиотеку журналов следует обернуть, которая теперь заменила JCL. API для ведения журналов Java предоставляется вместе с Java. Хотя API технически отделен от реализации по умолчанию, предоставленной с Java, его замена на альтернативную реализацию может быть сложной, поэтому многие разработчики путают эту реализацию с Java Logging API. Конфигурация осуществляется только с помощью внешних файлов, которые не могут быть легко изменены на ходу (другие фреймворки поддерживают программную конфигурацию). В реализации по умолчанию предоставляется только несколько обработчиков и форматировщиков, что означает, что большинство пользователей должны будут писать свои собственные.