2012-01-30 56 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改變主題的內容有例外的名稱。

我的appender看起來是這樣的:

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

是否有異常發生在你抓塊?你可以發佈那裏發生的事情而不是吞嚥嗎? 另外爲什麼不使用setSubject()形式的SMTPAppender類似於setFrom()爲什麼你直接調用它的味精呢? – 2012-01-30 17:30:09

+0

這個try/catch塊現在不重要。如果將無法獲得主機名與「InetAddress.getLocalHost()。getHostName()」的情況,所以它不介意它只是從屬性文件沒有主機名設置主題...我想要什麼是要獲得我在應用程序中發現的任何異常的名稱,並將其設置爲主題。我希望這是可以理解的:) ...和msg.setSubject()或setSubject(),你是對的,我可以使用這個變種。 – 2012-01-31 09:12:03

+0

哦,我不能使用setSubject(),它由於某種原因不起作用。我必須調用msg.setSubject(),但它不是我上一個問題的主要觀點。 – 2012-01-31 09:27:14

回答

1

@Toby好吧我誤解了你想達到的目標。你想在電子郵件主題中的日誌消息?

我認爲,你將需要訪問的追加程序有點像CyclicBuffer CB:

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

或者你可能需要做一個ObjectRenderer以及

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

比你非常,這正是我所期待的。 – 2012-01-31 15:58:29