すべての seam コンポーネントへのすべてのメソッド呼び出しをインターセプトして、それが例外のログ記録に役立つかどうかを確認したいと考えています。すべてのコンポーネントと登録されたインターセプターのリストを取得し、必要なものをそのリストに追加するだけでこれを実行できると考えていました。
ウォルター
すべての seam コンポーネントへのすべてのメソッド呼び出しをインターセプトして、それが例外のログ記録に役立つかどうかを確認したいと考えています。すべてのコンポーネントと登録されたインターセプターのリストを取得し、必要なものをそのリストに追加するだけでこれを実行できると考えていました。
ウォルター
Seam の Exception ハンドラを使用することをお勧めします。これはあなたがそれを行う方法です:
@Name("org.jboss.seam.exception.exceptions")
@Scope(ScopeType.APPLICATION)
@Install(precedence = Install.APPLICATION)
@BypassInterceptors
public class ExceptionHandler extends org.jboss.seam.exception.Exceptions {
public void handle(Exception e) throws Exception {
//Log your exception here if you want
Events.instance().raiseAsynchronousEvent("SomeListener",e.getMessage());
super.handle(e);
}
デフォルトの ExceptionFilter を優先度の高い独自のものでオーバーライドしてみてください。
@Name("org.jboss.seam.web.exceptionFilter")
@Install(precedence = MOCK, classDependencies="javax.faces.context.FacesContext")
@BypassInterceptors
@Filter(within="org.jboss.seam.web.ajax4jsfFilter")
public class ExceptionFilter extends org.jboss.seam.web.ExceptionFilter
@Override
protected endWebRequestAfterException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Exception e) {
// here you log exceptions
}
}