我的lua接口里,使用了ngx.local.capture()子请求,请求了一个后端代理地址,匹配这个后端地址的location域配置了一个accesslog,但为何日志文件里没有转发记录?
关键代码如下:
--转发到MQ队列
local res = ngx.location.capture('/send_to_mq', {method = ngx.HTTP_POST, body = datasource})
if res.status == 200 then
kgsys.exit_by_json(1)
else
mainservice:log_fail_data(31504, 1, data)
end
子请求用location匹配到后转发到MQ服务器上:
location /send_to_mq {
proxy_pass http://mq_backend/rawdata/v1/monitor_gz/PostMessage;
#proxy_next_upstream_tries 1;
proxy_set_header Content-Type 'application/json;charset=UTF-8';
include /usr/local/openresty/nginx/conf/proxy.conf;
access_log /data1/logs/sxxx_mq-access_log access;
error_log /data1/logs/sxxx_mq-error_log;
}
我的问题是:/data1/logs/sxxx_mq-access_log,/data1/logs/sxxx_mq-error_log。为何这两个日志文件是空的?权限都是有的,ngx的工作进程自己创建的,转发是成功的,我已从MQ上取出数据了。
但日志文件不应该为空啊。我直接curl访问 http://ip:port:80/send_to_mq 这个请求时,就可以产生日志数据,但在生产环境,是lua代码里请求的,没有日志,为何?
这个是第三方服务,应该跟本问题无关,但我也顺便贴一下。
upstream mq_backend {
server 10.1.19.135:18000 max_fails=5 fail_timeout=10s;
server 10.1.19.139:18000 max_fails=5 fail_timeout=10s;
keepalive 2000;
#check interval=3000 rise=3 fall=3 timeout=1000 type=tcp;
}
ngx_lua (openresty?) ngx.local.capture 发起的请求,属于子请求,打开 access 日志的子请求记录开关即可。
Enables or disables logging of subrequests into access_log.