我有一个简单的 java RESTful 服务,它查询数据库并根据请求参数发送回响应。我需要根据 apache access_log 生成一些简单的报告,例如每天的查询数、类似查询的数量等。
我需要生成的报告之一是列出返回零结果的查询。我想知道如何实现这一目标。我不能依赖 apache 日志中的响应大小,因为结果为零的响应 xml 仍会返回。
如果查询没有返回结果,我正在考虑设置一个自定义 cookie,并将其打印在 apache 日志中。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined-cookie
不确定这是否有效,或者说实话,这是否是正确的方法。
任何指点都将受到高度赞赏。
谢谢
最佳答案
如果您确定“无结果”响应是 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 header ,例如 X-Query-Result
,然后调整您的服务器以设置该 header 关于每一个回应。例如:
X-Query-Result: count=0 status=Completed
然后与您的建议类似,在日志格式中使用 \"%{X-Query-Result}i\"
。我会选择这个而不是 cookie,只是为了避免与 cookie 相关的额外“重量”。
关于java - 如何在apache日志文件中记录一些RESTful服务响应信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038969/