【问题标题】:How to log some RESTful service response information apache log file?如何记录一些 RESTful 服务响应信息 apache 日志文件?
【发布时间】:2012-06-14 18:15:30
【问题描述】:

我有一个简单的 java RESTful 服务,它查询数据库并根据请求参数发回响应。我需要根据 apache access_log 生成一些简单的报告,例如每天的查询数、类似查询的数量等。

我需要生成的报告之一是列出返回零结果的查询。我想知道如何实现这一目标。我不能依赖 apache 日志中的响应大小,因为仍然会返回结果为零的响应 xml。

如果查询没有返回结果并将其打印在 apache 日志中,我正在考虑设置自定义 cookie..


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined-cookie

不确定这是否可行,或者说实话,这是正确的方法。

任何指针将不胜感激。

谢谢

【问题讨论】:

  • 澄清:根据 mod_log_config 的文档,“%b”格式字符串不包括传出 HTTP 标头的大小。您的问题是“我不能依赖响应大小......因为大小包含标题信息”。您是否指的是其他类型的标题(例如响应数据本身中的列标题)?
  • @csd ...我的错,我把它与 haproxy 日志格式混淆了。不过,问题是它不会返回零字节。例如,如果查询没有返回任何内容,则 REST 响应将类似于 Completed0

标签: java apache access-log


【解决方案1】:

如果您确定“无结果”响应是 NNN 个字节,并且您知道任何其他响应都会不同(更大),那么您可能会查询访问日志以获取响应NNN 的大小。但这有点小题大做,如果空响应的大小因任何原因发生变化,就会变得很脆弱。

我认为 Apache 没有任何内置功能来检查响应的内容并根据数据的某些属性设置变量。 (您可能会使用 mod_ext_filter 做一些非常 hacky 的事情,但这不值得麻烦,而且性能可能会受到影响。)

听起来您已经能够更改产生响应的服务器代码。既然是这样,我不会尝试使用 Apache 日志记录。相反,我会为您的服务器添加一些额外的日志记录功能。每个响应都可以将一行输出到不同的日志文件。线条可能如下所示:

2012-06-14 14:02:15.345 count=0 status=Completed
2012-06-14 14:02:15.906 count=12 status=Completed
...

然后您需要的报告类型变得更容易。

但如果您绝对必须使用 Apache,那么我的建议是发明一个新的 HTTP 标头,例如 X-Query-Result,然后调整您的服务器以在每个响应上设置该标头。例如:

X-Query-Result: count=0 status=Completed

然后类似于您的建议,在您的日志格式中使用\"%{X-Query-Result}i\"。我会选择它而不是 cookie,只是为了避免与 cookie 相关的额外“重量”。

【讨论】:

  • @csd...感谢您的建议。我想尝试在 apache 中添加一个自定义标题,因为当前的报告是基于它的。话说回来。使用 CXF 日志拦截器移动到服务器端始终是一种选择。
猜你喜欢
  • 2015-11-27
  • 2018-06-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多