Разница между java .util.logging.Logger и java .lang.System.Logger - PullRequest
5 голосов
/ 30 января 2020

Java 9 представил новый регистратор, а именно java.lang.System.Logger, но у нас всегда было java.util.logging.Logger.

Что нового в этом регистраторе и как оно лучше?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020
  • java.lang.System.Logger определено в модуле java.base, а java.util.logging.Logger определено в модуле java.logging
  • Поддержка внешней структуры, такая как Усовершенствован SLF4J или Log4J.
  • Возможность справляться с проблемами bootstrap, поэтому классы платформы могут регистрировать сообщения до инициализации потребителя журнала.

Уровни ведения журнала меняются весьма Иное по сравнению с util.logging.Logger:

+--------------------------+-----+-------+-------+------+---------+--------+-----+
|   System.Logger Levels   | ALL | TRACE | DEBUG | INFO | WARNING | ERROR  | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
| java.util.logging Levels | ALL | FINER | FINE  | INFO | WARNING | SEVERE | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+

Если вы хотите узнать мотивы java.lang.System.Logger, я настоятельно рекомендую вам прочитать JEP 264: ведение журнала платформы API и сервис

0 голосов
/ 03 февраля 2020

Хотя между ними могут быть тонкие различия, наиболее важным отличием является то, что System.Logger (в модуле java.base) представляет собой фасад , тогда как java.util.logging.Loggerjava.logging) представляет собой реализация .

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

Начиная с JDK 9 в модуле может отсутствовать java.logging. graph, которая действительно позволяет вам использовать любую реализацию, которую вы используете sh, даже не имея бесполезных пакетов в образе JDK. Если присутствует java.logging, он используется как бэкэнд по умолчанию, если не присутствует другой бэкэнд. Если бэкэнда нет, он просто напечатает на System.err.

...