Help us understand the problem. What is going on with this article?

Jersey で見えない例外をログに流す

More than 1 year has passed since last update.

はじめに

Jersey で内部エラーが起こると,ステータス 500 でエラーメッセージとともにレスポンスが返ってきますよね.ところが,ときどき困ったことに,

  • レスポンスに詳細なエラーメッセージがない!
  • サーバログにも何も情報が出ていない!

みたいな挙動で 500 が返ってくることがあり,どう対処しようか困ることがあります(筆者自身も困った).

jersey-500-internal-error.png

こんなときの対処法として,Jersey で発生した例外を拾ってログに情報を流してあげる方法を紹介します.

コード

イベントリスナを設置して,リクエスト/レスポンス処理中に発生した例外の情報をログに出力するようにします.

具体的には,以下のような MyApplicationEventListenerMyRequestEventListener を用意し,このうち 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());
        }
    }
}

これで,発生した例外の情報とスタックトレースがログに出るはず.

参考資料

tnagao7
仕事でJavaの開発しています。学生のときは自動定理証明とかやってました。Java/Scala/OCaml/Haskell/Coq
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away