Log4j2 установка уровней журнала

Я использую log4j2 в качестве утилиты для ведения журнала в своем весеннем приложении. Я хочу установить уровень журнала для определенных библиотек / пакетов на что-то иное, чем корень. Например, я хочу, чтобы org.springframework было ИНФО и com.google было ПРЕДУПРЕЖДЕНИЕ. Я нашел это в log4j2.properties:

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
logger.rolling.name = com.test.app
logger.rolling.level = ALL
logger.rolling.appenderRef.rolling.ref = RollingFile

rootLogger.level = info

Я не понимаю, что означает logger.rolling? Я все время нахожу его в документации log4j2, но нет объяснения, что это такое и что означает ALL.

Как мне добавить уровни журналов для определенных пакетов и что это за материал скользящего уровня?


person Richard    schedule 03.05.2017    source источник
comment
Вы читали это?   -  person Edwin Dalorzo    schedule 03.05.2017
comment
@EdwinDalorzo да, но там ничего не говорится о rolling.level   -  person Richard    schedule 03.05.2017


Ответы (2)


Level intLevel
OFF   0
FATAL 100
ERROR 200
WARN  300
INFO  400
DEBUG 500
TRACE 600
ALL   Integer.MAX_VALUE

https://logging.apache.org/log4j/2.x/manual/customloglevels.html

Регистратор log4j будет регистрировать все события ниже своего порогового значения, поэтому, если он установлен на ВСЕ, он будет регистрировать каждое событие, поскольку он использует максимальное значение для своего порога.

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile

Это определение нового приложения для сменяющихся файлов с именем RollingFile. Прокручивающийся файл-аппендер - это аппендер, который, например, может увеличиваться до фиксированного размера, а затем продолжать добавлять новые записи, удаляя самые старые записи. Они также могут быть привязаны ко времени и т. Д.

logger.rolling.name = com.test.app
logger.rolling.level = ALL
logger.rolling.appenderRef.rolling.ref = RollingFile

Это указывает log4j отправлять любые события из регистратора с именем com.test.app в вышеупомянутый аппендер RollingFile. log4j не будет отфильтровывать какие-либо события, так как уровень для этого регистратора установлен на ВСЕ. "Rolling" как в "logger.rolling" - это просто идентификатор регистратора. Это необходимо, потому что файл свойств неструктурирован, поэтому вам нужен способ различать, какие строки идут вместе. Использование конфигурации XML устраняет эту необходимость

rootLogger.level = info

Любые события, созданные другими регистраторами, которые не определены в свойствах, будут отфильтрованы, и будет регистрироваться только INFO или ниже.

Документация находится здесь: https://logging.apache.org/log4j/2.x/manual/configuration.html#Properties

Чтобы ответить на ваш вопрос, это зависит от того, как регистраторы создаются в приложении. Регистраторы фактически создаются в java, и именно здесь им присваивается имя. Файл свойств только указывает log4j, как обращаться с каждым регистратором. Вам нужно будет добавить регистратор в файл свойств, используя имя, определенное в классе. Если сам класс использовался для создания регистратора, как рекомендует apache, то имя всегда будет полностью определенным именем класса. Например:

 logger.secondclass.name = com.test.AnotherClass
 logger.secondclass.level = DEBUG
 logger.secondclass.appenderRef.rolling.ref = RollingFile

Теперь любые события DEBUG или ниже, созданные com.test.AnotherClass, также будут отправлены в приложение RollingFile.

Все это объясняется здесь: https://logging.apache.org/log4j/2.x/manual/architecture.html

person Devon Sutherland    schedule 03.05.2017
comment
Привет, Девон, можно ли ограничить только события DEBUG и отбросить события журнала ниже DEBUG, такие как INFO, WARN и т. Д. Из файла? - person learner; 13.07.2018

Давайте разберемся шаг за шагом:

appenders = console,rolling

В приложениях мы пишем имена, по которым хотим видеть наши логи. Предположим, мы хотим увидеть журналы на консоли и файл (который имеет тип Rolling).

ПРИМЕЧАНИЕ. Эти имена приложений являются настраиваемыми. Мы можем дать любое имя для приложений. например, приложения также могли быть:

appenders = consoleOutput,myrollingFile

Далее мы определяем некоторые свойства для каждого приложения. Эти свойства похожи на

  • как должны отображаться сообщения журнала.
  • Каким будет узор, в котором он будет показан и т. Д.

Для этого мы используем следующий формат:

appender.<appender-name>.<property-name>=<property-value>

Например:

appender.rolling.type = File

Это определяет, что добавитель скользящего имени будет регистрировать свои журналы в типе файла.

Затем мы определяем регистраторы

loggers = rolling

ПРИМЕЧАНИЕ. Имена этих регистраторов являются пользовательскими именами. Регистраторам можно дать любое имя.

Регистраторы обычно описывают следующие вещи для регистрации:

  • для каких пакетов т.е. имя пакета?
  • какой должен быть уровень логов?
  • Где мы будем регистрировать эти конкретные типы журналов? на консоли? в файле?

Для этого мы используем следующий формат:

logger.<logger-name>.<logger-property>=<property-value>

logger.rolling.name = com.my.package.name  
logger.rolling.level = debug  
logger.rolling.additivity = true  
logger.rolling.appenderRef.rolling.ref = File 
person Akshay Chopra    schedule 12.05.2020