Spec-Zone.ru › OpenJDK 24

Класс LogManager

java.lang.Object
java.util.logging.LogManager
public class LogManager extends Object
Существует единственный глобальный объект LogManager, который используется для поддержания набора общего состояния по логгерам и службам логгирования.

Этот объект 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 для интерфейса управления системой логгирования.

Краткое описание конструкторов

LogManager()
Модификатор Конструктор Описание
protected
Защищённый конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
LogManager addConfigurationListener(Runnable listener)
Добавляет слушателя конфигурации, который вызывается каждый раз, когда считывается конфигурация логгирования.
boolean addLogger(Logger logger)
Добавляет именованный логгер.
void checkAccess()
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии.
Этот метод изначально проверял, является ли текущий контекст надёжным для изменения конфигурации логгирования.
Logger getLogger(String name)
Метод для поиска именованного логгера.
Enumeration<String> getLoggerNames()
Возвращает перечисление известных имён логгеров.
static LoggingMXBean getLoggingMXBean()
Устаревший.
java.util.logging.LoggingMXBean устарел и заменён на java.lang.management.PlatformLoggingMXBean.
static LogManager getLogManager()
Возвращает глобальный объект LogManager.
String getProperty(String name)
Получает значение свойства логгирования.
void readConfiguration()
Считывает и инициализирует конфигурацию логгирования.
void readConfiguration(InputStream ins)
Считывает и инициализирует конфигурацию логгирования из заданного потока ввода.
void removeConfigurationListener(Runnable listener)
Удаляет ранее зарегистрированного слушателя конфигурации.
void reset()
Сбрасывает конфигурацию логгирования.
void updateConfiguration(InputStream ins, Function<String, BiFunction<String,String,String>> mapper)
Обновляет конфигурацию логгирования.
void updateConfiguration(Function<String, BiFunction<String,String,String>> mapper)
Обновляет конфигурацию логгирования.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание полей

LOGGING_MXBEAN_NAME

public static final String LOGGING_MXBEAN_NAME
Строковое представление ObjectName для интерфейса управления логированием.
С момента:
1.5
См. также:
  • PlatformLoggingMXBean
  • Значения константных полей

Подробное описание конструкторов

LogManager

protected LogManager()
Защищенный конструктор. Он защищен, чтобы контейнерные приложения (например, контейнеры J2EE) могли наследовать от объекта. Он не является общедоступным, так как предполагается, что существует только один объект LogManager, значение которого извлекается вызовом LogManager.getLogManager.

Подробное описание методов

getLogManager

public static LogManager getLogManager()
Возвращает глобальный объект LogManager.
Возвращает:
глобальный объект LogManager

addLogger

public boolean addLogger(Logger logger)
Добавляет логирующий объект с заданным именем. Эта операция ничего не делает и возвращает false, если уже зарегистрирован объект с таким именем.

Методы фабрики 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
См. также:
  • updateConfiguration(java.io.InputStream, java.util.function.Function)

обновитьКонфигурацию

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
  • Если результирующая конфигурация определяет уровень для регистратора и если результирующий уровень отличается от уровня, указанного в старой конфигурации, или не указан в старой конфигурации, то если регистратор существует или существуют дочерние элементы для этого регистратора, уровень этого регистратора будет обновлен, а изменение будет распространено на все существующие дочерние элементы регистратора. Это может привести к созданию регистратора, если это необходимо.
  • Если старая конфигурация определяла уровень для регистратора, а результирующая конфигурация — нет, то это изменение не будет распространено на существующие регистраторы, если таковые имеются. Для полной замены конфигурации — вызывающий должен поэтому вызвать reset для очистки текущей конфигурации перед вызовом updateConfiguration.
<logger>.useParentHandlers
  • Если либо результирующее, либо старое значение свойства useParentHandlers не равно null, то если регистратор существует или существуют дочерние элементы для этого регистратора, этот регистратор будет обновлен до результирующего значения. Значение свойства useParentHandlers — это значение, указанное в конфигурации; если не указано, значение по умолчанию равно true.
<logger>.handlers
  • Если результирующая конфигурация определяет список обработчиков для регистратора, и если результирующий список отличается от списка, указанного в старой конфигурации для этого регистратора (который может быть пустым), то если регистратор существует или существуют его дочерние элементы, обработчики, связанные с этим регистратором, будут закрыты и удалены, и новые обработчики будут созданы в соответствии с результирующей конфигурацией и добавлены к этому регистратору, создавая этот регистратор при необходимости.
  • Если старая конфигурация определяла обработчики для регистратора, а результирующая конфигурация — нет, если этот регистратор существует, его обработчики будут удалены и закрыты.
  • Изменение списка обработчиков существующего регистратора приведет к удалению и закрытию всех его предыдущих обработчиков, независимо от того, были ли они созданы из конфигурации или программно. Старые обработчики будут заменены новыми, если таковые имеются.
<handler-name>.*
  • Свойства, настроенные/измененные в классах обработчиков, будут влиять только на вновь созданные обработчики. Если у узла в старой и результирующей конфигурации указан один и тот же список обработчиков, то эти обработчики останутся неизменными.
config и любое другое свойство
  • Результирующее значение для этих свойств будет храниться в свойствах LogManager, но updateConfiguration не будет анализировать или обрабатывать их значения.

Примеры функций-отображений:

  • Заменить все свойства регистрации новой конфигурацией:

    (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)
Получить значение свойства регистрации. Метод возвращает null, если свойство не найдено.
Параметры:
name - имя свойства
Возвращает:
значение свойства

checkAccess

@Deprecated(since="17", forRemoval=true) public void checkAccess()
Устаревший, подлежит удалению: Этот элемент API подлежит удалению в будущей версии.
Этот метод изначально проверял, является ли текущий контекст надёжным для изменения конфигурации регистрации. Этот метод был полезен только в сочетании с менеджером безопасности, который больше не поддерживается. Нет замены для менеджера безопасности или этого метода.
Ничего не делает.

getLoggingMXBean

@Deprecated(since="9") public static LoggingMXBean getLoggingMXBean()
Устаревший.
java.util.logging.LoggingMXBean устарел и заменён на java.lang.management.PlatformLoggingMXBean. Используйте ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class) вместо этого.
Возвращает LoggingMXBean для управления регистраторами.
Возвращает:
объект LoggingMXBean.
С:
1.5
См. также:
  • PlatformLoggingMXBean

добавитьСлушателяКонфигурации

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API