RequestLog未在Jetty 9.4中实现LifeCycle

时间:2019-06-18 21:18:22

标签: jetty logback embedded-jetty jetty-9

在Jetty 9.4中,org.eclipse.jetty.server.RequestLog不再实现org.eclipse.jetty.util.component.LifeCycle,因此,我的码头不配置RequestLogImpl来负责写访问日志。

任何准则如何解决?

1 个答案:

答案 0 :(得分:0)

从现在开始使用Server.setRequestLog(RequestLog)

旧方法被严重破坏,没有捕获您的上下文可能遇到的80%失败请求,没有顶级400错误,没有上下文无关的错误以及令人惊讶的大量其他极端情况。

RequestLog基础在2014年10月进行了更改,以解决所有这些丢失的日志事件。 (这是在Jetty 9.3.0中引入的)

https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/server/Server.html#setRequestLog(org.eclipse.jetty.server.RequestLog)

看到您提到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);