为何lua_ngx发的capture请求没有记录到access_log?

我的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;
    }
阅读 5k
2 个回答

ngx_lua (openresty?) ngx.local.capture 发起的请求,属于子请求,打开 access 日志的子请求记录开关即可。

Syntax:    log_subrequest on | off;
Default:    
log_subrequest off;
Context:    http, server, location

Enables or disables logging of subrequests into access_log.

太对了,大牛就认你了。
我是后面找到了,想上来这里自己回答一下,。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题