我正在尝试在基于Spring boot的Web服务中记录异常。
所以我使用了 GlobalExceptionHandler 我的代码:
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = Exception.class)
public String handleException(Exception e){
System.out.println("Ankit == "+e.getMessage());
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
System.out.println(errors.toString());
return e.getMessage();
}
}
代码工作正常。我想要的是异常细节。我的意思是发生异常的代码?文件名/行?或者我必须解析堆栈跟踪?我的意思是春季靴子一定是想到这个吗?
答案 0 :(得分:-2)
使用IDE
如果您使用的是任何IDE,请转到Console Window
。
Console
(CTRL + F)中搜索ERROR
ERROR
的行。此行包含发生异常的Class,Method的详细信息。不查看控制台或日志
如果你想在生产中使用它,那么处理至少已知的异常(如BAD_REQUEST,NOT_FOUND等)下面的方式可能会有所帮助(向Exception Class添加额外的参数) :
Employee employee = employeeService.getEmployeeById(employeeId);
if (null == employee) {
logger.error("No tenant exists for employeeId:"+employeeId);
throw new ObjectNotFoundException("Emplyee Not Found", this.getClass().getSimpleName();));
}
此处this.getClass().getSimpleName();
将作为EmployeeController
类的参数传递。因此,在ObjectNotFoundException
我们可以添加参数ClassName
,当您在GlobalExceptionHandler
中处理它时,您可以按照以下步骤进行操作,
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = Exception.class)
public String handleException(Exception e){
System.out.println("Ankit == "+e.getMessage());
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
String classWithExceptionName = e.getClassName();
// you need to add this above getter method to your Exception Class
System.out.println(errors.toString());
return e.getMessage();
}
}
这是针对已知的常见例外情况。我们需要将extra parameter(ClassName)
添加到您正在抛出的所有自定义异常中,这可能是一些额外的代码,但我认为这是方法。希望现在有所帮助。