Класс System.LoggerFinder
- Вложенный класс:
- System
public abstract static class System.LoggerFinder extends Object
LoggerFinder отвечает за создание, управление и конфигурацию логгеров для используемой базовой структуры. Логгер-поисковик — это конкретная реализация этого класса, имеющая конструктор без аргументов и реализующая абстрактные методы, определённые в этом классе. Логгеры, возвращаемые логгер-поисковиком, способны маршрутизировать сообщения журнала в бэкэнд-систему ведения журналов, поддерживаемую данным поставщиком. Данное вызов 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.
Уровни сообщений и соответствие уровням бэкэнда
Логгер-поисковик отвечает за отображение уровня
System.Logger.Level на уровень, поддерживаемый используемой системой ведения журнала.
По умолчанию LoggerFinder, использующий java.util.logging в качестве бэкэнда, отображает уровни System.Logger на уровни java.util.logging соответствующей серьёзности — как описано в Logger.Level.
- С:
- 9
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт новый экземпляр LoggerFinder. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
System.Logger |
getLocalizedLogger |
Возвращает локализованный экземпляр Logger для данного module. |
abstract System.Logger |
getLogger |
Возвращает экземпляр Logger для данного module. |
static System.LoggerFinder |
getLoggerFinder() |
Возвращает экземпляр LoggerFinder. |
Подробное описание конструкторов
LoggerFinder
protected LoggerFinder()
LoggerFinder.- Примечание реализации:
- Рекомендуется, чтобы реализация сервиса
LoggerFinderне выполняла никакой сложной инициализации в своём конструкторе, чтобы избежать возможных рисков тупика или циклов загрузки классов во время создания поставщика сервиса. - Исключения:
-
SecurityException- если менеджер безопасности присутствует и его методcheckPermissionне разрешаетRuntimePermission("loggerFinder").
Подробное описание методов
getLogger
public abstract System.Logger getLogger(String name, Module module)
Logger для данного module.- Параметры:
-
name- имя логгера. -
module- модуль, для которого запрашивается логгер. - Возвращает:
- a
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в качестве параметра, перенаправляются на метод, принимающий его — передавая заданныйbundleдля локализации. Например, вызов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 существует один глобальный экземпляр LoggerFinder. См. спецификацию класса, чтобы узнать, как находится и загружается реализация LoggerFinder.- Возвращает:
- экземпляр
LoggerFinder. - Исключения:
-
SecurityException- если менеджер безопасности присутствует и его методcheckPermissionне разрешаетRuntimePermission("loggerFinder").
© 1993, 2021, 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/17/docs/api/java.base/java/lang/System.LoggerFinder.html