java - 使用 log4j 时是否可以打印额外的自定义字段以及堆栈跟踪

标签 java error-handling log4j stack-trace exception-logging

我有这个程序,如下所示,现在它唯一打印堆栈跟踪。 我的问题是,是否可以获得堆栈跟踪和自定义字段,在我的例子中我需要 1090099

请告诉我是否可以?

package com;
import org.apache.log4j.Logger;
public class Test {

    private static final Logger logger = Logger.getLogger(Test.class);
    public static void main(String args[]) {
        try {
    String accountid = "1090099";
            String desc = null;
            System.out.println(desc.toUpperCase());
            } 
            catch (Exception t) 
        {
            logger.fatal("Exception inside the Test program  ", t);
        }
    }
}

2013-06-26 21:44:29,723[main] FATAL(Test.java:<main>:16)- Exception inside the Test program
java.lang.NullPointerException
    at com.Test.main(Test.java:12)

最佳答案

您必须手动将其包含在您正在记录的消息中。但在我看来,你真正要找的是 MDC (映射诊断上下文),一种将值存储在线程本地“上下文”中的方法,然后可用于区分与不同应用程序级实体相关的日志消息。

package com;
import org.apache.log4j.*;
public class Test {

    private static final Logger logger = Logger.getLogger(Test.class);
    public static void main(String args[]) {
        MDC.put("accountid", "1090099");
        try {
            String desc = null;
            System.out.println(desc.toUpperCase());
            } 
            catch (Exception t) 
        {
            logger.fatal("Exception inside the Test program  ", t);
        } finally {
            MDC.remove("accountid");
        }
    }
}

然后,您将在附加程序的布局模式中的某个位置包含 %X{accountid} ,并且它将在每条日志消息中包含适当的 MDC 条目,包括由您调用的第三方代码记录的日志消息。

关于java - 使用 log4j 时是否可以打印额外的自定义字段以及堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325723/

相关文章:

java - 为什么我的 jspSmartUpload 代码不起作用?

java - 使用 Keycloak Script Mapper 聚合声明中角色的属性

java - 是否可以更改 log4j 中包的日志级别?

java - Log4j 2.0 和 SLF4J 以及 Java 日志框架永无止境的 future

java - Log4j 不写入日志文件

java - 如何在测试方法中使用 BeforeMethod 输出

java - 如何在 Ubuntu 16.04 上安装 Groovy 3.0?

ruby - 如何在 Ruby 中拯救 "invalid Unicode codepoint"?

vb6 - 我应该如何处理 VB6 类之外的错误(在类方法中引发)?

python-3.x - Keras 中使用 YOLOv3 进行对象检测 - ValueError : If your data is in the form of symbolic tensors