【问题标题】:Configuring Jetty 10/11 Request Logs配置 Jetty 10/11 请求日志
【发布时间】:2021-11-05 18:15:18
【问题描述】:
我正在浏览帖子jetty logging 并试图弄清楚打印的每个属性的含义
123.4.5.6 - - [27/Aug/2004:10:16:17 +0000]
“获取 /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"
我得到了一些答案,但仍然无法弄清楚下面提到的一些。
- 123.4.5.6:request.getRemoteAddr()
- 破折号(-):无法弄清楚
- 破折号(-):无法弄清楚
- [27/Aug/2004:10:16:17 +0000]:时间戳
- GET : request.getMethod()
- jetty/tut/XmlConfiguration.html : request.getRequestURI()
- HTTP/1.1:request.getProtocol()
- 200:response.getStatus()
- 76793:response.getHttpChannel().getBytesWritten()
- http://localhost:8080/jetty/tut/logging.html : 不知道
- Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8 : request.getHeader("User-Agent")
如果我对其他属性也有错误,请纠正我。
【问题讨论】:
标签:
java
eclipse
jetty
jetty-10
【解决方案1】:
CustomRequestLog 格式的最新版本的 Jetty 日志请求。
有 2 种默认的“NCSA”输出格式(以及其他几种格式以及自定义格式的能力)
-
NCSA_FORMAT - "%{client}a - %u %t \"%r\" %s %O" 的语法声明
-
EXTENDED_NCSA_FORMAT - NCSA_FORMAT + " \"%{Referer}i\" \"%{User-Agent}i\"" 的语法
因此,根据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 格式之一。
分解成这样……
-
123.4.5.6:%{client}a,即request.getRemoteHost()
-
- :- Jetty 中 - 的硬编码字符串,该条目将是“远程日志名称用户”,但由于 Jetty 不支持 identd,我们没有办法填充它价值(identd 是一种老派技术,从未看到过大量采用 http)
-
- :%u 是经过身份验证的用户名,来自 Jetty 内部 API(例如:Request.getAuthentication() 或 Authentication.getUserIdentity() - 这仅适用于您的 webapp 使用 Servlet 安全/身份验证/授权 - 自定义身份验证技术不会填写此条目。
-
[27/Aug/2004:10:16:17 +0000] :%t 是 Jetty API Request.getTimeStamp(),它在请求完成解析时固定不变,但在将其分派给处理程序或 web 应用程序进行处理之前。
-
"GET /jetty/tut/XmlConfiguration.html HTTP/1.1" :\"%r\" 是 HTTP 中使用的原始“请求行”。这是 HTTP 请求的第一行。 (或request.getMethod() + request.getOriginalURI() + request.getProtocol())
-
200 :%s 是从 Jetty 内部 API response.getCommittedMetadata().getStatus() 获得的响应中提交的状态(此 API 存在是因为 HttpServletResponse 是可变的,并且许多 web 应用程序倾向于在发送后对其进行修改这意味着如果我们在这里使用标准 servlet API,我们会记录一个实际未发送的值)
-
76793 :%O 是作为来自 Jetty 内部 API response.getHttpChannel().getBytesWritten() 的响应的一部分在网络上发送的字节
-
"http://localhost:8080/jetty/tut/logging.html" :\"%{Referer}i\" 是请求 Referer 行(是的,它拼写错误,但是这里有古老的 HTTP 历史说明为什么会这样)。来自request.getHeader("Referer"),很多情况下可以为空。
-
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8" :\"%{User-Agent}i\" 与上面相同,但针对 User-Agent 请求标头。
您可以通过多种方式自定义此输出,只需阅读 CustomRequestLog apidoc 并创建您自己的格式,其中包含您想要的和/或您正在寻找的内容。
https://javadoc.io/doc/org.eclipse.jetty/jetty-server/latest/org.eclipse.jetty.server/org/eclipse/jetty/server/CustomRequestLog.html
【解决方案2】:
Jetty 默认以NCSA 格式登录。据此,
- (2) 将是 RFC 931“用户的远程日志名称”
- (3) 将是“用户验证自己的用户名”
不确定,但我认为这些都不会在任何时候都有价值。