Logger setLevel() method in Java with Examples
setLevel() method of a Logger class used to set the log level to describe which message levels will be logged by this logger. The level we want to set is passed as a parameter. Message levels lower than passed log level value will be discarded by the logger. The level value Level.OFF can be used to turn off logging.
Log Levels: The log levels control the logging details. They determine the extent to which depth the log files are generated. Each level is associated with a numeric value and there are 7 basic log levels and 2 special ones. We need to specify the desired level of logging every time, we seek to interact with the log system. To know more about Log Levels, refer this Log Levels in Logging.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
Syntax:
Parameters: This method accepts one parameter newLevel which represents the new value for the log level.
Return value: This method returns nothing.
Exception: This method throws SecurityException if a security manager exists, this logger is not anonymous, and the caller does not have LoggingPermission(“control”).
Below programs illustrate the setLevel() method:
Program 1:
Как java понимает какой уровень главнее при установке setlevel
Объекты регистратора могут быть получены запросами к одному из getLogger методов фабрики. Они или создадут новый Регистратор или возвратят подходящий существующий Регистратор. Важно отметить что Регистратор, возвращенный одним из getLogger методы фабрики могут быть собраны «мусор» в любое время, если сильная ссылка на Регистратор не сохраняется.
Журналирование сообщений будет передано зарегистрированным Объектам-обработчикам, которые могут передать сообщения ко множеству мест назначения, включая консоли, файлы, журналы ОС, и т.д.
Каждый Регистратор отслеживает «родительский» Регистратор, который является его самым близким существующим предком в пространстве имен Logger.
Каждому Регистратору связали «Уровень» с этим. Это отражает минимальный уровень, о котором заботится этот регистратор. Если уровень Регистратора устанавливается в null, то его эффективный уровень наследован от его родителя, который может поочередно получить это рекурсивно из его родителя, и так далее дерево.
Уровень журнала может быть сконфигурирован основанный на свойствах от конфигурационного файла журналирования, как описано в описании класса LogManager. Однако это может также быть динамически изменено запросами к методу Logger.setLevel. Если уровень регистратора изменяется, изменение может также влиять на дочерние регистраторы, так как любой дочерний регистратор, у которого есть null как его уровень, наследует свой эффективный уровень от его родителя.
На каждом вызове журналирования Регистратор первоначально выполняет дешевую проверку уровня запроса (например, СЕРЬЕЗНЫЙ или ПРЕКРАСНЫЙ) против эффективного уровня журнала регистратора. Если уровень запроса ниже чем уровень журнала, вызов журналирования сразу возвращается.
После передачи этого начального (дешевого) теста Регистратор выделит LogRecord, чтобы описать сообщение журналирования. Это тогда вызовет Фильтр (если есть), чтобы сделать, более подробное начинает работу, должна ли запись быть опубликована. Если это передаст это, то тогда опубликует LogRecord к его выходным Обработчикам. По умолчанию регистраторы также публикуют к Обработчикам их родителя, рекурсивно дерево.
Каждый Регистратор может сделать, чтобы ResourceBundle назвал связанным с этим. Именованный пакет будет использоваться для того, чтобы локализовать сообщения журналирования. Если Регистратор не сделает, чтобы его собственный ResourceBundle назвал, то он наследует имя ResourceBundle от своего родителя, рекурсивно дерево.
Большинство выходных методов регистратора берет параметр «сообщения». Этим параметром сообщения может быть или необработанное значение или ключ локализации. Во время форматирования, если регистратор имеет (или наследовался), ResourceBundle локализации и если у ResourceBundle есть отображение для строки сообщения, то строка сообщения заменяется локализованным значением. Иначе исходная строка сообщения используется. Как правило, средства форматирования используют java.text. Форматирование стиля MessageFormat, чтобы отформатировать параметры, таким образом, например строка формата» <0><1>» отформатировала бы два параметра как строки.
Отображая имена ResourceBundle к ResourceBundles, Регистратор сначала попытается использовать ContextClassLoader Потока. Если это будет нулем, то он попробует SystemClassLoader вместо этого. Поскольку временная функция перехода в начальной реализации, если Регистратор неспособен определить местоположение ResourceBundle от ContextClassLoader или SystemClassLoader Регистратор, будет также искать стек класса и использовать последовательный вызов ClassLoaders, чтобы попытаться определить местоположение ResourceBundle. (Этот поиск стека вызовов должен позволить контейнеры переходу к использованию ContextClassLoaders и, вероятно, будет удален в будущих версиях.)
Форматирование (включая локализацию) является ответственностью выходного Обработчика, который будет обычно вызывать Средство форматирования.
Отметьте, что форматирование не должно произойти синхронно. Это может быть задержано, пока LogRecord фактически не пишется внешнему приемнику.
Методы журналирования группируются в пяти основных категориях:
Есть ряд методов «журнала», которые берут уровень журнала, строку сообщения, и дополнительно некоторые параметры к строке сообщения.
Есть ряд «logp» методы (для «журнала, точного»), которые походят на методы «журнала», но также и берут явное исходное имя класса и имя метода.
Есть ряд «logrb» метод (для «журнала с пакетом ресурса»), которые походят на «logp» метод, но также и берут явное имя пакета ресурса для использования в локализации сообщения журнала.
Есть методы удобства для того, чтобы проследить записи метода («входящие» методы), возвраты метода («выходящие» методы) и выдать исключения (методы «броска»).
Наконец, есть ряд методов удобства для использования в очень самых простых случаях, когда разработчик просто хочет зарегистрировать простую строку на данном уровне журнала. Эти методы называют в честь имен стандартного уровня («серьезными», «предупреждение», «информация», и т.д.) и берут единственный параметр, строку сообщения.
Для методов, которые не берут явное исходное имя и имя метода, платформа Журналирования сделает «максимальные усилия», чтобы определить который класс и метод, вызванный в метод журналирования. Однако, важно понять, что эта автоматически выведенная информация может только быть приблизительной (или может даже быть вполне неправильным!). Виртуальным машинам позволяют сделать обширную оптимизацию, когда JITing и может полностью удалить стековые фреймы, лишая возможности достоверно определять местоположение класса вызова и метода.
Все методы на Регистраторе мультиориентированы на многопотоковое исполнение.
Разделение на подклассы информации: Отметьте, что класс LogManager может обеспечить свою собственную реализацию именованных Регистраторов для любой точки в пространстве имен. Поэтому, любые подклассы Регистратора (если они не реализуются в соединении с новым классом LogManager) должны заботиться, чтобы получить экземпляр Регистратора из класса LogManager и должны делегировать операции, такие как «isLoggable» и «журнал (Запись журнала)» к тому экземпляру. Отметьте, что, чтобы прервать весь вывод журналирования, подклассы должны только переопределить журнал (Запись журнала) метод. Все другие методы журналирования реализуются как запросы к этому журналу (Запись журнала) метод.
Полевая Сводка
Сводка конструктора
| Модификатор | Конструктор и Описание |
|---|---|
| protected | Logger(String name, String resourceBundleName) |
Сводка метода
| Модификатор и Тип | Метод и Описание |
|---|---|
| void | addHandler(Handler handler) |
Методы java.lang унаследованный от класса. Объект
Полевая Деталь
GLOBAL_LOGGER_NAME
глобальная переменная
Деталь конструктора
Регистратор
Регистратор будет первоначально сконфигурирован с нулевым Уровнем и с набором useParentHandlers к истине.
Деталь метода
getGlobal
getLogger
Если новый регистратор будет создаваться, то его уровень журнала будет сконфигурирован основанный на конфигурации LogManager, и это будет сконфигурированный, чтобы также отправить вывод журналирования Обработчикам его родителя. Это будет зарегистрировано в глобальном пространстве имен LogManager.
Отметьте: LogManager может только сохранить слабую ссылку на недавно создаваемый Регистратор. Важно понять, что ранее создаваемый Регистратор с именем может быть собран «мусор» в любое время, если нет никакой сильной ссылки на Регистратор. В частности это означает что два компенсационных вызова как getLogger(«MyLogger»).log(. ) может использовать различные объекты Регистратора по имени «MyLogger», если нет никакой сильной ссылки на Регистратор по имени «MyLogger» в другом месте в программе.
getLogger
Если новый регистратор будет создаваться, то его уровень журнала будет сконфигурирован основанный на LogManager, и это будет сконфигурированный, чтобы также отправить вывод журналирования Обработчикам его родителя. Это будет зарегистрировано в глобальном пространстве имен LogManager.
Если именованный Регистратор уже существует и еще не имеет пакета ресурса локализации тогда, данное имя пакета ресурса используется. Если именованный Регистратор уже существует и имеет различное имя пакета ресурса тогда, IllegalArgumentException бросается.
getAnonymousLogger
Этот метод фабрики прежде всего предназначается для использования от апплетов. Поскольку получающийся Регистратор является анонимным, это может быть сохранено частным классом создания. Это устраняет потребность для нормальных проверок безопасности, которая поочередно позволяет недоверяемому коду апплета обновлять состояние управления Регистратора. Например апплет может сделать setLevel или addHandler на анонимном Регистраторе.
Даже если новый регистратор является анонимным, он конфигурируется, чтобы иметь корневой регистратор («») как его родитель. Это означает, что по умолчанию наследовало свой эффективный уровень и обработчики от корневого регистратора.
getAnonymousLogger
Этот метод фабрики прежде всего предназначается для использования от апплетов. Поскольку получающийся Регистратор является анонимным, это может быть сохранено частным классом создания. Это устраняет потребность для нормальных проверок безопасности, которая поочередно позволяет недоверяемому коду апплета обновлять состояние управления Регистратора. Например апплет может сделать setLevel или addHandler на анонимном Регистраторе.
Даже если новый регистратор является анонимным, он конфигурируется, чтобы иметь корневой регистратор («») как его родитель. Это означает, что по умолчанию наследовало свой эффективный уровень и обработчики от корневого регистратора.
getResourceBundle
getResourceBundleName
setFilter
После передачи начальной проверки «уровня» Регистратор вызовет этот Фильтр, чтобы проверить, должна ли запись журнала действительно быть опубликована.
getFilter
журнал
Все другие методы журналирования в этом классе вызывают через этот метод, чтобы фактически выполнить любое журналирование. Подклассы могут переопределить этот единственный метод, чтобы получить все действие журнала.
журнал
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
журнал
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
журнал
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
журнал
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данные параметры сохранены в LogRecord, который передается всем зарегистрированным выходным обработчикам.
Отметьте, что брошенный параметр сохранен в LogRecord брошенное свойство, а не свойство параметров LogRecord. Таким образом обработанное особенно выходными Средствами форматирования и не обрабатывается как параметр форматирования к свойству сообщения LogRecord.
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данные параметры сохранены в LogRecord, который передается всем зарегистрированным выходным обработчикам.
Отметьте, что брошенный параметр сохранен в LogRecord брошенное свойство, а не свойство параметров LogRecord. Таким образом обработанное особенно выходными Средствами форматирования и не обрабатывается как параметр форматирования к свойству сообщения LogRecord.
logrb
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
Строка сообщения локализуется, используя именованный пакет ресурса. Если имя пакета ресурса является нулем, или пустой Строкой или недопустимый тогда, строка сообщения не локализуется.
logrb
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
Строка сообщения локализуется, используя именованный пакет ресурса. Если имя пакета ресурса является нулем, или пустой Строкой или недопустимый тогда, строка сообщения не локализуется.
logrb
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, соответствующий LogRecord создается и передается всем зарегистрированным выходным Объектам-обработчикам.
Строка сообщения локализуется, используя именованный пакет ресурса. Если имя пакета ресурса является нулем, или пустой Строкой или недопустимый тогда, строка сообщения не локализуется.
logrb
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данные параметры сохранены в LogRecord, который передается всем зарегистрированным выходным обработчикам.
Строка сообщения локализуется, используя именованный пакет ресурса. Если имя пакета ресурса является нулем, или пустой Строкой или недопустимый тогда, строка сообщения не локализуется.
Отметьте, что брошенный параметр сохранен в LogRecord брошенное свойство, а не свойство параметров LogRecord. Таким образом обработанное особенно выходными Средствами форматирования и не обрабатывается как параметр форматирования к свойству сообщения LogRecord.
выход
выход
бросок
Если регистратор в настоящий момент включается для данного уровня сообщения тогда, данные параметры сохранены в LogRecord, который передается всем зарегистрированным выходным обработчикам. Сообщение LogRecord устанавливается «БРОСИТЬ».
Отметьте, что брошенный параметр сохранен в LogRecord брошенное свойство, а не свойство параметров LogRecord. Таким образом обработанное особенно выходными Средствами форматирования и не обрабатывается как параметр форматирования к свойству сообщения LogRecord.
серьезный
Если регистратор в настоящий момент включается для СЕРЬЕЗНОГО уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
предупреждение
Если регистратор в настоящий момент включается для уровня Предупреждающего сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
информация
Если регистратор в настоящий момент включается для уровня сообщения ИНФОРМАЦИИ тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
конфигурация
Если регистратор в настоящий момент включается для уровня сообщения КОНФИГУРАЦИИ тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
прекрасный
Если регистратор в настоящий момент включается для ПРЕКРАСНОГО уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
более прекрасный
Если регистратор в настоящий момент включается для БОЛЕЕ ПРЕКРАСНОГО уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
самый прекрасный
Если регистратор в настоящий момент включается для САМОГО ПРЕКРАСНОГО уровня сообщения тогда, данное сообщение передается ко всем зарегистрированным выходным Объектам-обработчикам.
setLevel
Если новый уровень является нулем, это означает, что этот узел должен наследовать свой уровень от его самого близкого предка с определенным (ненулевым) значением уровня.
getLevel
isLoggable
getName
addHandler
По умолчанию Регистраторы также отправляют свой вывод их родительскому регистратору. Обычно корневой Регистратор конфигурируется с рядом Обработчиков, которые по существу действуют как обработчики по умолчанию для всех регистраторов.
removeHandler
Возвраты тихо, если данный Обработчик не находится или является нулем
getHandlers
setUseParentHandlers
getUseParentHandlers
getParent
Этот метод возвращает самого близкого существующего родителя в пространстве имен. Таким образом, если Регистратор вызовут «a.b.c.d», и Регистратор, названный «a.b», был создан, но никакой регистратор «a.b.c» существует, то вызов getParent на Регистраторе «a.b.c.d» возвратит Регистратор «a.b».
Результатом будет нуль, если это вызовут на корневом Регистраторе в пространстве имен.
setParent
Это нельзя вызвать от кода программы.
Логирование в Java / quick start
В ходе моей работы в компании DataArt я, в числе прочего, занимаюсь менторской деятельностью. В частности это включает в себя проверку учебных заданий сделанных практикантами. В последнее время в заданиях наметилась тенденция «странного» использования логеров. Мы с коллегами решили включить в текст задания ссылку на статью с описанием java logging best practices, но оказалось, что такой статьи в которой бы просто и без лишних деталей на практике объяснялось бы как надо писать в лог на Java, вот так вот с ходу не находится.
Данная статья не содержит каких-то откровений, в ней не рассматриваются тонкости какого либо из многочисленных java logging frameworks. Здесь рассказываю как записать в лог так, чтобы это не вызвало удивления у Ваших коллег, основная цель написания включить ее в список обязательного чтения для практикантов. Если все еще интересно, читайте дальше
Пример №1
Хорошо
Плохо
По сути тоже самое но букв больше и читается не так легко.
Замечание между примерами
Пример №2
Хорошо
Плохо
Если логировать только ex.toString(), то потом Вы не сможете понять в какой строке изначально сработало исключение.
Пример №3
Логер надо конфигурировать. Есть конфигурация по умолчанию она выводит в консоль все сообщения с уровнем INFO и выше. Она достаточно хороша, для разработки из IDE, но для реального приложения ее обычно неплохо бы подправить.
Какие тут есть варианты
По умолчанию: Файл logging.properties для уровня INFO, вывод в консоль
#Console handler
handlers= java.util.logging.ConsoleHandler
.level=INFO
Делаем логирование более подробным выводим еще и сообщения уровня FINE
#Console handler
handlers= java.util.logging.ConsoleHandler
.level=FINE
java.util.logging.ConsoleHandler.level = FINE
Выводим лог сообщения куда-то еще
Чтобы решить эти проблемы был придуман java.util.logging.FileHandler — хэндлер который выводит лог сообщения в файл. При этом он умеет ротировать файлы, т.е. после достижения максимально допустимого размера, он дописывает в файл текщуее лог сообщение и открывает новый файл с инкрементальным префиксом. И так по кругу. Например
создаст вот такие файлы (последняя колонка — размер в байтах)
Мы указали максимальный размер 50 байтов, в реальной жизни надо скорее указывать не меньше мегабайта, например вот так (я знаю, что 1000000 это чуть меньше мегабайта, но кому охота по памяти писать 1048576, если суть дела это фактически не меняет)
В примере, как мы видим, файлы получились больше 50 байт потому что размер по сути округляется вверх до последнего целого лог сообщения. Т.е. если Вы укажете размер 1 байт и запишете лог сообщение размером в 1000 байт то размер файла станет 1000 байт и после этого лог сообщения файл закроется и откроется следующий.
copy & paste конфиг для реальной жизни, его вполне хватает для большинства service, console и desktop приложений.
Последняя часть магии
Первый чуть более правильный ибо он декларативный и работает сразу, до того как начал работать код Вашего приложения.
Вот так
java Djava.util.logging.config.file=logging.properties com.dataart.application.ClassName
Но к сожалению менять строку запуска не всегда можно или не всегда удобно. Второй способ тоже неплохо работает.
Что осталось за кадром
Как java понимает какой уровень главнее при установке setlevel
Logger objects may be obtained by calls on one of the getLogger factory methods. These will either create a new Logger or return a suitable existing Logger. It is important to note that the Logger returned by one of the getLogger factory methods may be garbage collected at any time if a strong reference to the Logger is not kept.
Logging messages will be forwarded to registered Handler objects, which can forward the messages to a variety of destinations, including consoles, files, OS logs, etc.
Each Logger keeps track of a «parent» Logger, which is its nearest existing ancestor in the Logger namespace.
Each Logger has a «Level» associated with it. This reflects a minimum Level that this logger cares about. If a Logger’s level is set to null, then its effective level is inherited from its parent, which may in turn obtain it recursively from its parent, and so on up the tree.
The log level can be configured based on the properties from the logging configuration file, as described in the description of the LogManager class. However it may also be dynamically changed by calls on the Logger.setLevel method. If a logger’s level is changed the change may also affect child loggers, since any child logger that has null as its level will inherit its effective level from its parent.
On each logging call the Logger initially performs a cheap check of the request level (e.g., SEVERE or FINE) against the effective log level of the logger. If the request level is lower than the log level, the logging call returns immediately.
After passing this initial (cheap) test, the Logger will allocate a LogRecord to describe the logging message. It will then call a Filter (if present) to do a more detailed check on whether the record should be published. If that passes it will then publish the LogRecord to its output Handlers. By default, loggers also publish to their parent’s Handlers, recursively up the tree.
Each Logger may have a ResourceBundle name associated with it. The named bundle will be used for localizing logging messages. If a Logger does not have its own ResourceBundle name, then it will inherit the ResourceBundle name from its parent, recursively up the tree.
Most of the logger output methods take a «msg» argument. This msg argument may be either a raw value or a localization key. During formatting, if the logger has (or inherits) a localization ResourceBundle and if the ResourceBundle has a mapping for the msg string, then the msg string is replaced by the localized value. Otherwise the original msg string is used. Typically, formatters use java.text.MessageFormat style formatting to format parameters, so for example a format string » <0><1>» would format two parameters as strings.
When mapping ResourceBundle names to ResourceBundles, the Logger will first try to use the Thread’s ContextClassLoader. If that is null it will try the SystemClassLoader instead. As a temporary transition feature in the initial implementation, if the Logger is unable to locate a ResourceBundle from the ContextClassLoader or SystemClassLoader the Logger will also search up the class stack and use successive calling ClassLoaders to try to locate a ResourceBundle. (This call stack search is to allow containers to transition to using ContextClassLoaders and is likely to be removed in future versions.)
Formatting (including localization) is the responsibility of the output Handler, which will typically call a Formatter.
Note that formatting need not occur synchronously. It may be delayed until a LogRecord is actually written to an external sink.
The logging methods are grouped in five main categories:
There are a set of «log» methods that take a log level, a message string, and optionally some parameters to the message string.
There are a set of «logp» methods (for «log precise») that are like the «log» methods, but also take an explicit source class name and method name.
There are a set of «logrb» method (for «log with resource bundle») that are like the «logp» method, but also take an explicit resource bundle name for use in localizing the log message.
There are convenience methods for tracing method entries (the «entering» methods), method returns (the «exiting» methods) and throwing exceptions (the «throwing» methods).
Finally, there are a set of convenience methods for use in the very simplest cases, when a developer simply wants to log a simple string at a given log level. These methods are named after the standard Level names («severe», «warning», «info», etc.) and take a single argument, a message string.
For the methods that do not take an explicit source name and method name, the Logging framework will make a «best effort» to determine which class and method called into the logging method. However, it is important to realize that this automatically inferred information may only be approximate (or may even be quite wrong!). Virtual machines are allowed to do extensive optimizations when JITing and may entirely remove stack frames, making it impossible to reliably locate the calling class and method.
All methods on Logger are multi-thread safe.
Subclassing Information: Note that a LogManager class may provide its own implementation of named Loggers for any point in the namespace. Therefore, any subclasses of Logger (unless they are implemented in conjunction with a new LogManager class) should take care to obtain a Logger instance from the LogManager class and should delegate operations such as «isLoggable» and «log(LogRecord)» to that instance. Note that in order to intercept all logging output, subclasses need only override the log(LogRecord) method. All the other logging methods are implemented as calls on this log(LogRecord) method.
Field Summary
| Modifier and Type | Field and Description |
|---|---|
| static Logger | global |
Constructor Summary
| Modifier | Constructor and Description |
|---|---|
| protected | Logger(String name, String resourceBundleName) |
Method Summary
| Modifier and Type | Method and Description |
|---|---|
| void | addHandler(Handler handler) |
Methods inherited from class java.lang.Object
Field Detail
GLOBAL_LOGGER_NAME
global
Constructor Detail
Logger
The logger will be initially configured with a null Level and with useParentHandlers set to true.
Method Detail
getGlobal
getLogger
If a new logger is created its log level will be configured based on the LogManager configuration and it will configured to also send logging output to its parent’s Handlers. It will be registered in the LogManager global namespace.
Note: The LogManager may only retain a weak reference to the newly created Logger. It is important to understand that a previously created Logger with the given name may be garbage collected at any time if there is no strong reference to the Logger. In particular, this means that two back-to-back calls like getLogger(«MyLogger»).log(. ) may use different Logger objects named «MyLogger» if there is no strong reference to the Logger named «MyLogger» elsewhere in the program.
getLogger
If a new logger is created its log level will be configured based on the LogManager and it will configured to also send logging output to its parent’s Handlers. It will be registered in the LogManager global namespace.
If the named Logger already exists and does not yet have a localization resource bundle then the given resource bundle name is used. If the named Logger already exists and has a different resource bundle name then an IllegalArgumentException is thrown.
getAnonymousLogger
This factory method is primarily intended for use from applets. Because the resulting Logger is anonymous it can be kept private by the creating class. This removes the need for normal security checks, which in turn allows untrusted applet code to update the control state of the Logger. For example an applet can do a setLevel or an addHandler on an anonymous Logger.
Even although the new logger is anonymous, it is configured to have the root logger («») as its parent. This means that by default it inherits its effective level and handlers from the root logger.
getAnonymousLogger
This factory method is primarily intended for use from applets. Because the resulting Logger is anonymous it can be kept private by the creating class. This removes the need for normal security checks, which in turn allows untrusted applet code to update the control state of the Logger. For example an applet can do a setLevel or an addHandler on an anonymous Logger.
Even although the new logger is anonymous, it is configured to have the root logger («») as its parent. This means that by default it inherits its effective level and handlers from the root logger.
getResourceBundle
getResourceBundleName
setFilter
After passing the initial «level» check, the Logger will call this Filter to check if a log record should really be published.
getFilter
All the other logging methods in this class call through this method to actually perform any logging. Subclasses can override this single method to capture all log activity.
If the logger is currently enabled for the given message level then the given message is forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then the given arguments are stored in a LogRecord which is forwarded to all registered output handlers.
Note that the thrown argument is stored in the LogRecord thrown property, rather than the LogRecord parameters property. Thus is it processed specially by output Formatters and is not treated as a formatting parameter to the LogRecord message property.
If the logger is currently enabled for the given message level then the given message is forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
If the logger is currently enabled for the given message level then the given arguments are stored in a LogRecord which is forwarded to all registered output handlers.
Note that the thrown argument is stored in the LogRecord thrown property, rather than the LogRecord parameters property. Thus is it processed specially by output Formatters and is not treated as a formatting parameter to the LogRecord message property.
logrb
If the logger is currently enabled for the given message level then the given message is forwarded to all the registered output Handler objects.
The msg string is localized using the named resource bundle. If the resource bundle name is null, or an empty String or invalid then the msg string is not localized.
logrb
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
The msg string is localized using the named resource bundle. If the resource bundle name is null, or an empty String or invalid then the msg string is not localized.
logrb
If the logger is currently enabled for the given message level then a corresponding LogRecord is created and forwarded to all the registered output Handler objects.
The msg string is localized using the named resource bundle. If the resource bundle name is null, or an empty String or invalid then the msg string is not localized.
logrb
If the logger is currently enabled for the given message level then the given arguments are stored in a LogRecord which is forwarded to all registered output handlers.
The msg string is localized using the named resource bundle. If the resource bundle name is null, or an empty String or invalid then the msg string is not localized.
Note that the thrown argument is stored in the LogRecord thrown property, rather than the LogRecord parameters property. Thus is it processed specially by output Formatters and is not treated as a formatting parameter to the LogRecord message property.
entering
This is a convenience method that can be used to log entry to a method. A LogRecord with message «ENTRY», log level FINER, and the given sourceMethod and sourceClass is logged.
entering
This is a convenience method that can be used to log entry to a method. A LogRecord with message «ENTRY <0>«, log level FINER, and the given sourceMethod, sourceClass, and parameter is logged.
entering
This is a convenience method that can be used to log entry to a method. A LogRecord with message «ENTRY» (followed by a format
exiting
This is a convenience method that can be used to log returning from a method. A LogRecord with message «RETURN», log level FINER, and the given sourceMethod and sourceClass is logged.
exiting
This is a convenience method that can be used to log returning from a method. A LogRecord with message «RETURN <0>«, log level FINER, and the gives sourceMethod, sourceClass, and result object is logged.
throwing
This is a convenience method to log that a method is terminating by throwing an exception. The logging is done using the FINER level.
If the logger is currently enabled for the given message level then the given arguments are stored in a LogRecord which is forwarded to all registered output handlers. The LogRecord’s message is set to «THROW».
Note that the thrown argument is stored in the LogRecord thrown property, rather than the LogRecord parameters property. Thus is it processed specially by output Formatters and is not treated as a formatting parameter to the LogRecord message property.
severe
If the logger is currently enabled for the SEVERE message level then the given message is forwarded to all the registered output Handler objects.
warning
If the logger is currently enabled for the WARNING message level then the given message is forwarded to all the registered output Handler objects.
If the logger is currently enabled for the INFO message level then the given message is forwarded to all the registered output Handler objects.
config
If the logger is currently enabled for the CONFIG message level then the given message is forwarded to all the registered output Handler objects.
If the logger is currently enabled for the FINE message level then the given message is forwarded to all the registered output Handler objects.
finer
If the logger is currently enabled for the FINER message level then the given message is forwarded to all the registered output Handler objects.
finest
If the logger is currently enabled for the FINEST message level then the given message is forwarded to all the registered output Handler objects.
setLevel
If the new level is null, it means that this node should inherit its level from its nearest ancestor with a specific (non-null) level value.
getLevel
isLoggable
getName
addHandler
By default, Loggers also send their output to their parent logger. Typically the root Logger is configured with a set of Handlers that essentially act as default handlers for all loggers.
removeHandler
Returns silently if the given Handler is not found or is null
getHandlers
setUseParentHandlers
getUseParentHandlers
getParent
This method returns the nearest extant parent in the namespace. Thus if a Logger is called «a.b.c.d», and a Logger called «a.b» has been created but no logger «a.b.c» exists, then a call of getParent on the Logger «a.b.c.d» will return the Logger «a.b».
The result will be null if it is called on the root Logger in the namespace.
setParent
It should not be called from application code.
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.