【发布时间】:2021-04-25 06:20:17
【问题描述】:
我想激活netty的访问日志,但是失败了一个NPE。
application.yml
logging.level.reactor.netty.http.server.AccessLog: INFO
build.gradle.kts
tasks.withType<BootRun> {
jvmArgs = listOf("-Dreactor.netty.http.server.accessLogEnabled=true")
}
问题
运行应用程序...
./gradlew bootRun
...在第一个请求时启动应用程序:
2021-04-23 11:54:55.632 ERROR 24889 --- [or-http-epoll-3] o.s.w.s.adapter.HttpWebHandlerAdapter : [cdc3650c-1] Error [java.lang.NullPointerException] for HTTP GET "/foo/bar?x=1", but ServerHttpResponse already committed (200 OK)
2021-04-23 11:54:55.638 ERROR 24889 --- [or-http-epoll-3] r.n.http.server.HttpServerOperations : [id:cdc3650c-1, L:/127.0.0.1:8080 - R:/127.0.0.1:60818] Error finishing response. Closing connection
java.lang.NullPointerException: null
at reactor.netty.http.server.logging.AccessLogHandlerH1.write(AccessLogHandlerH1.java:102) ~[reactor-netty-http-1.0.6.jar:1.0.6]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ Handler com.example.FooController#bar(long, CurrentUser, Continuation) [DispatcherHandler]
所以AccessLogHandlerH1 中的accessLogArgProvider 似乎为空,但我找不到该怎么办?
备注
删除jvmArgs 时,应用程序运行良好。使用 intellij 运行配置时也会出现同样的问题。
我使用的是 Spring Boot 2.5.0-RC1 和 jdk 11。
更新
发现这个问题只发生在激活的http2上
server.http2.enabled: true
在reactor.netty.http.server.logging 中,AccessLogHandlerH1 用于 http/1.1,AccessLogHandlerH2 用于 http2。
似乎 H1 处理程序是独立于激活 http2 使用的,这可能是一个错误?
【问题讨论】:
标签: spring-boot netty