Класс LogManager
public class LogManager extends Object
Этот объект LogManager:
- Управляет иерархическим пространством имён объектов Logger. Все именованные Logger хранятся в этом пространстве имён.
- Управляет набором свойств управления логгированием. Это простые пары ключ-значение, которые могут использоваться обработчиками (Handlers) и другими объектами логгирования для их конфигурации.
Глобальный объект LogManager можно получить, используя LogManager.getLogManager(). Объект LogManager создаётся во время инициализации класса и не может быть изменён после этого.
При запуске класс LogManager находится с помощью системной переменной java.util.logging.manager.
Конфигурация LogManager
LogManager инициализирует конфигурацию логгирования через методreadConfiguration() во время инициализации LogManager. По умолчанию используется конфигурация по умолчанию LogManager. Конфигурация логгирования, считываемая LogManager, должна быть в формате файла свойств properties. 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 являются потокобезопасными.
- С:
- 1.4
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
LOGGING_MXBEAN_NAME |
Строковое представление ObjectName для интерфейса управления системой логгирования. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Защищённый конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
LogManager |
addConfigurationListener |
Добавляет слушателя конфигурации, который вызывается каждый раз, когда считывается конфигурация логгирования. |
boolean |
addLogger |
Добавляет именованный логгер. |
void |
checkAccess() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод изначально проверял, является ли текущий контекст надёжным для изменения конфигурации логгирования. |
Logger |
getLogger |
Метод для поиска именованного логгера. |
Enumeration |
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, если объект logger был успешно зарегистрирован; false, если объект с таким именем уже существует.
- Исключения:
-
NullPointerException- если имя logger равно null.
getLogger
public Logger getLogger(String name)
Обратите внимание, что так как небезопасный код может создавать логирующие объекты с произвольными именами, данный метод не должен использоваться для поиска логирующих объектов в целях безопасности. Также важно отметить, что объект Logger, связанный со строкой name, может быть собран мусором в любое время, если на него нет сильной ссылки. Вызывающий метод должен проверять возвращаемое значение на null, чтобы правильно обрабатывать случай, когда Logger был собран мусором.
- Параметры:
-
name- имя логирующего объекта - Возвращает:
- соответствующий Logger или null, если не найден
getLoggerNames
public Enumeration<String> getLoggerNames()
Примечание: Логирующие объекты могут быть добавлены динамически по мере загрузки новых классов. Этот метод сообщает только о зарегистрированных в данный момент логирующих объектах. Также важно отметить, что этот метод возвращает только имя Logger, а не сильную ссылку на сам Logger. Возвращаемая строка ничего не делает для предотвращения сборки мусора Logger. В частности, если возвращённое имя передано в LogManager.getLogger(), то вызывающий метод должен проверить возвращаемое значение из LogManager.getLogger() на null, чтобы правильно обработать случай, когда Logger был собран мусором за время с момента возврата его имени этим методом.
- Возвращает:
- перечисление строк имён логирующих объектов
readConfiguration
public void readConfiguration() throws IOException
Если системная переменная "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)вместо этого. - Исключения:
-
IOException- если есть проблемы с чтением конфигурации.
reset
public void reset()
Для всех именованных логгеров операция сброса удаляет и закрывает все обработчики и (кроме корневого логгера) устанавливает уровень на null. Уровень корневого логгера устанавливается на Level.INFO.
- Прим. API:
- Вызов этого метода также очищает свойства LogManager . Методы
updateConfiguration(Function)илиupdateConfiguration(InputStream, Function)могут быть использованы для корректного обновления конфигурации.
readConfiguration
public void readConfiguration(InputStream ins) throws IOException
Любой зарегистрированный слушатель конфигурации будет вызван после прочтения свойств.
- Прим. API:
- Этот
readConfigurationметод должен использоваться только для инициализации конфигурации во время инициализации LogManager или в случае использования системной переменной "java.util.logging.config.class". Если этот метод вызывается после создания логгеров, все существующие логгеры будут сброшены. Затем все существующие логгеры, у которых свойство уровня задано в заданном потоке ввода, будут установлены на указанный уровень логирования.Для корректного обновления конфигурации логирования используйте методы
updateConfiguration(java.util.function.Function)илиupdateConfiguration(java.io.InputStream, java.util.function.Function)вместо этого. - Параметры:
-
ins- поток ввода для чтения свойств - Исключения:
-
IOException- если есть проблемы с чтением из потока или заданный поток не соответствует формату файла свойств.
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:
- Этот метод обновляет конфигурацию логирования из файла свойств и игнорирует системную переменную "java.util.logging.config.class". Переменная "java.util.logging.config.class" используется только методом
readConfiguration()для загрузки пользовательского класса конфигурации в качестве начальной конфигурации. - Параметры:
-
mapper- функциональный интерфейс, который принимает ключ конфигурации k и возвращает функцию f(o,n), возвращаемое значение которой будет применено к результирующей конфигурации. Функция f может вернутьnull, чтобы указать, что свойство k не будет добавлено в результирующую конфигурацию.
Еслиmapperравнаnull, то(k) -> ((o, n) -> n)предполагается.
Для каждого k, сопоставленная функция f будет вызвана со значением, связанным с k в старой конфигурации (т.е. o) и значением, связанным с k в новой конфигурации (т.е. n).
Значениеnullдля o или n указывает, что соответствующего значения для k не было в соответствующей конфигурации. - Исключения:
-
NullPointerException- еслиmapperвозвращает функциюnullпри вызове. -
IOException- если возникли проблемы с чтением файла конфигурации логирования. - С момента:
- 9
- См. также:
обновитьКонфигурацию
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):
Это эквивалентно передаче нулевого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 для инициализации новой конфигурации.
- Параметры:
-
ins- поток для чтения свойств -
mapper- функциональный интерфейс, который принимает ключ конфигурации k и возвращает функцию f(o,n), значение которой будет применено к результирующей конфигурации. Функция f может вернутьnull, чтобы указать, что свойство k не будет добавлено в результирующую конфигурацию.
Еслиmapperравноnull, то(k) -> ((o, n) -> n)предполагается.
Для каждого k, отображаемая функция f будет вызвана со значением, связанным с k в старой конфигурации (т. е. o), и значением, связанным с k в новой конфигурации (т. е. n).
Значениеnullдля o или n указывает, что для k в соответствующей конфигурации не было значения. - Исключения:
-
NullPointerException- еслиinsравно null или еслиmapperвозвращает нулевую функцию при вызове. -
IOException- если при чтении из потока возникли проблемы или данный поток не находится в формате файла свойств. - С:
- 9
получитьСвойство
public String getProperty(String name)
- Параметры:
-
name- имя свойства - Возвращает:
- значение свойства
checkAccess
@Deprecated(since="17", forRemoval=true) public void checkAccess()
getLoggingMXBean
@Deprecated(since="9") public static LoggingMXBean getLoggingMXBean()
java.util.logging.LoggingMXBean устарел и заменён на java.lang.management.PlatformLoggingMXBean. Используйте ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class) вместо этого.LoggingMXBean для управления регистраторами.- Возвращает:
- объект
LoggingMXBean. - С:
- 1.5
- См. также:
добавитьСлушателяКонфигурации
public LogManager addConfigurationListener(Runnable listener)
Слушатель вызывается с привилегиями, ограниченными вызывающим контекстом этого метода. Порядок вызова слушателей не определён.
Рекомендуется, чтобы слушатели не генерировали ошибки или исключения. Если слушатель завершается с непредвиденной ошибкой или исключением, первое исключение будет передано вызывающему методу readConfiguration() (или readConfiguration(java.io.InputStream)) после того, как все слушатели будут вызваны.
- Примечание реализации:
- Если более одного слушателя завершается с непредвиденной ошибкой или исключением, реализация может записать дополнительные ошибки или исключения в качестве подавленных исключений.
- Параметры:
-
listener- слушатель конфигурации, который будет вызван после изменения конфигурации. - Возвращает:
- Этот LogManager.
- Исключения:
-
NullPointerException- если слушатель равен null. - С:
- 9
removeConfigurationListener
public void removeConfigurationListener(Runnable listener)
- Параметры:
-
listener- слушатель конфигурации, который нужно удалить. - Исключения:
-
NullPointerException- если слушатель равен null. - С:
- 9
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.logging/java/util/logging/LogManager.html