2013-08-20 178 views
1

我试图发送电子邮件,以防在我们的项目中发生错误。为此,我们使用Log4j的SMTPAppender。我跑我的项目在开发模式,并尝试使用以下ConversionPatternSMTPAppender得到错误的完整堆栈跟踪:Log4J转换说明符“%l”不打印整个堆栈跟踪

<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从不打印行号,而%1)。

什么可能是正确的方式来获取堆栈跟踪和为什么%l没有得到整个堆栈跟踪?

+0

根据我在旧回答下的评论对话,我调整了你的问题,希望有人会有答案。 –

回答

0

%l用于输出生成记录事件的调用者的位置信息。它可以打印整个堆栈跟踪。 你可以在你的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); 
}