coo*_*der 5 java logging spring tomcat spring-boot
我创建了一个 SpringBoot 应用程序。当我发出具有较大标头大小的 HTTP Post 请求时,出现以下错误:
2018-03-09 14:53:01,190 INFO [http-nio-8080-exec-1] logging.DirectJDKLog (DirectJDKLog.java:182) - Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:706) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11InputBuffer.parseHeader(Http11InputBuffer.java:853) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11InputBuffer.parseHeaders(Http11InputBuffer.java:565) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:703) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_101]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Run Code Online (Sandbox Code Playgroud)
请注意,进一步出现的 HTTP 标头解析错误将在 DEBUG 级别记录(如错误注释中所述)。我想解决这个问题,以便所有发生的此类错误都记录在 INFO 级别本身。
因此,我在 application.properties 文件(位于 src/main/resources/config/ )中添加了这两行:
org.apache.juli.logging.UserDataHelper.CONFIG = INFO_ALL
org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME = 0
# server.maxHttpHeaderSize=10000000
Run Code Online (Sandbox Code Playgroud)
但这不起作用(并且仅在 INFO 级别记录第一次出现的错误)。
请注意,设置 maxHttpHeaderSize=10000000 可以正常工作,并且可以使大标头问题完全消失。
但我想要的是 - 所有此类错误都记录在 INFO 级别本身。
任何帮助将不胜感激 :)
附加信息:SpringBoot 版本:1.5.10.RELEASE,Tomcat 版本:8.5.27
这两个属性必须设置为 Java 系统属性。在 Spring Boot 中没有无代码的方法来设置它们(参见这个问题EmbeddedServletContainerCustomizer),所以在这种情况下,我将在Spring Boot 1.x中设置它们:
@Component
public class UserDataHelperCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.setProperty("org.apache.juli.logging.UserDataHelper.CONFIG", "INFO_ALL");
}
}
Run Code Online (Sandbox Code Playgroud)
WebServerFactoryCustomizerSpring Boot 2.x也有类似的情况:
@Component
public class UserDataHelperCustomizer implements WebServerFactoryCustomizer<WebServerFactory> {
@Override
public void customize(WebServerFactory factory) {
System.setProperty("org.apache.juli.logging.UserDataHelper.CONFIG", "INFO_ALL");
}
}
Run Code Online (Sandbox Code Playgroud)
备注: SUPPRESSION_TIME=0和CONFIG=INFO_ALL是等价的,所以只需要设置一个即可。
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |