0

我有一个简单的 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

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

任何指针将不胜感激。

谢谢

4

1 回答 1

1

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

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

听起来您已经能够更改产生响应的服务器代码。既然是这样,我不会尝试使用 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 相关的额外“重量”。

于 2012-06-14T19:05:35.597 回答