配置 Jetty 10/11 请求日志

Configuring Jetty 10/11 Request Logs

我正在浏览 post 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" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8"

我得到了一些答案,但仍然无法弄清楚下面提到的一些问题。

  1. 123.4.5.6 : request.getRemoteAddr()
  2. 破折号(-) : 无法计算
  3. 破折号(-) : 无法计算
  4. [27/Aug/2004:10:16:17 +0000]:时间戳
  5. 获取: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; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8 : request.getHeader("用户代理")

其他属性如有错误请指正

Jetty默认以NCSA格式登录。据此,

  • (2) 将是 RFC 931“用户的远程日志名称”
  • (3) 将是“用户验证自己的用户名”

不确定,但我认为其中任何一个都不会有任何价值。

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

它有 2 个默认的“NCSA”输出格式(以及其他一些格式和自定义格式的能力)

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

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

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" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8"

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

分解成这样...

  1. 123.4.5.6 : %{client}arequest.getRemoteHost()
  2. - : Jetty 中的 - 硬编码字符串 - ,该条目本来是“远程登录名用户”,但由于 Jetty 不支持 identd ,我们没有办法填写这个值(identd 是一种老派技术,从未在 http 上得到广泛采用)
  3. - : %u 是经过身份验证的用户名,来自 Jetty 内部 APIs (eg: Request.getAuthentication() or Authentication.getUserIdentity() -这仅在您的 webapp 使用 Servlet 安全/身份验证/授权时有效 - 自定义身份验证技术不会填写此条目。
  4. [27/Aug/2004:10:16:17 +0000]%t 是 Jetty API Request.getTimeStamp(),当请求完成解析时,但在将其分派到handler 或 webapp 进行处理。
  5. "GET /jetty/tut/XmlConfiguration.html HTTP/1.1"\"%r\" 是 HTTP 中使用的原始“请求行”。这是 HTTP 请求的第一行。 (或 request.getMethod() + request.getOriginalURI() + request.getProtocol()
  6. 200%s 是根据从 Jetty 内部 API response.getCommittedMetadata().getStatus() 获得的响应提交的状态(此 API 存在是因为HttpServletResponse 是可变的,许多 Web 应用程序倾向于在发送后修改它,这意味着如果我们在这里使用标准 servlet API,我们会记录一个实际未发送的值)
  7. 76793%O 是作为响应的一部分在网络上发送的字节,来自 Jetty 内部 APIs 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 请求 header.

您可以通过无数种方式自定义此输出,只需阅读 CustomRequestLog apidoc 并创建您自己的格式,其中包含您想要的内容 and/or 您正在寻找的内容。

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