dim*_*imi 3 jetty spring-mvc embedded-jetty spring-boot
我正在使用 Spring Boot 1.1.5.RELEASE 构建一个 Web 应用程序,并按照相关 Spring Boot 文档中的描述配置了一个嵌入式 Jetty 。
我想记录所有传入的 HTTP 请求,我能想到的唯一解决方案(在阅读Spring Boot 文档中的“如何配置 Jetty”之后)是引入一个 EmbeddedServletContainerCustomizer:
package com.acme.rest;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.RequestLogHandler;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* blah blah
*
* @author Dimi
*/
@Component
public class EmbededJettyConfig implements EmbeddedServletContainerCustomizer {
/*
* (non-Javadoc)
*
* @see org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer # customize
*/
@Override
public void customize(final ConfigurableEmbeddedServletContainer container) {
// checks whether the container is Jetty
if (container instanceof JettyEmbeddedServletContainerFactory) {
((JettyEmbeddedServletContainerFactory) container)
.addServerCustomizers(jettyServerCustomizer());
}
}
@Bean
public JettyServerCustomizer jettyServerCustomizer() {
return new JettyServerCustomizer() {
/*
* (non-Javadoc)
*
* @see org.springframework.boot.context.embedded.jetty.JettyServerCustomizer #
* customize
*/
@Override
public void customize(final Server server) {
HandlerCollection handlers = new HandlerCollection();
RequestLogHandler requestLogHandler = new RequestLogHandler();
handlers.setHandlers(new Handler[] {new DefaultHandler(), requestLogHandler});
server.setHandler(handlers);
NCSARequestLog requestLog = new NCSARequestLog("logs/requests.log");
requestLog.setExtended(false);
requestLogHandler.setRequestLog(requestLog);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序现在无法开始抛出异常:
java.lang.IllegalArgumentException:需要 ServletContext 来配置默认 servlet 处理
简而言之:在 Spring Boot 中配置嵌入式 Jetty 日志记录的正确方法是什么?
setRequestLogJetty 9.3.8在服务器上有一个新方法。
@Component
public class EnableRequestLog implements EmbeddedServletContainerCustomizer {
private static final JettyServerCustomizer USE_SLF4J_REQUEST_LOG =
server -> server.setRequestLog(new Slf4jRequestLog());
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof JettyEmbeddedServletContainerFactory) {
((JettyEmbeddedServletContainerFactory) container)
.addServerCustomizers(USE_SLF4J_REQUEST_LOG);
} else {
throw new IllegalArgumentException(
"Expected a Jetty container factory but encountered " + container.getClass());
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以实现特定的RequestLog. 请参阅http://www.eclipse.org/jetty/documentation/current/configuring-jetty-request-logs.html
| 归档时间: |
|
| 查看次数: |
6444 次 |
| 最近记录: |