【发布时间】:2019-06-18 21:18:22
【问题描述】:
在 Jetty 9.4 中,org.eclipse.jetty.server.RequestLog 不再实现 org.eclipse.jetty.util.component.LifeCycle,因此我的码头没有配置负责写入访问日志的 RequestLogImpl。
任何指南如何解决这个问题?
【问题讨论】:
标签: jetty logback embedded-jetty jetty-9
在 Jetty 9.4 中,org.eclipse.jetty.server.RequestLog 不再实现 org.eclipse.jetty.util.component.LifeCycle,因此我的码头没有配置负责写入访问日志的 RequestLogImpl。
任何指南如何解决这个问题?
【问题讨论】:
标签: jetty logback embedded-jetty jetty-9
从现在开始使用Server.setRequestLog(RequestLog)。
旧方法被严重破坏,没有捕获 80% 的您的上下文可能存在的失败请求,没有顶级 400 错误,没有无上下文错误,以及令人惊讶的大量其他极端情况。
RequestLog 基础在 2014 年 10 月进行了更改,以解决所有这些丢失的日志事件。 (这是在 Jetty 9.3.0 中引入的)
看到您提到 logback,我敢打赌您正在尝试配置 logback-access。
查看https://github.com/qos-ch/logback/pull/269的讨论
请注意,Jetty 9.4.15+ 有一个接受自定义格式的 CustomRequestLog。
示例用法(使用 slf4j)
Slf4jRequestLogWriter slf4jRequestLogWriter = new Slf4jRequestLogWriter();
// the slf4j named logger to output to
slf4jRequestLogWriter.setLoggerName("my.requestlog");
// The format of the output. (See javadoc for CustomRequestLog for details)
String requestLogFormat = "%{client}a - %u %t \"%r\" %s %O \"%{Referer}i\" \"%{User-Agent}i\"";
CustomRequestLog requestLog = new CustomRequestLog(slf4jRequestLogWriter, requestLogFormat);
server.setRequestLog(requestLog);
【讨论】: