配置Jetty 10/11请求日志

2022-03-04 00:00:00 java eclipse jetty jetty-10

我正在查看帖子jetty logging,试图弄清楚打印的每个属性的含义

123.4.5.6--[27/Aug/2004:10:16:17+0000] ";get/jetty/tut/XmlConfiguration.html HTTP/1.1"; 200 76793";http://localhost:8080/jetty/tut/logging.html"; &q;mozilla/5(X11;U;Linux i686;EN-US;RV:1.6)Gecko/20040614火狐/0.8&q;

我知道一些问题的答案,但仍然找不到下面提到的一些问题的答案。

  1. 123.4.5.6:request.getRemoteAddr()
  2. 破折号(-):无法计算
  3. 破折号(-):无法计算
  4. [27/Aug/2004:10:16:17+0000]:时间戳
  5. get:request.getMethod()
  6. jetty/tut/XmlConfiguration.html:request.getRequestURI()
  7. HTTP/1.1:request.getProtocol()
  8. 200:response.getStatus()
  9. 76793:response.getHttpChannel().getBytesWritten()
  10. http://localhost:8080/jetty/tut/logging.html:无法计算
  11. Mozilla/5.0(X11;U;Linuxi686;EN-US;RV:1.6)Gecko/20040614 Firefox/0.8:request.getHeader(";User-Agent";)

如果我在其他属性上也是错误的,请纠正我。


解决方案

最新版本的Jetty日志请求,格式为CustomRequestLog

它有两种默认的输出格式(以及其他几种格式并能够自定义格式)

(&q;NCSA&QOOT;FORMAT-QUOT;NCSA&QOOT;FORMAT)

  1. NCSA_FORMAT-"%{client}a - %u %t "%r" %s %O"的语法声明
  2. EXTENDED_NCSA_FORMAT-NCSA_FORMAT+" "%{Referer}i" "%{User-Agent}i""的语法

因此,根据CustomRequestLog上的文档,这意味着以下输出.

123.4.5.6--[27/08/2004:10:16:17+000]";GET/jetty/tut/XmlConfiguration.html HTTP/1.1200 76793";http://localhost:8080/jetty/tut/logging.html";/5.0(X11;U;Linuxi686;EN-US;RV:1.6)GECKO/20040614火狐/0.8RV;

实际上是扩展的NCSA格式之一。

这样分解.

  1. 123.4.5.6%{client}a,即request.getRemoteHost()
  2. -:在Jetty中,硬编码字符串-条目应该是远程日志名称user";,但是由于Jetty不支持identd,我们没有办法填写此值(identd是一种老式技术,从未在http中得到广泛采用)
  3. -%u是经过身份验证的用户名,来自Jetty内部API(例如:Request.getAuthentication()Authentication.getUserIdentity())-只有当您的web应用使用Servlet安全/身份验证/授权时才有效-自定义身份验证技术不会填写此条目。
  4. [27/Aug/2004:10:16:17 +0000]%t%t是Jetty APIRequest.getTimeStamp(),在请求解析完成后,调度到处理程序或webapp进行处理之前设置。
  5. "GET /jetty/tut/XmlConfiguration.html HTTP/1.1""%r",即HTTP中使用的原始";请求行";。它是HTTP请求的第一行。(或request.getMethod()+request.getOriginalURI()+request.getProtocol())
  6. 200%s,即Jetty内部接口response.getCommittedMetadata().getStatus()返回时提交的状态(该接口之所以存在,是因为HttpServletResponse是可变的,很多webapp都会在发送后进行修改,这意味着如果我们在这里使用标准的servlet接口,我们会记录一个实际没有发送的值)
  7. 76793%O,作为Jetty内部接口响应的一部分在网络上发送的字节数response.getHttpChannel().getBytesWritten()
  8. "http://localhost:8080/jetty/tut/logging.html""%{Referer}i",即请求Referer行(是的,它拼写错误,但这里有古老的HTTP历史记录说明原因)。来自request.getHeader("Referer"),很多情况下可以为空。
  9. "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8""%{User-Agent}i"同上,只是User-Agent请求头不同。

您可以通过多种方式自定义此输出,只需阅读CustomRequestLogapidoc并创建您自己的格式即可,该格式包含您需要的内容和/或您要查找的内容。

https://javadoc.io/doc/org.eclipse.jetty/jetty-server/latest/org.eclipse.jetty.server/org/eclipse/jetty/server/CustomRequestLog.html

相关文章