Компонент Logger
принимает инструкции ведения журнала (logger.debug()
, logger.error()
и т. Д.) И отправляет их в соответствующие пункты назначения на Appender
s.
Вы можете установить «приоритет» на Logger
и дать ему указание принимать только инструкции регистрации определенного уровня. Уровни (в порядке возрастания важности): TRACE, DEBUG, INFO, WARN, ERROR и FATAL.
Конфигурация, подобная этой:
<logger name="com.sas">
<priority value="WARN" />
....
</logger>
предписывает регистратору com.sas
принимать только уровни с уровнем важности WARN или выше (то есть WARN, ERROR и FATAL).
Заявления о регистрации затем отправляются на Appender
с. Добавляющие также могут быть настроены на прием только утверждений определенного уровня важности, один из которых превышает определенный «порог».
Конфигурация как:
<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ERROR"/>
....
</appender>
говорит аппендиату принимать только сообщения о значении ОШИБКИ или выше (то есть ОШИБКА и ФАТАЛЬНО).
Таким образом, уровень журнала для "com.sas" будет установлен на "DEBUG" или "ERROR"?
В вашем примере уровень журнала установлен на DEBUG. То, что пишут участники, ортогонально проблеме.
Что касается ваших двух примеров:
значение приоритета = "DEBUG" и имя параметра = "пороговое" значение = "ОШИБКА"
значение приоритета = "ОШИБКА" и имя параметра = "пороговое" значение = "ОТЛАДКА"
1. Приоритет регистратора установлен на DEBUG, а пороговое значение appender установлено на ERROR означает, что регистратор передает DEBUG, INFO, WARN, ERROR и FATAL, но appender принимает только ERROR и FATAL, поэтому вы получаете только ERROR и ФАТАЛЬНО в ваш журнал.
2. Приоритет регистратора установлен на ERROR, а пороговое значение для appender установлено на DEBUG, что означает, что регистратор проходит только ERROR и FATAL, в то время как appender принимает DEBUG, INFO, WARN, ERROR и FATAL. Вы снова получаете только ОШИБКУ и ФАТАЛЬНО в свой журнал.
Но это просто неудачный случай. Смешивание приоритета и порога может дать вам приятную функциональность. Например ...
... предположим, что вы только что поместили приложение в промежуточную стадию, и вам нужно немного его контролировать, пока вы не переместите его в производство. У вас есть разработчик и системный администратор, выполняющий мониторинг. Пока разработчик хочет получить все журналы, системный администратор занят и хочет видеть только ошибки.
Как вы это настраиваете? Как насчет примерно такого:
<appender name="developerLogs" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/LOGS/SAM/developerLogs.log" />
<param name="Threshold" value="DEBUG" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<appender name="sysAdminLogs" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/LOGS/SAM/sysAdminLogs.log" />
<param name="Threshold" value="ERROR" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<logger name="com.test">
<priority value="DEBUG" />
<appender-ref ref="developerLogs" />
<appender-ref ref="sysAdminLogs" />
</logger>
Если вы запускаете код вроде:
Logger logger = Logger.getLogger("com.test");
logger.debug("some debug statement");
logger.info("some info statement");
logger.warn("some warn statement");
logger.error("some error statement");
logger.fatal("some fatal statement");
вы получите это в sysAdminLogs.log
:
some error statement
some fatal statement
и это в developerLogs.log
:
some debug statement
some info statement
some warn statement
some error statement
some fatal statement
Надеюсь, это объяснение лучше описывает концепции.