Log4J转换说明符“%l”不打印整个堆栈跟踪

时间:2013-08-20 08:16:41

标签: java log4j smtpappender mdc

我正在尝试发送电子邮件,以防我们的项目发生错误。为此,我们使用Log4j的SMTPAppender。我正在开发模式下运行我的项目,并尝试使用ConversionPattern中的SMTPAppender跟踪来获取错误的完整堆栈跟踪:

<param name="ConversionPattern" 
    value="[%d{ISO8601}] [%t] [%5p] [%c ] %n %m %l %X{config}"/>

我抛出的错误如下:

try {
  throw new Exception(" To get the MDC values !!!");
} catch (Exception e)
{
  LOGGER.error(" To get the MDC values !!!", e);
}

%m被文字To get the MDC values !!!取代,但%l小写L )正在打印完全限定的类名调用者使用行号发出日志记录请求(就像%c do一样,但有一点不同,%c从不打印行号而%l会这样做)。

获取堆栈跟踪的正确方法是什么,以及为什么%l没有得到整个堆栈跟踪?

1 个答案:

答案 0 :(得分:0)

%l用于输出生成日志记录事件的调用者的位置信息。 它是snot打印整个堆栈跟踪。 你可以在catch块中添加这些代码行。

catch (Exception e) {
            CharArrayWriter cw = new CharArrayWriter();
            PrintWriter w = new PrintWriter(cw);
            e.printStackTrace(w);
            w.close();
            String trace = cw.toString();
     LOGGER.error(" To get the MDC values !!!",trace);
}