【问题标题】:NPE when activating netty access log and http2激活netty访问日志和http2时的NPE
【发布时间】: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


    【解决方案1】:

    原来这是 reactor-netty 中的一个错误:https://github.com/reactor/reactor-netty/issues/1610

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2017-11-26
      • 2019-07-12
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多