1. Qiita
  2. 投稿
  3. Java

埋め込み Undertow でアクセスログを残す

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

サーブレットコンテナとしても使える Undertow ですが、Jetty と同様、Jar に一緒に入れて使うこともできます。しかしその際の access log (よくみる CLF 的なアレ)のとり方があまりドキュメントとしてインターネットにない感じだったので書く。

基本的にはメインになる HttpHandler をラップし、ログだけ残す仕事をしてくれる AccessLogHandler を使えば良い:

Main.java
public static void main(String[] args) throws Exception {
    Logger accesslogger = LoggerFactory.getLogger("accesslog");
    HttpHandler mainHanlder = exchange -> {
        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
        exchange.getResponseSender().send("Foo");
    };
    HttpHandler handler = new AccessLogHandler(
         pathHandler,
         accesslogger::info,
         "combined",
         Main.class.getClassLoader());
    Undertow.builder()
            .addHttpListener(8080, "0.0.0.0")
            .setHandler(handler)
            .build().start();
}

第2引数の AccessLogReciever にはいくつかバンドルされている実装があるが、ログの制御は logback に一元化したいため今回はこうした。