gpt4 book ai didi

java - 如何在java中从多个类中获取异常原因和消息

转载 作者:行者123 更新时间:2023-12-01 11:56:28 24 4
gpt4 key购买 nike

我开发了一个Servlet,processReq()调用一个类的方法,一个类调用两个类的方法......直到第五类,我想要实现的是,如果任何方法中发生任何异常,我必须将 StackTrace 保存在数据库中。为了实现这一目标,我编写了以下代码,它工作正常。有人可以建议我这是正确的方法还是有更好的方法?请建议我。任何建议将不胜感激。
注意:出于测试目的,我们在 main() 方法中编写了

public class MyTestException extends Exception {

private String stackTraceMessage;
private String excepMsg;
private String errorType;
private String errorMsg;
private Byte status;
public boolean msgSet ;

public MyTestException(String stackTraceMessage, String excepMsg, String errorType, String errorMsg, Byte status, boolean msgSet) {
this.stackTraceMessage = stackTraceMessage;
this.excepMsg = excepMsg;
this.errorType = errorType;
this.errorMsg = errorMsg;
this.status = status;
this.msgSet = msgSet;
}



public String getStackTraceMessage() {
return stackTraceMessage;
}

public void setStackTraceMessage(String stackTraceMessage) {
this.stackTraceMessage = stackTraceMessage;
}

public String getExcepMsg() {
return excepMsg;
}

public void setExcepMsg(String excepMsg) {
this.excepMsg = excepMsg;
}

public String getErrorType() {
return errorType;
}

public void setErrorType(String errorType) {
this.errorType = errorType;
}

public String getErrorMsg() {
return errorMsg;
}

public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}

public Byte getStatus() {
return status;
}

public void setStatus(Byte status) {
this.status = status;
}

public boolean isMsgSet() {
return msgSet;
}

public void setMsgSet(boolean msgSet) {
this.msgSet = msgSet;
}

}

一类

public class One {
public static String getMsgFromOne() throws Exception {
String msg = null;
try {
msg = Two.getMsgFromTwo();
} catch (Exception e) {
if(e instanceof MyTestException){
MyTestException ex = (MyTestException) e;
if (ex.isMsgSet()) {
throw e;
} else {
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}else{
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}
return msg;
}
}

两级

public class Two {
public static String getMsgFromTwo()throws Exception{
String msg = null;
try {
msg = Three.getMsgFromThree();
// int a = 9 / 0;
} catch (Exception e) {
if(e instanceof MyTestException){
MyTestException ex = (MyTestException) e;
if (ex.isMsgSet()) {
throw e;
} else {
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}else{
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}
return msg;
}
}

三级

public class Three {
public static String getMsgFromThree()throws Exception{
String msg = null;
try {
msg = Four.getMsgFromTwo();
} catch (Exception e) {
if(e instanceof MyTestException){
MyTestException ex = (MyTestException) e;
if (ex.isMsgSet()) {
throw e;
} else {
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}else{
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}

}
return msg;
}
}

四级

public class Four {
public static String getMsgFromTwo() throws Exception{
String msg = null;
try {
msg = Five.getMsgFromFive();
// int a=0;
// a= 8/0;
// if(a==0)
// throw new RemoteException("~~~~~~~~~ Rm Exp");
} catch (Exception e) {
if(e instanceof MyTestException){
MyTestException ex = (MyTestException) e;
if (ex.isMsgSet()) {
throw e;
} else {
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}else{
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}
return msg;
}
}

五级

public class Five {

public static String getMsgFromFive() throws Exception {
String msg = null;
try {
// msg = "Hello from 5";
int a = 9 / 0;
// if (a == 0) {
// throw new MyTestException("StackTrace Five", "ExcMessage", "ErrorType", "ErrMsg", new Byte("1"),false);
// }
} catch (Exception e) {
if(e instanceof MyTestException){
MyTestException ex = (MyTestException) e;
if (ex.isMsgSet()) {
throw e;
} else {
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}else{
throw new MyTestException(TestExp.getStackTraceMessage(e), e.getLocalizedMessage(), "ErrorType", "ErrMsg", new Byte("1"),true);
}
}
return msg;
}


}

主程序(这将是servlet)

public class TestExp {

/**
*
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
One.getMsgFromOne();
} catch (Exception ex) {
// Saving all these Values in Database Table
MyTestException e = (MyTestException) ex;
System.out.println("1."+e.getErrorMsg());
System.out.println("2."+e.getErrorType());
System.out.println("3."+e.getStackTraceMessage());
System.out.println("4."+e.getStatus());
System.out.println("5."+e.getExcepMsg());

}
}

public static String getStackTraceMessage(Exception e) {

StackTraceElement[] stackTraceArray = e.getStackTrace();
String strStackTrace = "" + e;
for (StackTraceElement stackTraceElement : stackTraceArray) {
strStackTrace += " \n Class Name :- " + stackTraceElement.getClassName() + ", Method Name :- " + stackTraceElement.getMethodName() + " , Line Number :- " + stackTraceElement.getLineNumber();

}
return strStackTrace;

}
}

我已经评论了一些用于测试目的的行
请建议我。任何建议将不胜感激。

最佳答案

一个建议,您可能还想将原因添加到您的消息中,例如......

public static String getStackTraceMessage(Exception e)  {

String strStackTrace = "";

while(e != null) {
StackTraceElement[] stackTraceArray = e.getStackTrace();
strStackTrace = "" + e;
for (StackTraceElement stackTraceElement : stackTraceArray) {
strStackTrace += " \n Class Name :- " + stackTraceElement.getClassName() + ", Method Name :- " + stackTraceElement.getMethodName() + " , Line Number :- " + stackTraceElement.getLineNumber();

}

if(e == e.getCause()) {
e = null;
} else {
e = e.getCause();
strStackTrace += "\nCaused by ";
}
}
return strStackTrace;
}

(我还没有运行过这个,所以它可能不起作用,但你明白了)

确保该文本栏中有足够的空间!!

关于java - 如何在java中从多个类中获取异常原因和消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com