java - Log4J 转换说明符 "%l"不打印整个堆栈跟踪

标签 java log4j smtpappender mdc

我正在尝试发送电子邮件,以防我们的项目发生错误。为此,我们使用 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/

相关文章:

java - removeAll 不在下次验证时删除?

java - 如何使用 "get"方法编写 HttpRequest

java - log4j (1.2.15) 记录到来自同一包的不同日志级别的不同 DailyRollingFileAppender 日志文件?

java - Log4j2 SMTP 附加程序 "Must issue a STARTTLS command first"

java - 如何在 Java 中对特定单词进行计数器?

java - 我搜索了每个帖子,但无法解决我的错误

java - 我使用什么日志系统?

java - java后期开发的自动化测试工具

java - 如何在 log4j2 的 SmtpAppender 中设置自定义主题

java - Log4j 解析错误在 SMTPAppender 上添加 triggeringPolicy