2011-05-31 8 views
1

このインターフェイスはlog4jのSMTPAppenderクラスで使用されます。 ステータスを返すメソッドがあります(電子メール警告をトリガーする場合)TriggeringEventEvaluator(log4j)を拡張し、そのプロパティをコンフィグで提供

問題は、 私はTriggeringEventEvaluatorにsomefunctionalityを追加したいと思います。 これには、TriggeringEventEvaluatorの設定で指定するいくつかの追加フィールドが必要です。

これらのフィールドをlog4j設定からTriggeringEventEvaluatorに渡すにはどうすればよいですか。 私は、log4jがフィールドのセッターメソッドを呼び出すが、TriggeringEventEvaluatorのフィールドはどのように指定できるのか分かります。

+0

私はここに、この答えは役立つと思います:http://stackoverflow.com/questions/34931650/log4j- xml-injecting-evaluator/34989591#34989591 – KKishore

答えて

1

TriggeringPolicyエレメントをSMTPAppenderエレメント内で定義します。 TriggeringPolicy要素のクラスはorg.apache.log4j.rolling.FilterBasedTriggeringPolicyになります。

TriggeringPolicy要素内で、クラスがorg.apache.log4j.filter.ExpressionFilterの 'filter'要素を定義します。

イベントをフィルタリングするために、任意のイベントフィールドを使用できます( 'like'キーワードを使用して正規表現をサポートします)。チェーンソーの開発スナップショットは、式の構文上のかなり良いのチュートリアルがあります。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> 
+0

これらをプロパティ値形式で指定する方法は? – user777486

+0

もう少し説明できます。 私が達成したいのは、ある時間間隔で送信できる最大の電子メールの制限を設定したいということです。 log4j設定では最大メールの制限と時間枠を指定する必要があります。また、メールを送信するかどうかを判断するには、これらのパラメータに基づいて評価者を決定する必要があります。メールの送信制限を超えた場合、triggeringevaluatorはfalseを返す必要があります。 同様の動作は、ポリシーを起動することで達成できます。もう少し詳しく説明してください。 – user777486

+0

トリガーポリシーは、私が信じるプロパティファイル形式、xml形式では設定できません。 isTriggeringEvent実装で必要なものを追跡し、適切なときにtrueを返す(TriggeringEventEvaluatorを実装する)カスタムTriggeringPolicyを書くことができます(時間、ロギングイベントカウントなどに基づいて)。 – Scott

関連する問題