由于Jersey 2.x在最新版本中弃用了LoggingFilter,因此我们继续进行Jersey自己的请求/响应日志记录以及log4j2。我们正在使用springboot。当我们使用POST方法访问Web服务时会出现问题,它将引发NegativeArraySizeException
java.lang.NegativeArraySizeException
at org.glassfish.jersey.logging.LoggingInterceptor.logInboundEntity(LoggingInterceptor.java:210) ~[jersey-common-2.23.2.jar:?]
at org.glassfish.jersey.logging.ServerLoggingFilter.filter(ServerLoggingFilter.java:108) ~[jersey-common-2.23.2.jar:?]
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) ~[jersey-server-2.23.2.jar:?]
at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) ~[jersey-server-2.23.2.jar:?]
我的log4j2配置-
<!-- Jersey logger -->
<AsyncLogger name="org.glassfish" level="all" additivity="false">
<AppenderRef ref="Console" level="off" />
<AppenderRef ref="RollingFileIO" level="all" />
</AsyncLogger>
如果我将日志级别设置为off
,则一切正常。SpringBoot版本1.4.3
为了安全起见,我能够在Wireshark中看到传入的数据。
我得到了答案。为了让jersey记录日志,我们正在注册-
jerseyConfig.register(
new LoggingFeature(
java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME),
java.util.logging.Level.SEVERE,
LoggingFeature.Verbosity.PAYLOAD_ANY,
Integer.MAX_VALUE)
);
在这里,第4个参数是maxEntitySize
,即Integer.MAX_VALUE。因此,在创建日志记录缓冲区时,jersey用初始化数组maxEntity + 1
,这导致了异常。
我将此值更改为一个较低的/逻辑数字,并且一切正常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句