Платформа ведения журналов Java
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Платформа регистрации данных Java — это пакет регистрации компьютерных данных для платформы Java . В этой статье рассматриваются платформы ведения журналов общего назначения.
Ведение журнала означает запись активности приложения и является распространенной проблемой для групп разработчиков. Платформы ведения журналов упрощают и стандартизируют процесс ведения журналов для платформы Java. В частности, они обеспечивают гибкость, избегая явного вывода на консоль (см. Appender ниже). Место записи журналов становится независимым от кода и может быть настроено во время выполнения.
К сожалению, JDK не включал ведение журналов в свою первоначальную версию, поэтому к моменту добавления Java Logging API стали широко использоваться несколько других платформ ведения журналов, в частности Apache Commons Logging (также известный как Java Commons Logging или JCL) и Log4j . Это приводило к проблемам при интеграции различных сторонних библиотек (JAR), каждая из которых использовала разные платформы ведения журналов. Для решения этой проблемы были разработаны подключаемые структуры журналирования (обертки).
Обзор функциональности
[ редактировать ]Ведение журнала обычно разбивается на три основные части: регистратор, форматтер и аппендер (или обработчик).
- Регистратор отвечает за сбор сообщения, которое необходимо зарегистрировать, вместе с определенными метаданными и передачу его в систему ведения журнала.
- После получения сообщения платформа вызывает Formatter с сообщением, которое форматирует его для вывода.
- Затем платформа передает отформатированное сообщение соответствующему Appender/Handler для утилизации. Это может включать вывод на консоль, запись на диск, добавление в базу данных или создание электронного письма.
Более простые платформы ведения журналов, такие как Logging Framework от Object Guy , сочетают в себе средство ведения журнала и приложение. Это упрощает работу по умолчанию, но менее настраиваемо, особенно если проект перемещается между средами.
Регистратор
[ редактировать ]Logger — это объект, который позволяет приложению вести журнал независимо от того, где отправляются/сохраняются выходные данные. Приложение регистрирует сообщение, передавая объект или объект и исключение с необязательным уровнем серьезности объекту журнала под заданным именем/идентификатором.
Имя
[ редактировать ]У регистратора есть имя. Имя обычно имеет иерархическую структуру с точками (.), разделяющими уровни. Распространенной схемой является использование имени класса или пакета, ведущего журналирование. ведения журналов Java И Log4j, и API поддерживают определение обработчиков на более высоких уровнях иерархии.
Например, регистратор может называться " com.sun.some.UsefulClass
". Обработчик может быть определен для любого из следующих действий:
com
com.sun
com.sun.some
com.sun.some.UsefulClass
Пока где-то в этом стеке определен обработчик, может происходить журналирование. Например, сообщение, зарегистрированное в com.sun.some.UsefulClass
logger, может быть записан com.sun
обработчик. Обычно существует глобальный обработчик, который получает и обрабатывает сообщения, генерируемые любым регистратором.
Уровень серьезности
[ редактировать ]Сообщение протоколируется на определенном уровне. Имена общих уровней копируются из журнала Apache Commons Logging (хотя API ведения журнала Java определяет разные имена уровней):
Уровень | Описание |
---|---|
ФАТАЛЬНЫЙ | Серьезные ошибки, приводящие к преждевременному прекращению действия. Ожидайте, что они сразу же появятся на консоли состояния. |
ОШИБКА | Другие ошибки выполнения или непредвиденные условия. Ожидайте, что они сразу же появятся на консоли состояния. |
ПРЕДУПРЕЖДЕНИЕ | Использование устаревших API, неправильное использование API, «почти» ошибки, другие ситуации во время выполнения, которые являются нежелательными или неожиданными, но не обязательно «неправильными». Ожидайте, что они сразу же появятся на консоли состояния. |
ИНФОРМАЦИЯ | Интересные события времени выполнения (запуск/выключение). Ожидайте, что они сразу же будут видны на консоли, поэтому будьте консервативны и сведите их к минимуму. |
ОТЛАЖИВАТЬ | подробную информацию о движении через систему. Ожидайте, что они будут записаны только в журналы. |
СЛЕД | более подробная информация. Ожидайте, что они будут записаны только в журналы. |
Платформа ведения журнала поддерживает текущий уровень ведения журнала для каждого средства ведения журнала. Уровень ведения журнала можно установить более или менее ограничительный. Например, если уровень журналирования установлен на «ПРЕДУПРЕЖДЕНИЕ», то регистрируются все сообщения этого уровня или выше: ERROR и FATAL.
Уровни серьезности могут быть назначены как для регистраторов, так и для приложений. Оба должны быть включены для данного уровня серьезности, чтобы выходные данные могли быть сгенерированы. Таким образом, средство ведения журнала, включенное для вывода отладочной информации, не будет генерировать выходные данные, если обработчик, получающий сообщение, также не включен для отладки.
Фильтры
[ редактировать ]Фильтры приводят к тому, что событие журнала игнорируется или регистрируется. Наиболее часто используемый фильтр — это уровень ведения журнала, описанный в предыдущем разделе. Платформы ведения журналов, такие как Log4j 2 и SLF4J, также предоставляют маркеры, которые при прикреплении к событию журнала также можно использовать для фильтрации. Фильтры также можно использовать для принятия или отклонения событий журнала на основе создаваемых исключений, данных в сообщении журнала, данных в ThreadLocal, которые предоставляются через API ведения журнала, или множества других методов.
Форматеры, макеты или средства визуализации
[ редактировать ]Форматтер — это объект, который форматирует данный объект. В основном это заключается в преобразовании двоичного объекта в строковое представление. Каждая платформа определяет формат вывода по умолчанию, который при желании можно переопределить.
Аппендеры или обработчики
[ редактировать ]Appenders прослушивают сообщения с указанным минимальным уровнем серьезности или выше. Appender принимает переданное сообщение и отправляет его соответствующим образом. Расположение сообщений включает в себя:
- отображение на консоли
- запись в файл или системный журнал
- добавить в таблицу базы данных
- распространять через службы обмена сообщениями Java
- отправить по электронной почте
- записать в сокет
- отбросить в «битовое ведро» (/dev/null)
Сравнение функций
[ редактировать ]Рамки | Тип | Поддерживаемые уровни журнала | Стандартные приложения | Комментарии | Стоимость / Лицензия |
---|---|---|---|---|---|
Лог4дж | Платформа ведения журналов | FATAL ERROR WARN INFO DEBUG TRACE
|
Слишком много, чтобы перечислять: см. документацию Appender. | Широко используется во многих проектах и платформах. Log4j 1 был объявлен «концом жизни» в 2015 году и был заменен на Log4j 2, который предоставляет API, который можно использовать с другими реализациями ведения журналов, а также с реализацией этого API. | Лицензия Apache, версия 2.0
|
API ведения журнала Java | Платформа ведения журналов | SEVERE WARNING INFO CONFIG FINE FINER FINEST
|
Виртуальная машина Java (JVM) Sun по умолчанию имеет следующее: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler. | Поставляется с JRE | |
крошечный журнал | Платформа ведения журналов | ERROR WARNING INFO DEBUG TRACE
|
ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter и null (удаляются все записи журнала) [1] | Лицензия Apache, версия 2.0 | |
Вход в систему | Платформа ведения журналов | ERROR WARN INFO DEBUG TRACE
|
Слишком много, чтобы перечислять: см. Appender JavaDoc. | Разработан как замена Log4j со множеством улучшений. Используется многочисленными проектами, обычно за slf4j, например Akka , Apache Camel , Apache Cocoon , Artifactory , Gradle , Lift Framework , Play Framework , Scalatra , SonarQube , Spring Boot ,... | LGPL , версия 2.1 |
Ведение журнала Apache Commons (JCL) | Оболочка журналирования | FATAL ERROR WARN INFO DEBUG TRACE
|
Зависит от базовой структуры | Широко используется, часто в сочетании с Log4j. | Лицензия Apache, версия 2.0 |
SLF4J | Оболочка журналирования | ERROR WARN INFO DEBUG TRACE
|
Зависит от базовой платформы, которая является подключаемой. Предоставляет API-совместимые прокладки для пакетов ведения журналов JCL, JDK и Log4j. Он также может использовать любой из них для генерации вывода. По умолчанию используется журнал для вывода, если он доступен. | Широко используется во многих проектах и платформах, часто с использованием Logback в качестве реализации. | МОЯ лицензия |
Соображения
[ редактировать ]JCL и Log4j очень распространены просто потому, что они существуют уже очень давно и долгое время были единственным выбором. Гибкость slf4j (с использованием Logback) сделала его популярным выбором.
SLF4J — это набор оболочек журналирования (или прокладок), которые позволяют ему имитировать любую другую платформу. Таким образом, в приложение можно включить несколько сторонних библиотек, независимо от того, какую структуру журналирования выбрала каждая из них. Однако все выходные данные журнала генерируются стандартным способом, обычно через Logback.
Log4j 2 предоставляет как API, так и реализацию. API можно перенаправить на другие реализации ведения журналов, эквивалентные тому, как работает SLF4J. В отличие от SLF4J, API Log4j 2 регистрирует сообщения. [2] объекты вместо строк для дополнительной гибкости, а также поддерживает лямбда-выражения Java. [3]
JCL на самом деле не платформа ведения журналов, а оболочка для нее. Таким образом, для него требуется инфраструктура журналирования, хотя по умолчанию он может использовать собственную SimpleLog
регистратор.
JCL, SLF4J и API Log4j 2 полезны при разработке повторно используемых библиотек, которые необходимо записывать в любую базовую систему журналирования, используемую приложением. Это также обеспечивает гибкость в гетерогенных средах, где структура ведения журналов может меняться, хотя в большинстве случаев после выбора структуры ведения журналов нет необходимости менять ее в течение жизненного цикла проекта. SLF4J и Log4j 2 выигрывают от того, что являются более новыми и основаны на уроках, извлеченных из старых платформ. Более того, у JCL есть известные проблемы с загрузчиками классов при определении того, какую библиотеку журналирования он должен обернуть. [4] который теперь заменил JCL. [5]
API ведения журнала Java предоставляется вместе с Java. Хотя API технически отличается от реализации по умолчанию, поставляемой с Java, замена его альтернативной реализацией может оказаться сложной задачей, поэтому многие разработчики путают эту реализацию с API ведения журналов Java. Конфигурация осуществляется только с помощью внешних файлов, которые нелегко изменить на лету (другие платформы поддерживают программную настройку). Реализация по умолчанию предоставляет лишь несколько обработчиков и форматтеров, что означает, что большинству пользователей придется писать свои собственные. [6]
См. также
[ редактировать ]- SLF4J
- Лог4дж
- возврат в систему
- Javolution LogContext на основе контекстного программирования (фактическая структура ведения журналов выбирается во время выполнения).
- Интеллект во время выполнения
Ссылки
[ редактировать ]Внешние ссылки
[ редактировать ]- API ведения журнала Java 6.0
- Регистрация в сообществе
- Протоматерия
- Инструменты ведения журналов с открытым исходным кодом на Java
- Лицензия Apache 2.0.
- Logback — преемник популярного проекта Log4j.
- tinylog — Минималистичная утилита ведения журналов со статическим регистратором.
- Loggifier Инструмент, который вставляет код журналирования в файлы .class, .jar и .ear.
- JLV — средство просмотра журналов Java, которое в настоящее время доступно в виде плагина для Eclipse IDE.
- Перф4дж
- SLF4J
- Лог4дж 2