【问题标题】:Log4J conversion specifier "%l" not printing the whole stack traceLog4J 转换说明符“%l”不打印整个堆栈跟踪
【发布时间】:2013-08-20 08:16:41
【问题描述】:

我正在尝试发送电子邮件以防我们的项目出现错误。为此,我们使用 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 values !!! 替换,但 %l小写 L)正在打印发出带有行号的日志请求的调用者的完全限定类名(就像 %c 所做的一样,不同之处在于 %c 从不打印行号而 %l 这样做)。

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

【问题讨论】:

  • 根据我们在旧答案下的评论对话,我已经调整了您的问题,希望有人能给出答案。

标签: java log4j smtpappender mdc


【解决方案1】:

%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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2010-09-25
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2013-09-03
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多