Класс 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
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
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, 2023, 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/21/docs/api/java.base/java/lang/System.LoggerFinder.html