Класс 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.
Свойства для логгеров и обработчиков будут иметь имена, начинающиеся с имени обработчика или логгера, разделённого точками.
Глобальные свойства регистрации могут включать:
- Свойство "handlers". Оно определяет список имён классов обработчиков, разделённых пробелами или запятыми, для загрузки и регистрации обработчиков на корневом логгере (логгер с именем ""). Каждое имя класса должно соответствовать классу обработчика, имеющему конструктор по умолчанию. Обратите внимание, что эти обработчики могут создаваться лениво, когда они используются впервые.
- Свойство "<logger>.handlers". Оно определяет список имён классов обработчиков, разделённых пробелами или запятыми, для загрузки и регистрации обработчиков для указанного логгера. Каждое имя класса должно соответствовать классу обработчика, имеющему конструктор по умолчанию. Обратите внимание, что эти обработчики могут создаваться лениво, когда они используются впервые.
- Свойство "<logger>.handlers.ensureCloseOnReset". Это определяет булево значение. Если "<logger>.handlers" не определено или пусто, это свойство игнорируется. В противном случае оно по умолчанию равно
true. Когда значение равноtrue, обработчики, связанные с логгером, гарантированно будут закрыты при вызове reset() и завершении работы. Это можно отключить, явно задав "<logger>.handlers.ensureCloseOnReset=false" в конфигурации. Обратите внимание, что отключение этого свойства может привести к утечке ресурсов, так как логгер может быть собран сборщиком мусора до вызоваreset(), тем самым предотвращая закрытие его обработчиков приreset(). В этом случае приложение должно гарантировать закрытие обработчиков перед тем, как логгер будет собран сборщиком мусора. - Свойство "<logger>.useParentHandlers". Это определяет булево значение. По умолчанию каждый логгер вызывает своего родителя в дополнение к обработке собственного сообщения регистрации, что часто приводит к обработке сообщений также корневым логгером. При установке этого свойства в значение false обработчик должен быть настроен для этого логгера, иначе сообщения регистрации не будут переданы.
- Свойство "config". Это свойство предназначено для выполнения произвольного кода конфигурации. Свойство определяет список имён классов, разделённых пробелами или запятыми. Новый экземпляр будет создан для каждого именованного класса. Конструктор по умолчанию каждого класса может выполнять произвольный код для обновления конфигурации регистрации, например, для установки уровней логгеров, добавления обработчиков, добавления фильтров и т. д.
Обратите внимание, что все классы, загруженные во время конфигурации LogManager, сначала ищутся в системном пути класса, а затем в пользовательском пути класса. Это включает класс LogManager, любые конфигурационные классы и любые классы обработчиков.
Логгеры организованы в иерархию имён, основанную на именах, разделённых точками. Таким образом, "a.b.c" является дочерним элементом "a.b", а "a.b1" и "a.b2" — равноправными.
Все свойства, имена которых оканчиваются на ".level", предполагаются для определения уровней регистрации для логгеров. Таким образом, "foo.level" определяет уровень регистрации для логгера с именем "foo" и (рекурсивно) для всех его дочерних элементов в иерархии имён. Уровни регистрации применяются в порядке их определения в файле свойств. Таким образом, настройки уровня для дочерних узлов в дереве должны следовать за настройками для их родителей. Свойство ".level" можно использовать для установки уровня для корня дерева.
Все методы объекта LogManager многопоточно безопасны.
- С момента:
- 1.4
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static String | LOGGING_MXBEAN_NAME | Строковое представление |
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | LogManager() | Защищённый конструктор. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
LogManager | addConfigurationListener(Runnable listener) | Добавляет слушателя конфигурации, который вызывается каждый раз при считывании конфигурации регистрации. |
boolean | addLogger(Logger logger) | Добавляет именованный логгер. |
void | checkAccess() | Проверяет, что текущий контекст надёжен для изменения конфигурации регистрации. |
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, чтобы избежать его сборки мусора. 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 . Для правильного обновления конфигурации можно использовать метод
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- если возникли проблемы с чтением из потока или указанный поток не находится в формате файла свойств.
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 в соответствующей конфигурации отсутствовало. - Выбрасывает:
-
SecurityException- если существует менеджер безопасности, а у вызывающего метода нет разрешения LoggingPermission("control"), или нет разрешений, необходимых для настройки конфигурации (например, открытие файла, указанного для FileHandlers и т. д.). -
NullPointerException- еслиmapperвозвращаетnullфункцию при вызове. -
IOException- если возникли проблемы с чтением файла конфигурации ведения журнала. - С момента:
- 9
- См. также:
updateConfiguration(java.io.InputStream, java.util.function.Function)
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):
это эквивалентно передаче nullmapperпараметра. - Объединить новую конфигурацию и старую конфигурацию и использовать новое значение, если 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 отсутствовало в соответствующей конфигурации. - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения LoggingPermission("control"), или нет разрешений, необходимых для настройки конфигурации (например, открытия файлов, указанных для FileHandlers) -
NullPointerException- еслиinsравно null или еслиmapperвозвращает нулевую функцию при вызове. -
IOException- если при чтении из потока возникли проблемы или заданный поток не имеет формата файла свойств. - С:
- 9
getProperty
public String getProperty(String name)
Получить значение свойства логирования. Метод возвращает null, если свойство не найдено.
- Параметры:
-
name- имя свойства - Возвращает:
- значение свойства
checkAccess
public void checkAccess()
throws SecurityException Проверить, доверяет ли текущий контекст модификации конфигурации логирования. Это требует LoggingPermission("control").
Если проверка завершается неудачно, мы бросаем 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
- См. также:
PlatformLoggingMXBean
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, 2020, 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/11/docs/api/java.logging/java/util/logging/LogManager.html