【问题标题】:Log4j SmtpAppender - exception in subjectLog4j SmtpAppender - 主题异常
【发布时间】:2012-02-22 08:07:20
【问题描述】:

我使用 log4j 发送异常邮件。

我的 log4j 配置:

log4j.rootLogger=info, stdout, errmail

log4j.appender.errmail=cz.toby.utils.log.ErrSmtpAppender
log4j.appender.errmail.to=my_email@email.cz
log4j.appender.errmail.subject=Error - 
log4j.appender.errmail.layout=org.apache.log4j.HTMLLayout
log4j.appender.errmail.threshold=debug

它工作得很好,但我想要的是用异常名称动态更改主题的内容。

我的 appender 看起来像这样:

    public class ErrSmtpAppender extends SMTPAppender {

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

}

如何以编程方式设置具有异常名称的主题?我试图在互联网上找到它,但我只找到了相似的主题,但不是我真正想要的。

【问题讨论】:

  • catch 块中是否发生异常?你能张贴那里发生的事情而不是吞下它吗?另外为什么不使用类似于 setFrom() 的 SMTPAppender 形式的 setSubject() 为什么要直接在 msg 上调用它?
  • 这个 try/catch 块现在不重要了。如果是我无法使用“InetAddress.getLocalHost().getHostName()”获取主机名的情况,所以它不介意它只是从没有主机名的属性文件中设置主题......我想要什么是获取我在应用程序中的任何位置捕获的异常的名称并将其设置到主题中。我希望这是可以理解的 :) ... 和 msg.setSubject() 或 setSubject(),你是对的,我可以使用这个变体。
  • 哦,我不能使用 setSubject(),它由于某种原因不起作用。我必须调用 msg.setSubject() 但这不是我上一个问题的重点。

标签: java exception-handling log4j smtpappender


【解决方案1】:

@Toby 好的,我误解了您要实现的目标。您想要电子邮件主题中的日志消息吗?

我认为为此您需要访问 Appender 的 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));

【讨论】:

  • 非常感谢,这正是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多