hon*_*wei 8 java spring spring-webflux
对于在Netty上运行的Spring WebFlux,我希望有像Tomcat一样的访问日志,但我在Spring文档中找不到任何内容.
有人可以帮忙吗?
这Netty中v0.7.9.RELEASE下得到落实这个问题。根据此处发布的说明,您可以启用日志,以便:
-Dreactor.netty.http.server.accessLogEnabled=true系统属性运行您的应用程序和
reactor.netty.http.server.AccessLog请注意,目前仅支持CLF。
在实现该功能之前可用的其他解决方案例如:
作为@GreyTeardrop注释中,你可以设置的日志级别reactor.ipc.netty.channel.ContextHandler和reactor.ipc.netty.http.server.HttpServer到DEBUG。这将以十六进制+ ASCII表的形式对每个消息进行多行转储。在生产中使用并不太令人满意,但是对于调试很有用。
如果您的项目中装有Spring Actuator,则支持跟踪HTTP请求。跟踪信息被发送到HttpTraceRepositorybean。默认情况下,它InMemoryHttpTraceRepository是可保存最后100条痕迹的。
您可以通过实现自己的HttpTraceRepository或装饰器来利用它,这将添加跟踪记录。您需要将其注册为Bean,它将替换自动配置的Bean InMemoryHttpTraceRepository。
请注意,HTTP跟踪仅具有关于请求和响应的有限信息集,例如。您无权访问请求/响应的正文或大小。
我最终实现的解决方案如下所示:
@Bean
public HttpTraceRepository httpTraceRepository() {
return new AccessLoggingHttpTraceRepositoryDecorator(
new InMemoryHttpTraceRepository(),
LoggerFactory.getLogger("netty.Access"),
new HttpTraceLogFormatter()
);
}
public class AccessLoggingHttpTraceRepositoryDecorator implements HttpTraceRepository {
private HttpTraceRepository delegate;
private Logger logger;
private HttpTraceLogFormatter formatter;
public AccessLoggingHttpTraceRepositoryDecorator(HttpTraceRepository delegate, Logger logger, HttpTraceLogFormatter formatter) {
this.delegate = delegate;
this.logger = logger;
this.formatter = formatter;
}
@Override
public List<HttpTrace> findAll() {
return delegate.findAll();
}
@Override
public void add(HttpTrace trace) {
if (logger.isDebugEnabled()) {
try {
logger.debug(formatter.format(trace));
} catch (Exception e) {
logger.error("Failed to log trace " + trace, e);
}
}
delegate.add(trace);
}
}
public class HttpTraceLogFormatter {
public String format(HttpTrace trace) {
// TODO implement this according to your preference
return ...;
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方法,您可以获得几乎通用的日志格式消息。
您可能需要application.yml通过指定以下内容来调整跟踪对象中包含的内容
management:
trace:
http:
include: REQUEST_HEADERS, RESPONSE_HEADERS, PRINCIPAL, REMOTE_ADDRESS, TIME_TAKEN
Run Code Online (Sandbox Code Playgroud)
默认情况下仅REQUEST_HEADERS, RESPONSE_HEADERS, COOKIE_HEADERS, TIME_TAKEN包括在内。
Spring Boot Actuator在的帮助下实现了跟踪HttpTraceWebFilter。如果您不想使用Actuator的解决方案,则可以从的源代码中汲取灵感HttpTraceWebFilter并实现自己的WebFilter。将其公开为Spring bean,它将自动在Netty中注册。
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |