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