我们使用nginx作为反向代理来控制和logging对Clojure(Java)Web服务应用程序的访问。
我们可以生成一个access_log
并使用nginx捕获传入的头文件。 我们的Clojure应用程序通过log4jlogging活动。 麻烦的是,我们无法将access_log
中的条目与应用程序生成的条目进行匹配。
应用程序通过发送响应标题以及正文来响应访问。 我们可以自由地更改这些响应头。 我最初的想法是生成一个对应于每个Web服务请求的UUID,并在回复标题X-Uuid
中将其发回给用户。 我的想法是,我可以通过创build一个自定义log_format
来捕获这个响应:
log_format lt-custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time $http_x_uuid';
它看起来像nginx可以捕获传入的请求中的头,但不是传出的回复(我通过用$http_x_uuid
replace$http_x_uuid
validation这$http_content_type
)。
所以! 有没有一种方法可以绑定我的access_log
内容和我的log4j条目通过使用nginx捕获传出回复标题? 有没有更好的办法? 我宁愿不必依靠用户生成自己的UUID。
非常感谢!
$ http_x_uuid是客户端发送的头文件。 上游发送的响应头是$ upstream_http_x_uuid
http://wiki.nginx.org/HttpUpstreammodulee#.24upstream_http_.24HEADER