Класс LogManager
public class LogManager extends Object
Этот объект LogManager:
- Управляет иерархическим пространством имён объектов Logger. Все именованные логгеры хранятся в этом пространстве имён.
- Управляет набором свойств управления регистрацией. Это простые пары ключ-значение, которые могут использоваться обработчиками (Handlers) и другими объектами регистрации для настройки себя.
Глобальный объект LogManager можно получить с помощью LogManager.getLogManager(). Объект LogManager создается во время инициализации класса и не может быть изменён впоследствии.
При запуске класс LogManager ищется с помощью системной переменной java.util.logging.manager.
Настройка LogManager
LogManager инициализирует конфигурацию регистрации через методreadConfiguration() во время инициализации LogManager. По умолчанию используется конфигурация по умолчанию LogManager. Конфигурация регистрации, считанная LogManager, должна быть в формате файла свойств properties file. LogManager определяет две необязательные системные свойства, которые позволяют контролировать начальную конфигурацию, как указано в методе readConfiguration():
-
java.util.logging.config.class -
java.util.logging.config.file
Эти две системные свойства могут быть заданы в командной строке для команды "java" или как определения системных свойств, переданные в JNI_CreateJavaVM.
Свойства (properties) для логгеров и обработчиков (Handlers) будут иметь имена, начинающиеся с имени обработчика или логгера, разделённого точками.
Глобальные свойства регистрации могут включать:
- Свойство "handlers". Оно определяет список имён классов обработчиков (handlers), разделённых пробелами или запятыми, для загрузки и регистрации в качестве обработчиков корневого логгера (логгера с именем ""). Каждое имя класса должно соответствовать классу Handler, имеющему конструктор по умолчанию. Обратите внимание, что эти обработчики могут создаваться лениво, когда они впервые используются.
- Свойство "<logger>.handlers". Оно определяет список имён классов обработчиков (handlers), разделённых пробелами или запятыми, для загрузки и регистрации в качестве обработчиков указанному логгеру. Каждое имя класса должно соответствовать классу Handler, имеющему конструктор по умолчанию. Обратите внимание, что эти обработчики могут создаваться лениво, когда они впервые используются.
- Свойство "<logger>.handlers.ensureCloseOnReset". Это определяет булево значение. Если "<logger>.handlers" не определено или пусто, это свойство игнорируется. В противном случае оно по умолчанию равно
true. Когда значение равноtrue, обработчики, связанные с логгером, гарантированно будут закрыты при вызове reset() и завершении работы. Это можно отключить, явно задав "<logger>.handlers.ensureCloseOnReset=false" в конфигурации. Обратите внимание, что отключение этого свойства влечёт риск утечки ресурсов, поскольку логгер может быть собран сборщиком мусора до вызоваreset(), тем самым не позволяя его обработчикам закрыться в процессеreset(). В этом случае ответственность за закрытие обработчиков ложится на приложение до того, как логгер будет удалён сборщиком мусора. - Свойство "<logger>.useParentHandlers". Это определяет булево значение. По умолчанию каждый логгер обращается к своему родителю помимо обработки собственного сообщения регистрации. Это часто приводит к тому, что сообщения обрабатываются и корневым логгером. При установке этого свойства в значение false, обработчик (Handler) должен быть настроен для этого логгера, иначе сообщения регистрации не будут доставлены.
- Свойство "config". Это свойство предназначено для выполнения произвольного кода конфигурации. Свойство определяет список имён классов, разделённых пробелами или запятыми. Для каждого имени класса будет создан новый экземпляр. Конструктор по умолчанию каждого класса может выполнить произвольный код для обновления конфигурации регистрации, такой как установка уровней логгеров, добавление обработчиков, добавление фильтров и т. д.
Обратите внимание, что все классы, загруженные во время конфигурирования LogManager, сначала ищутся в системном пути класса перед любым пользовательским путём класса. Это включает класс LogManager, любые классы конфигурации и любые классы обработчиков.
Логгеры организованы в иерархию имён на основе их имён, разделённых точками. Таким образом, "a.b.c" является потомком "a.b", но "a.b1" и "a.b2" являются сверстниками.
Все свойства, имена которых заканчиваются на ".level", предполагаются для определения уровней логгеров для логгеров. Таким образом, "foo.level" определяет уровень логгера с именем "foo" и (рекурсивно) для любого из его потомков в иерархии имён. Уровни логов применяются в порядке их определения в файле свойств. Таким образом, настройки уровня для дочерних узлов в дереве должны следовать за настройками их родителей. Свойство с именем ".level" может быть использовано для установки уровня для корня дерева.
Все методы объекта LogManager являются многопоточно безопасными.
- Since:
- 1.4
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
LOGGING_MXBEAN_NAME |
Строковое представление ObjectName для интерфейса управления системой регистрации. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Защищённый конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
LogManager |
addConfigurationListener |
Добавляет слушателя конфигурации, который вызывается каждый раз при чтении конфигурации регистрации. |
boolean |
addLogger |
Добавляет именованный логгер. |
void |
checkAccess() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод полезен только в сочетании с менеджером безопасности, который устарел и подлежит удалению в будущей версии. |
Logger |
getLogger |
Метод поиска именованного логгера. |
Enumeration<String> |
getLoggerNames() |
Получает перечисление известных имён логгеров. |
static LoggingMXBean |
getLoggingMXBean() |
Устаревший. java.util.logging.LoggingMXBean устарел и заменён на java.lang.management.PlatformLoggingMXBean. |
static LogManager |
getLogManager() |
Возвращает глобальный объект LogManager. |
String |
getProperty |
Получает значение свойства регистрации. |
void |
readConfiguration() |
Читает и инициализирует конфигурацию регистрации. |
void |
readConfiguration |
Читает и инициализирует конфигурацию регистрации из заданного потока ввода. |
void |
removeConfigurationListener |
Удаляет ранее зарегистрированного слушателя конфигурации. |
void |
reset() |
Сбрасывает конфигурацию регистрации. |
void |
updateConfiguration |
Обновляет конфигурацию регистрации. |
void |
updateConfiguration |
Обновляет конфигурацию регистрации. |
Подробное описание полей
LOGGING_MXBEAN_NAME
public static final String LOGGING_MXBEAN_NAME
ObjectName для интерфейса управления системой ведения журналов.- С момента:
- 1.5
- См. также:
Подробное описание конструкторов
LogManager
protected LogManager()
Подробное описание методов
getLogManager
public static LogManager getLogManager()
- Возвращает:
- глобальный объект LogManager
addLogger
public boolean addLogger(Logger logger)
Методы фабрики Logger вызывают этот метод для регистрации каждого вновь созданного Logger.
Приложение должно хранить свою ссылку на объект Logger, чтобы избежать его сборки мусора. LogManager может хранить только слабую ссылку.
- Параметры:
-
logger- новый логгер. - Возвращает:
- true, если аргумент логгер был успешно зарегистрирован, false, если логгер с таким именем уже существует.
- Исключения:
-
NullPointerException- если имя логгера null.
getLogger
public Logger getLogger(String name)
Обратите внимание, что так как недоверенный код может создавать логгеры с произвольными именами, этот метод не должен использоваться для поиска логгеров для задач, связанных с безопасностью. Также важно отметить, что логгер, связанный со строкой name, может быть собран мусором в любое время, если нет сильной ссылки на логгер. Вызывающий метод должен проверить возвращаемое значение на null для правильной обработки случая, когда логгер был собран мусором.
- Параметры:
-
name- имя логгера - Возвращает:
- соответствующий логгер или null, если не найден
getLoggerNames
public Enumeration<String> getLoggerNames()
Примечание: логгеры могут добавляться динамически по мере загрузки новых классов. Этот метод сообщает только о логгерах, которые в настоящее время зарегистрированы. Также важно отметить, что этот метод возвращает только имя логгера, а не сильную ссылку на сам логгер. Возвращаемая строка ничего не делает для предотвращения сборки мусора логгера. В частности, если возвращённое имя передаётся в LogManager.getLogger(), то вызывающий метод должен проверить возвращаемое значение из LogManager.getLogger() на null, чтобы должным образом обработать случай, когда логгер был собран мусором в то время, когда его имя было возвращено этим методом.
- Возвращает:
- перечисление строк имён логгеров
readConfiguration
public void readConfiguration() throws IOException, SecurityException
Если системная переменная "java.util.logging.config.class" установлена, то значение переменной обрабатывается как имя класса. Данный класс будет загружен, объект будет создан, и конструктор этого объекта отвечает за чтение начальной конфигурации. (Этот объект может использовать другие системные переменные для управления своей конфигурацией.) Альтернативный класс конфигурации может использовать readConfiguration(InputStream) для определения свойств в LogManager.
Если системная переменная "java.util.logging.config.class" не установлена, то этот метод будет читать начальную конфигурацию из файла свойств и вызывает метод readConfiguration(InputStream) для инициализации конфигурации. Системная переменная "java.util.logging.config.file" может использоваться для указания файла свойств, который будет прочитан в качестве начальной конфигурации; если она не установлена, то используется конфигурация по умолчанию LogManager. Конфигурация по умолчанию обычно загружается из файла свойств "conf/logging.properties" в каталоге установки Java.
Любой зарегистрированный слушатель конфигурации будет вызван после чтения свойств.
- Примечание API:
- Этот
readConfigurationметод должен использоваться только для инициализации конфигурации во время инициализации LogManager или при использовании переменной "java.util.logging.config.class". Когда этот метод вызывается после создания логгеров, и системная переменная "java.util.logging.config.class" не установлена, все существующие логгеры будут сброшены. Затем любые существующие логгеры, имеющие свойство уровня, указанное в новом потоке конфигурации, будут установлены на указанный уровень ведения журнала.Для правильного обновления конфигурации ведения журнала используйте методы
updateConfiguration(java.util.function.Function)илиupdateConfiguration(java.io.InputStream, java.util.function.Function). - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения LoggingPermission("control"). -
IOException- если возникли проблемы с чтением конфигурации.
reset
public void reset() throws SecurityException
Для всех именованных логгеров операция сброса удаляет и закрывает все обработчики и (кроме корневого логгера) устанавливает уровень на null. Уровень корневого логгера устанавливается на Level.INFO.
- Примечание API:
- Вызов этого метода также очищает свойства LogManager properties. Для правильного обновления конфигурации можно использовать метод
updateConfiguration(Function)илиupdateConfiguration(InputStream, Function). - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения LoggingPermission("control").
readConfiguration
public void readConfiguration(InputStream ins) throws IOException, SecurityException
Любой зарегистрированный слушатель конфигурации будет вызван после чтения свойств.
- Примечание API:
- Этот
readConfigurationметод должен использоваться только для инициализации конфигурации во время инициализации LogManager или при использовании переменной "java.util.logging.config.class". Когда этот метод вызывается после создания логгеров, все существующие логгеры будут сброшены. Затем любые существующие логгеры, имеющие свойство уровня, указанное в данном потоке ввода, будут установлены на указанный уровень ведения журнала.Для правильного обновления конфигурации ведения журнала используйте методы
updateConfiguration(java.util.function.Function)илиupdateConfiguration(java.io.InputStream, java.util.function.Function). - Параметры:
-
ins- поток для чтения свойств - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения LoggingPermission("control"). -
IOException- если возникли проблемы с чтением из потока или данный поток не находится в формате файла properties.
updateConfiguration
public void updateConfiguration(Function<String,BiFunction<String,String,String>> mapper) throws IOException
Если системная переменная "java.util.logging.config.file" установлена, то значение переменной указывает на файл свойств, который будет прочитан как новая конфигурация. В противном случае используется конфигурация по умолчанию LogManager.
Конфигурация по умолчанию обычно загружается из файла свойств "conf/logging.properties" в каталоге установки Java.
Этот метод считывает новую конфигурацию и вызывает метод updateConfiguration(ins, mapper) для обновления конфигурации.
- API Note:
- Этот метод обновляет конфигурацию логирования, считывая файл свойств, и игнорирует системную переменную "java.util.logging.config.class". Переменная "java.util.logging.config.class" используется только методом
readConfiguration()для загрузки пользовательского класса конфигурации в качестве начальной конфигурации. - Parameters:
-
mapper- функциональный интерфейс, который принимает ключ конфигурации k и возвращает функцию f(o,n), значение которой будет применено к результирующей конфигурации. Функция f может вернутьnullдля указания того, что свойство k не будет добавлено в результирующую конфигурацию.
Еслиmapperравноnull, то предполагается(k) -> ((o, n) -> n).
Для каждого k, отображаемая функция f будет вызвана со значением, связанным с k в старой конфигурации (т.е. o), и значением, связанным с k в новой конфигурации (т.е. n).
Значениеnullдля o или n указывает на то, что для k не было значения в соответствующей конфигурации. - Throws:
-
SecurityException- если существует менеджер безопасности, и вызывающий его не имеет LoggingPermission("control"), или не имеет необходимых разрешений для настройки конфигурации (например, для открытия файла, указанного для FileHandlers). -
NullPointerException- еслиmapperвозвращает функциюnullпри вызове. -
IOException- если возникли проблемы при чтении файла конфигурации логирования. - Since:
- 9
- See Also:
updateConfiguration
public void updateConfiguration(InputStream ins, Function<String,BiFunction<String,String,String>> mapper) throws IOException
Для каждого ключа конфигурации в существующей конфигурации и конфигурации, заданной входным потоком, заданная функция mapper вызывается для отображения ключа конфигурации в функцию f(o,n), которая принимает старое и новое значения и возвращает результирующее значение, которое будет применено в результирующей конфигурации, как указано в таблице ниже.
Пусть k — ключ конфигурации в старой или новой конфигурации, o — старое значение (т.е. значение, связанное с k в старой конфигурации), n — новое значение (т.е. значение, связанное с k в новой конфигурации), и f — функция, возвращаемая mapper.apply(k): тогда v = f(o,n) — результирующее значение. Если v не null, то свойство k со значением v будет добавлено в результирующую конфигурацию. В противном случае оно будет опущено.
Значение null может быть передано функции f для указания того, что соответствующая конфигурация не имеет ключа конфигурации k. Функция f может вернуть null для указания того, что свойству k не будет соответствовать значение в результирующей конфигурации.
Если mapper равно null, то v будет установлено в n.
Свойства LogManager обновляются с результирующим значением в результирующей конфигурации.
Зарегистрированные слушатели конфигурации будут вызваны после успешного обновления конфигурации.
| Свойство | Поведение результата |
|---|---|
<logger>.level |
|
<logger>.useParentHandlers |
|
<logger>.handlers |
|
<handler-name>.* |
|
config и любые другие свойства |
|
Примеры функций-отображений:
- Замена всех свойств логирования новой конфигурацией:
(k) -> ((o, n) -> n):
это эквивалентно передаче null-параметраmapper. - Объединение новой конфигурации и старой конфигурации и использование нового значения, если k существует в новой конфигурации:
(k) -> ((o, n) -> n == null ? o : n):
как будто объединяются две коллекции следующим образом:result.putAll(oldc); result.putAll(newc).
- Объединение новой конфигурации и старой конфигурации и использование старого значения, если k существует в старой конфигурации:
(k) -> ((o, n) -> o == null ? n : o):
как будто объединяются две коллекции следующим образом:result.putAll(newc); result.putAll(oldc).
- Замена всех свойств новой конфигурацией, кроме свойства обработчика для настройки обработчика логгера, который не является корневым логгером:
(k) -> k.endsWith(".handlers")? ((o, n) -> (o == null ? n : o)): ((o, n) -> n)
Для полной повторной инициализации конфигурации приложение может сначала вызвать reset для полного удаления старой конфигурации, за которым следует updateConfiguration для инициализации новой конфигурации.
- Parameters:
-
ins- поток для чтения свойств -
mapper- функциональный интерфейс, который принимает ключ конфигурации k и возвращает функцию f(o,n), значение которой будет применено к результирующей конфигурации. Функция f может вернутьnullдля указания того, что свойство k не будет добавлено в результирующую конфигурацию.
Еслиmapperравноnull, то предполагается(k) -> ((o, n) -> n).
Значениеnullдля o или n указывает на то, что для k не было значения в соответствующей конфигурации. - Throws:
-
SecurityException- если существует менеджер безопасности, и вызывающий его не имеет LoggingPermission("control"), или не имеет необходимых разрешений для настройки конфигурации (например, для открытия файлов, указанных для FileHandlers). -
NullPointerException- еслиinsравно null или еслиmapperвозвращает null-функцию при вызове. -
IOException- если возникли проблемы при чтении из потока, или заданный поток не имеет формата файла свойств. - Since:
- 9
getProperty
public String getProperty(String name)
- Parameters:
-
name- имя свойства - Returns:
- значение свойства
checkAccess
@Deprecated(since="17", forRemoval=true) public void checkAccess() throws SecurityException
Если проверка не пройдена, выбрасывается SecurityException, иначе выполняется нормальный возврат.
- Возбуждает:
-
SecurityException- если менеджер безопасности существует и у вызывающего объекта нет разрешения LoggingPermission("control").
getLoggingMXBean
@Deprecated(since="9") public static LoggingMXBean getLoggingMXBean()
java.util.logging.LoggingMXBean устарело и заменено на java.lang.management.PlatformLoggingMXBean. Используйте ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class) вместо него.LoggingMXBean для управления логгерами.- Возвращает:
- объект
LoggingMXBean. - С тех пор:
- 1.5
- См. также:
addConfigurationListener
public LogManager addConfigurationListener(Runnable listener)
Слушатель вызывается с привилегиями, ограниченными контекстом вызова этого метода. Порядок вызова слушателей не определен.
Рекомендуется, чтобы слушатели не выбрасывали ошибки или исключения. Если слушатель завершается с необработанной ошибкой или исключением, первое исключение будет передано вызывающему объекту readConfiguration() (или readConfiguration(java.io.InputStream)) после вызова всех слушателей.
- Примечание реализации:
- Если более одного слушателя завершается с необработанной ошибкой или исключением, реализация может записывать дополнительные ошибки или исключения как вспомогательные исключения.
- Параметры:
-
listener- слушатель конфигурации, который будет вызван после изменения конфигурации. - Возвращает:
- Этот LogManager.
- Возбуждает:
-
SecurityException- если менеджер безопасности существует и у вызывающего объекта нет разрешения LoggingPermission("control"). -
NullPointerException- если слушатель равен null. - С тех пор:
- 9
removeConfigurationListener
public void removeConfigurationListener(Runnable listener)
- Параметры:
-
listener- слушатель конфигурации для удаления. - Возбуждает:
-
NullPointerException- если слушатель равен null. -
SecurityException- если менеджер безопасности существует и у вызывающего объекта нет разрешения LoggingPermission("control"). - С тех пор:
- 9
© 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.logging/java/util/logging/LogManager.html