Класс System.LoggerFinder
- java.lang.Object
-
- java.lang.System.LoggerFinder
- Вложенный класс:
- System
public abstract static class System.LoggerFinder extends Object
Сервис LoggerFinder отвечает за создание, управление и настройку логгеров для используемой им базовой инфраструктуры. Logger Finder — это конкретная реализация этого класса, имеющая конструктор без аргументов и реализующая абстрактные методы, определённые в этом классе. Логгеры, возвращаемые Logger Finder, способны перенаправлять сообщения об ошибках в бэкенд системы логирования, поддерживаемый этим провайдером. В данном вызове Java Runtime существует единственный системный экземпляр LoggerFinder, который загружается следующим образом:
- Сначала он ищет любой пользовательский
LoggerFinderпровайдер, используя механизмServiceLoaderс системным загрузчиком классов. - Если
LoggerFinderпровайдер не найден, используется системная реализация по умолчаниюLoggerFinder.
Приложение может заменить бэкенд системы логирования даже при наличии модуля java.logging, просто предоставив и объявив реализацию сервиса System.LoggerFinder.
Реализация по умолчанию
Реализация системной логики по умолчанию LoggerFinder использует java.util.logging в качестве базовой инфраструктуры, когда присутствует модуль java.logging. Он возвращает экземпляр логгера logger, который будет перенаправлять сообщения об ошибках в java.util.logging.Logger. В противном случае, если java.logging отсутствует, реализация по умолчанию вернёт простой экземпляр логгера, который будет перенаправлять сообщения об ошибках уровня INFO и выше на консоль (System.err).
Настройка логирования
Экземпляры Logger, полученные из методов фабрики LoggerFinder , не могут быть непосредственно настроены приложением. Настройка зависит от базовой инфраструктуры системы логирования и, как правило, требует использования API, специфичных для этой инфраструктуры.
Для реализации по умолчанию LoggerFinder , использующей java.util.logging в качестве базовой инфраструктуры, обратитесь к java.util.logging для настройки логирования. Для реализации по умолчанию LoggerFinder , возвращающей простые логгеры, когда модуль java.logging отсутствует, настройка зависит от реализации.
Как правило, приложение, использующее систему логирования, регистрирует сообщения через фасад логгера, определённый (или поддерживаемый) этой системой. Приложения, которые хотят использовать внешнюю инфраструктуру, должны регистрировать через фасад, связанный с этой инфраструктурой.
Системный класс, которому необходимо регистрировать сообщения, обычно получает экземпляр System.Logger для перенаправления сообщений в выбранную приложением систему логирования.
Библиотеки и классы, которым нужны только логгеры для создания сообщений об ошибках, не должны пытаться настраивать логгеры самостоятельно, так как это сделает их зависимыми от конкретной реализации сервиса LoggerFinder.
Кроме того, когда присутствует менеджер безопасности, логгеры, предоставляемые системным классам, не должны настраиваться напрямую через бэкенд системы логирования без необходимых разрешений.
Ответственность провайдера конкретной реализации LoggerFinder заключается в обеспечении того, чтобы эти логгеры не настраивались ненадежным кодом без надлежащей проверки разрешений, так как настройка таких логгеров обычно влияет на все приложения в той же среде Java Runtime.
Уровни сообщений и сопоставление с уровнями бэкенда
Logger Finder отвечает за сопоставление уровня
System.Logger.Level с уровнем, поддерживаемым используемым им бэкендом системы логирования.
LoggerFinder по умолчанию, использующий java.util.logging в качестве бэкенда, сопоставляет уровни System.Logger с уровнями java.util.logging соответствующей степени важности — как описано в Logger.Level.
- С:
- 9
- См. также:
-
System,System.Logger
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | LoggerFinder() | Создаёт новый экземпляр |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
System.Logger | getLocalizedLogger(String name,
ResourceBundle bundle,
Module module) | Возвращает локальный экземпляр |
abstract System.Logger | getLogger(String name,
Module module) | Возвращает экземпляр |
static System.LoggerFinder | getLoggerFinder() | Возвращает экземпляр |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitКонструкторы
LoggerFinder
protected LoggerFinder()
Создаёт новый экземпляр LoggerFinder.
- Примечание о реализации:
- Рекомендуется, чтобы реализация сервиса
LoggerFinderне выполняла никакой интенсивной инициализации в своём конструкторе, чтобы избежать возможных рисков тупика или циклов загрузки классов во время создания провайдера сервиса. - Исключение:
-
SecurityException— если менеджер безопасности присутствует и его методcheckPermissionне позволяетRuntimePermission("loggerFinder").
Методы
getLogger
public abstract System.Logger getLogger(String name,
Module module)Возвращает экземпляр Logger для данного module.
- Параметры:
-
name— имя логгера. -
module— модуль, для которого запрашивается логгер. - Возвращает:
- логгер
logger, подходящий для использования в указанном модуле. - Исключение:
-
NullPointerException— еслиnameявляетсяnullилиmoduleявляетсяnull. -
SecurityException— если менеджер безопасности присутствует и его методcheckPermissionне позволяетRuntimePermission("loggerFinder").
getLocalizedLogger
public System.Logger getLocalizedLogger(String name,
ResourceBundle bundle,
Module module)Возвращает локализованный экземпляр Logger для данного module. Возвращаемый логгер будет использовать предоставленный набор ресурсов для локализации сообщений.
- Требования к реализации:
- По умолчанию этот метод вызывает
this.getLogger(name, module)для получения логгера, а затем оборачивает этот логгер в экземплярSystem.Logger, где все методы, не принимающие набор ресурсовResourceBundleв качестве параметра, перенаправляются в метод, принимающий этот набор ресурсов — передавая данный набор ресурсов для локализации. Например, вызовLogger.log(Level.INFO, msg)приведёт к вызовуLogger.log(Level.INFO, bundle, msg, (Object[])null)на экземпляре обернутого логгера. Однако по умолчанию строковые сообщения, возвращаемыеSupplier<String>, не будут локализованы, так как предполагается, что такие строки являются сообщениями, которые уже построены, а не ключами в наборе ресурсов.Реализация
LoggerFinderможет переопределить этот метод, например, если базовая система логирования предоставляет собственный механизм локализации сообщений об ошибках, такая реализацияLoggerFinderсможет вернуть логгер, который напрямую использует этот механизм, предоставляемый бэкендом. - Параметры:
-
name— имя логгера. -
bundle— набор ресурсов; может бытьnull. -
module— модуль, для которого запрашивается логгер. - Возвращает:
- экземпляр
Logger, который будет использовать предоставленный набор ресурсов для локализации сообщений. - Исключение:
-
NullPointerException— еслиnameявляетсяnullилиmoduleявляетсяnull. -
SecurityException— если менеджер безопасности присутствует и его методcheckPermissionне позволяетRuntimePermission("loggerFinder").
getLoggerFinder
public static System.LoggerFinder getLoggerFinder()
Возвращает экземпляр LoggerFinder. В среде Java Runtime существует единственный системный экземпляр LoggerFinder . См. спецификацию класса о том, как находится и загружается реализация LoggerFinder.
- Возвращает:
- экземпляр
LoggerFinder. - Исключение:
-
SecurityException— если менеджер безопасности присутствует и его методcheckPermissionне позволяетRuntimePermission("loggerFinder").
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.LoggerFinder.html