Автор оригинала: Pankaj Kumar.
log4j.rootLogger находится на вершине всей иерархии регистраторов, точно так же, как у нас есть объекты в классах java. Поэтому всякий раз, когда вы ведете журнал и нет совпадения с конфигурацией регистратора, будет использоваться конфигурация корневого регистратора.
пример log4j.rootLogger
Давайте разберемся в этом на простом примере. Предположим, у нас есть файл log4j.properties, как показано ниже.
#Define root logger options log4j.rootLogger=DEBUG, console #Define console appender log4j.appender.console=org.apache.log4j.ConsoleAppender logrj.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - (%F:%L) %m%n #Define loggers log4j.logger.com.journaldev.log4j.main=ERROR, console #setting additivity log4j.additivity.com.journaldev.log4j.main=false
А вот простая программа на java в пакете com.journaldev.log4j.main
, соответствующая регистратору, определенному выше.
package com.journaldev.log4j.main; import org.apache.log4j.Logger; public class Log4jExample { private final static Logger logger = Logger.getLogger(Log4jExample.class); public static void main(String[] args) { logger.trace("My Trace Log"); logger.debug("My Debug Log"); logger.info("My Info Log"); logger.warn("My Warn Log"); logger.error("My error log"); logger.fatal("My fatal log"); } }
На рисунке ниже показан вывод, когда мы его запускаем.
Теперь ниже приведен вывод , когда я изменяю объявление пакета на com.journaldev.log4j.main 1
, чтобы оно не совпадало ни с одним из определенных регистраторов.
Здесь используется конфигурация корневого регистратора, т. е. уровень ведения журнала как ОТЛАДКА и одно приложение “консоль”.
Итак, требуется ли всегда определять log4j.rootLogger?
Нет , log4j не выдает вам никаких предупреждений или исключений, если вы не будете их определять. Если только экземпляр регистратора не пытается его использовать.
Поэтому, если я прокомментирую конфигурацию корневого регистратора выше, и моя программа java находится в com.journaldev.log4j.main
package, то для нее определен регистратор, и все работает нормально.
Но если я запускаю свою программу java из com.journaldev.log4j.main 1
пакета, для которого не определен регистратор, он пытается найти конфигурацию корневого регистратора и не находит ее. Поэтому он печатает ниже предупреждающее сообщение для консоли.
log4j:WARN No appenders could be found for logger (com.journaldev.log4j.main1.Log4jExample). log4j:WARN Please initialize the log4j system properly. log4j:WARN See https://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Наконец, как мы определяем одно и то же в log4j.xml досье?
Ниже приведена конфигурация на основе XML с тем же, что и выше, файлом log4j.properties.
Это все для значения и использования конфигурации корневого регистратора log4j.