将自定义消息添加到抛出的异常,同时在Java中保留堆栈跟踪

我有一小段代码,通过一些事务处理。每个交易被标记有由外部程序产生的交易编号,并且不一定被排序。当我在处理代码中捕获异常时,我把它抛到主类并记录它以供审查。我想将事务号添加到这个抛出的异常。是否可以这样做,同时仍然保持正确的堆栈跟踪?

例如:

public static void main(String[] args) {
    try{
        processMessage();
    }catch(Exception E){
        E.printStackTrace();
    }

}

private static void processMessage() throws Exception{
    String transNbr = "";
    try{
        transNbr = "2345";
        throw new Exception();
    }catch(Exception E){
        if(!transNbr.equals("")){
            //stack trace originates from here, not from actual exception
            throw new Exception("transction: " + transNbr); 
        }else{
            //stack trace gets passed correctly but no custom message available
            throw E;
        }
    }
}
最佳答案
尝试:

throw new Exception("transction: " + transNbr, E); 

转载注明原文:将自定义消息添加到抛出的异常,同时在Java中保留堆栈跟踪 - 代码日志