0

logger.xml ファイルで SMTPAppender を定義したいのですが、どのロガーからも参照したくありません。

次に、アプリケーションが読み込まれるときに、このアペンダーを特定のロガーにプログラムで追加したいと考えています。

ただし、「getAppender」メソッドは Logger からのみアクセスできます。

これを回避し、ロガーを経由せずにアペンダーを取得する方法はありますか?

4

2 に答える 2

1

はい!!!絶対にそれを行うことはできますが、レベルのすべてのイベントを送信すると、電子メールが多すぎて、対象ユーザーのメールボックスが乱雑になり、パフォーマンスが低下する可能性があります.

タスクを達成するための手順は次のとおりです。

ステップ 1: janino jar をクラスパスに追加します。ここからダウンロードできますhttp://janino.net/changelog.html

ステップ 2: SMTPAppender に次のエバリュエーターを追加します。

<evaluator  class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
  <expression>
     (marker == null) 
  </expression>
</evaluator>
于 2013-09-30T06:59:00.337 に答える
1

あなたの問題を理解しているかどうかはわかりませんが、試してみることができます:

    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
        <marker>MAIL_LOGS</marker>

    </evaluator>

    <smtpHost>smtp.gmail.com</smtpHost>
    <smtpPort>465</smtpPort>
    <SSL>true</SSL>
    <username>${username}</username>
    <password>${password}</password>
    <to>${email1}</to>
    <from>${from}</from>
    <subject>URGENT: ERROR NOTIFICATION </subject>

    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTrackerImpl">

        <bufferSize>20</bufferSize>
    </cyclicBufferTracker>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%date%thread%level%logger%msg</pattern>
        </layout>
    </encoder>
</appender>

次のようにロガーにマーカーを追加します

マーカー marker= MarkerFactory.getMarker("MAIL_LOGS");

LOG.error(marker, "このメッセージを送信");

ここでは、マーカーとしてマークされているすべてのログが SMTPAppender によって記録されます。

于 2013-09-26T09:09:43.523 に答える