logger.xml ファイルで SMTPAppender を定義したいのですが、どのロガーからも参照したくありません。
次に、アプリケーションが読み込まれるときに、このアペンダーを特定のロガーにプログラムで追加したいと考えています。
ただし、「getAppender」メソッドは Logger からのみアクセスできます。
これを回避し、ロガーを経由せずにアペンダーを取得する方法はありますか?
はい!!!絶対にそれを行うことはできますが、レベルのすべてのイベントを送信すると、電子メールが多すぎて、対象ユーザーのメールボックスが乱雑になり、パフォーマンスが低下する可能性があります.
タスクを達成するための手順は次のとおりです。
ステップ 1: janino jar をクラスパスに追加します。ここからダウンロードできますhttp://janino.net/changelog.html
ステップ 2: SMTPAppender に次のエバリュエーターを追加します。
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
(marker == null)
</expression>
</evaluator>
あなたの問題を理解しているかどうかはわかりませんが、試してみることができます:
<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 によって記録されます。