如何记录一些RESTful服务响应信息apache日志文件?

时间:2012-06-14 18:15:31

标签: java apache access-log

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

不确定这是否有效或者说实话,这是正确的做法。

任何指针都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分: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相关的额外“重量”。