为了调试性能问题,我在 tomcat 中启用了访问日志。我们没有使用任何 apache 服务器。它是我们正在使用的嵌入式 tomcat。
我正在使用以下模式来访问日志。
access-patten = %h %l %u %t "%r" %s %b %D
%D = 收到请求的第一个字节的时间 ~ 发送响应的最后一个字节的时间。
所以 %D 也包括网络延迟。
但是如何打印接收到的请求的第一个字节和发送的响应的第一个字节之间的时间差。
为了调试性能问题,我在 tomcat 中启用了访问日志。我们没有使用任何 apache 服务器。它是我们正在使用的嵌入式 tomcat。
我正在使用以下模式来访问日志。
access-patten = %h %l %u %t "%r" %s %b %D
%D = 收到请求的第一个字节的时间 ~ 发送响应的最后一个字节的时间。
所以 %D 也包括网络延迟。
但是如何打印接收到的请求的第一个字节和发送的响应的第一个字节之间的时间差。
正如 Tomer 所提到的,自 Tomcat 版本 7.0.42 以来,AccessLogValve 实现中有一个新的日志元素“%F”可用。您可以在案例描述中找到对“%D”和“%F”区别的更好描述:
错误 55102 - 添加报告准备响应所需时间的功能:
Tomcat 的 AccessLogValve 能够使用 %D 报告发送整个请求所花费的时间。这是总处理时间,可能会受到网络条件的影响。有时能够记录服务器准备响应并将第一个内容发送到客户端所花费的时间很有用。
附加的是一个补丁,它记录响应提交的时间,然后允许使用“%F”模式在访问日志中报告该时间(这与用于 HTTPD 的 mod-log-firstbyte 模块相同)。
在我看来,access log的职责是记录程序本身的informs,也就是说tomcat是把程序包看成一个整体的,所以我们可能不会只得到字节的详细信息。
如果要获取应用程序日志记录详细信息,可以记录程序 webapp 日志,可能是程序内部的 log4j 或 logback 日志记录详细信息。例如程序开头的“System.currentTimeMillis()”,也添加到结尾。请使用您的 webapp 日志,但不要访问日志。
谢谢,希望对您有所帮助。