このマニュアルは進行形で、現在は未完成です。
改善に協力したいと思っている場合は、READMEを参照してください。

25 ロギング

Ratpackには、お気に入りのロギングライブラリをコンパイル時に簡単にバインドできるSLF4Jがロギングに使用されています。

ライブラリオプションには、次のものがあります。

1つのロギングライブラリを依存関係として追加し、SLF4J構文を使用してログに記録するだけです。現在別のロギングライブラリを使用している場合は、SLF4Jには移行を自動化する移行ツールが用意されています。
JavaとGroovyの例を以下に示し、詳細をSLF4Jマニュアルで見つけることができます。

1.25 Java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogExample {
  private final static Logger LOGGER = LoggerFactory.getLogger(LogExample.class);
    
  public void log() {
    LOGGER.info("Start logging");
    LOGGER.warn("Logging with a {} or {}", "parameter", "two");
    LOGGER.error("Log an exception", new Exception("Example exception"));
    LOGGER.info("Stop logging");
  }
}

2.25 Groovy

import groovy.util.logging.Slf4j

@Slf4j
class LogExample {
  void log() {
    log.info "Start logging"
    log.warn "Logging with a {} or {}", "parameter", "two"
    log.debug "Detailed information"
    log.info "Stop logging"
  }
}

3.25 リクエストロギング

Ratpackでは、各リクエストに関する情報をログに記録するメカニズムRequestLoggerが提供されています。リクエストロガーはハンドラーです。リクエストを完了すると、それを処理する各リクエストがログに記録されます。一般的に、ハンドラーチェーンの早い段階に配置され、Chain.all(Handler)メソッドで追加されて、すべてのリクエストがログに記録されます。

Ratpackでは、NCSA Common Log Formaでログに記録するRequestLogger.ncsa()メソッドが用意されています。この実装は、ratpack.requestsという名前のslf4jロガーにログに記録します(RequestLogger.ncsa(Logger)メソッドでは、代替ロガーを指定できます)。

import ratpack.core.handling.RequestLogger;
import ratpack.core.http.client.ReceivedResponse;
import ratpack.test.embed.EmbeddedApp;
import static org.junit.jupiter.api.Assertions.*;

public class Example {
  public static void main(String... args) throws Exception {
    EmbeddedApp.fromHandlers(c -> c
      .all(RequestLogger.ncsa())
      .all(ctx -> ctx.render("ok"))
    ).test(httpClient -> {
      ReceivedResponse response = httpClient.get();
      assertEquals("ok", response.getBody().getText());

      // Check log output: [ratpack-compute-1-1] INFO ratpack.requests - 127.0.0.1 - - [30/Jun/2015:11:01:18 -0500] "GET / HTTP/1.1" 200 2
    });
  }
}

代替形式を使用してロガーを作成する情報については、RequestLogger のドキュメントを参照してください。