我正在尝试发送电子邮件,以防我们的项目发生错误。为此,我们使用 Log4j 的 SMTPAppender
。我正在开发模式下运行我的项目,并尝试通过在 SMTPAppender
中使用以下 ConversionPattern
来获取错误的完整堆栈跟踪:
<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 value!!!
但 %l
(小写 L
) 正在打印发出带有行号的日志记录请求的调用者的完全限定类名(就像 %c 所做的那样,区别在于 %c 从不打印行号,而 %l做)。
获取堆栈跟踪的正确方法是什么?为什么 %l
没有获取整个堆栈跟踪?
最佳答案
%l 用于输出生成日志事件的调用者的位置信息。 它不会打印整个堆栈跟踪。 您可以在 catch block 中添加这些代码行。
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);
}
关于java - Log4J 转换说明符 "%l"不打印整个堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330133/