为了对用户的请求作统一处理,所以把Struct的Action封装成了一个AbstractAction。
其中AbstractAction重写了Action类的execute方法,其中一个统一处理就是异常的处理。
刚好最近想到了代码抛异常时就发邮件通知,这样既能立刻接收到异常的信息,也能对异常归档。
刚开始打算直接用Exception的getCause()内容作为邮件内容发送,不过只有异常的原因,没有异常
出现的定位信息:
e.getCause()
(java.lang.NullPointerException) java.lang.NullPointerException
最后用到Exception的printStackTrace(PrintStream s)方法,并且采用了可变尺寸的线程池来发送邮件,主要是在以前构造的线程可用时将重用它们,代码如下:
try {
// code
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getCause());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
String url = request.getRequestURL().toString() ;
if(request.getQueryString()!=null){
url+=”?” + request.getQueryString();
}
exception = “请求地址为:”+url+ “<br>” ;
exception += “请求IP为:”+IPUtil.getIpAddr(request)+ “<br>” ;
exception += baos.toString();
//ex为AbstractAction类的属性
//private ExecutorService ex = Executors.newCachedThreadPool();
ex.execute(new Runnable() {
@Override
public void run() {
// sendEmail(String addr, String title, String content)
eMailService.sendEmail(“XXX@gmail.com”, “后台异常”,exception);
}
});
}
通过获取这些异常信息也可以发现某些对网站的异常访问,例如这次访问产生的异常:(下面代码用*取代了真实IP)
请求地址为:http://******/f
这样就可以把203.130.**.***这个IP添加到黑名单了!
强强强~~,太好了,谢谢