ily*_*tmn 1 java tomcat wicket hibernate web-applications
我面临一个有趣的目标,这个目标针对使用wicket和hibernate框架编写的现有Web应用程序中的异常处理,假设我们有部署在服务器中的Web应用程序,有时它会产生运行时异常,问题是如何获取和保存他们的堆栈跟踪到db而不修改所有类(大约80个模型和150个视图).
希望我明确表示清楚.
提前致谢.
您可以使用an IRequestCycleListener来记录/处理异常:
public class MyExceptionReporter extends AbstractRequestCycleListener {
@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
// log exception here
return null;
// if you want to also show an error page:
// return new RenderPageRequestHandler(new PageProvider(new ExceptionPage(ex)));
}
}
Run Code Online (Sandbox Code Playgroud)
然后注册WebApplication#init:
getRequestCycleListeners().add(new MyExceptionReporter());
Run Code Online (Sandbox Code Playgroud)
覆盖Application.newRequestCycle()并返回WebRequestCycle该覆盖的自定义子类,RequestCycle.logRuntimeException()以便为RuntimeException应用程序中的所有s 提供其他日志记录行为.请注意,任何未被捕获的内容Exception都将由Wicket包装WicketRuntimeException(如请求周期和请求周期处理器的异常处理部分中所述):
在那里,使用Service/DAO组件将异常消息与堆栈跟踪一起插入数据库.请记住,根据dbms,您可能希望使用CLOB而不是varchar类型(例如,在Oracle中,varchar列不能容纳超过4000个字节).
这是一个(未经测试的)示例:
public class myApplication extends WebApplication {
...
@Override
public RequestCycle newRequestCycle(Request request, Response response) {
return new myRequestCycle(this, (WebRequest) request, (WebResponse) response);
}
}
public class myRequestCycle extends WebRequestCycle {
...
@Override
protected void logRuntimeException(RuntimeException rex) {
super.logRuntimeException(rex);
Writer w = new StringWriter();
t.printStackTrace(new PrintWriter(w));
String stackTrace = w.toString();
someService.logExceptionToDB(rex.getMessage(),stackTrace);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |