2012-01-30 15 views
3

log4jを使用して例外を含むメールを送信しています。Log4j SmtpAppender - 件名の例外

私のlog4jの設定:

log4j.rootLogger=info, stdout, errmail 

log4j.appender.errmail=cz.toby.utils.log.ErrSmtpAppender 
[email protected] 
log4j.appender.errmail.subject=Error - 
log4j.appender.errmail.layout=org.apache.log4j.HTMLLayout 
log4j.appender.errmail.threshold=debug 

それは完璧に動作しますが、私が欲しいのはdynamicaly例外の名前を持つ主題の内容を変更しています。

私のアペンダは、次のようになります。

public class ErrSmtpAppender extends SMTPAppender { 

    @Override 
    public void activateOptions() { 
     setSMTPHost("xxxxx"); 
     setFrom("[email protected]"); 
     setBufferSize(50); 
     super.activateOptions(); 
     try { 
      msg.setSubject(msg.getSubject() + ", node: " + InetAddress.getLocalHost().getHostName()); 
     } catch (Exception e) { 
      // do nothing, only cannot set host to subject 
     } 
    } 

} 

は、どのように私はプログラム的に例外の名前を持つ対象を設定することができますか?私はインターネット上でそれを見つけようとしていましたが、似たようなテーマしか見つけられませんでしたが、私が欲しいものは見つけられませんでした。

+0

ObjectRendererを行う必要があるかもしれませんですあなたはブロックをキャッチしますか?あなたはそれを飲み込むのではなく、そこに起こっていることを投稿できますか? setSubject()を使用してsetFrom()と同様のSMTPAppenderを構成しないのはなぜですか? –

+0

このtry/catchブロックは重要ではありません。 "InetAddress.getLocalHost()。getHostName()"でホスト名を取得できない場合は、ホスト名なしのプロパティファイルからサブジェクトを設定するだけですアプリケーションのどこにいても私が捉えた例外の名前を取得し、それを対象に設定することです。私はこれが理解できることを願っています:) ...そしてmsg.setSubject()またはsetSubject()、そうです。 –

+0

ああ、私はsetSubject()を使用することはできませんが、何らかの理由で動作しません。私はmsg.setSubject()を呼び出さなければならないが、私の以前の質問の要点ではない。 –

答えて

1

@Toby Okあなたが達成しようとしていることを誤解しました。電子メールの件名にログメッセージが必要ですか?私はあなたのようなのAppender何かのCyclicBufferのCBにアクセスする必要があります。そのためだと思う

:例外が発生したが

msg.setSubject("Logged Message String" + cb.get(cb.length()).getMessage()); 

それともあなたが同様に

ThreadGroupRenderer stackTraceRenderer = new ThreadGroupRenderer(); 
msg.setSubject("First 100 Chars of Stack Trace: " + stackTraceRenderer(cb.get(cb.length()-1).getMessage()).substring(0,99)); 
+0

あなたよりも、それはまさに私が探しているものです。 –

関連する問題