расширение TriggeringEventEvaluator (log4j) и предоставление свойств для него в конфигурации - PullRequest
1 голос
/ 31 мая 2011

этот интерфейс используется классом SMTPAppender в log4j. У него есть метод, который возвращает статус (если вызывать оповещение по электронной почте или нет)

Проблема в том, что Я хочу добавить некоторые функции в TriggeringEventEvaluator. для этого необходимо указать несколько дополнительных полей в конфигурации для TriggeringEventEvaluator.

Как я могу передать эти поля из конфигурации log4j в TriggeringEventEvaluator. Я знаю, что log4j вызывает методы установки для полей, но как можно указать поля для TriggeringEventEvaluator

1 Ответ

1 голос
/ 01 июня 2011

Определите элемент TriggeringPolicy внутри элемента SMTPAppender. Класс элемента TriggeringPolicy будет иметь вид org.apache.log4j.rolling.FilterBasedTriggeringPolicy.

Внутри элемента TriggeringPolicy определите элемент 'filter', класс которого org.apache.log4j.filter.ExpressionFilter.

Затем вы можете использовать любое поле события, которое вы хотите (и регулярное выражение поддерживает ключевое слово «like») для фильтрации событий. Снимок разработчика Chainsaw содержит довольно хорошее руководство по синтаксису выражения: http://people.apache.org/~sdeboy

Пример:

<appender name="mail" class="org.apache.log4j.net.SMTPAppender">
  <param name="from"   value="[EMAIL PROTECTED]" />
  <param name="to" value="[EMAIL PROTECTED]" />
  <param name="subject" value="Test message" />
  <param name="SMTPHost" value="localhost"/>
  <param name="sendOnClose" value="true"/>
  <triggeringPolicy class="org.apache.log4j.rolling.FilterBasedTriggeringPolicy">
    <filter class="org.apache.log4j.filter.ExpressionFilter">
      <param name="Expression" value="( LOGGER ~= class1 &amp;&amp; MSG ~= test1 ) || ( logger ~= class2 &amp;&amp; MSG like 'TEST2' )"/>
    </filter>
  </triggeringPolicy>
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %c{2} - %m%n"/>
  </layout>
</appender>
...