Jersey で見えない例外をログに流す
はじめに
Jersey で内部エラーが起こると,ステータス 500 でエラーメッセージとともにレスポンスが返ってきますよね.ところが,ときどき困ったことに,
- レスポンスに詳細なエラーメッセージがない!
- サーバログにも何も情報が出ていない!
みたいな挙動で 500 が返ってくることがあり,どう対処しようか困ることがあります(筆者自身も困った).
こんなときの対処法として,Jersey で発生した例外を拾ってログに情報を流してあげる方法を紹介します.
コード
イベントリスナを設置して,リクエスト/レスポンス処理中に発生した例外の情報をログに出力するようにします.
具体的には,以下のような MyApplicationEventListener
と MyRequestEventListener
を用意し,このうち MyApplicationEventListener
をアプリケーションに登録します.
import org.glassfish.jersey.server.monitoring.ApplicationEvent;
import org.glassfish.jersey.server.monitoring.ApplicationEventListener;
import org.glassfish.jersey.server.monitoring.RequestEvent;
import org.glassfish.jersey.server.monitoring.RequestEventListener;
public class MyApplicationEventListener implements ApplicationEventListener {
@Override
public void onEvent(ApplicationEvent event) {
}
@Override
public RequestEventListener onRequest(RequestEvent event) {
return new MyRequestEventListener();
}
}
import java.util.logging.Logger;
import org.glassfish.jersey.server.monitoring.RequestEvent;
import org.glassfish.jersey.server.monitoring.RequestEventListener;
public class MyRequestEventListener implements RequestEventListener {
private static final Logger LOGGER = Logger.getLogger(MyRequestEventListener.class.getName());
@Override
public void onEvent(RequestEvent event) {
switch (event.getType()) {
case ON_EXCEPTION:
LOGGER.severe(event.getException().toString());
}
}
}
これで,発生した例外の情報とスタックトレースがログに出るはず.
参考資料
Author And Source
この問題について(Jersey で見えない例外をログに流す), 我々は、より多くの情報をここで見つけました https://qiita.com/tnagao7/items/b64455cb0e3e5a0b6923著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .