25 日志记录
Ratpack 使用 SLF4J 进行日志记录,允许您在编译时轻松绑定您最喜欢的日志记录库。
库选项包括
- 无操作 - 丢弃所有日志(默认)
- Log4J
Log4J 通过 使所有记录器异步,允许完全的非阻塞配置。实现此目的最一致的方法是提供系统属性
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
。Log4J 系统属性也可以在应用程序类路径中提供的文件log4j2.component.properties
中定义。在设置此属性之前,请仔细阅读 权衡。Log4J 还允许 混合配置 同步和异步记录器。 - Logback - 原生 SLF4J 实现,具有“零内存和计算开销”
Logback 在阻塞的附加器周围提供非阻塞的附加器。有关如何正确配置它们的详细信息,请查看 Logback 手册
- Java Util 日志记录
- 简单 - 将 INFO 级别的消息及更高级别的消息记录到 System.err
- Jakarta Commons 日志记录
只需添加一个日志记录库作为依赖项,并使用 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 提供了 RequestLogger.ncsa()
方法,该方法以 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
的文档。