Apakah mungkin untuk mencatat data respons di log akses nginx?


13

Saya mencoba mencetak data respons untuk keperluan pengembangan / debugging. Saya tidak dapat menemukan pertanyaan serupa atau info apa pun tentang ini. Jika ya, tambahkan komentar.


Maksud Anda sesuatu seperti ini? stackoverflow.com/questions/4939382/…
Taylor Jasko

1
Tidak. Itu adalah badan permintaan tetapi saya ingin memuntahkan badan tanggapan. Terima kasih.
vamsu

Jawaban:


11

Gunakan body_filter_by_luauntuk menetapkan badan permintaan ke variabel nginx, berikut adalah contohnya:

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    log_format log_req_resp '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent" $request_time req_body:"$request_body" resp_body:"$resp_body"';

    server {
        listen 8082;
        access_log logs/access.log log_req_resp;

        lua_need_request_body on;

        set $resp_body "";
        body_filter_by_lua '
            local resp_body = string.sub(ngx.arg[1], 1, 1000)
            ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
            if ngx.arg[2] then
                ngx.var.resp_body = ngx.ctx.buffered
            end
        ';

        location / {
            echo "Hello World!";
        }
    }
}

1
Dalam kode, kita tampaknya meletakkan 1000 byte pertama dari respons chunk dan meletakkan ke resp_body yaitu di baris ini "resp_body = string.sub (ngx.arg [1], 1, 1000)". Apakah ada alasan khusus untuk ini menjadi 1000.
doon

Dalam kasus saya ini tidak memberi saya respons tetapi memberi saya jalur log seperti ini "resp_body:" "access_log / usr / local / openresty / nginx / logs / access.logupstreamlog" Bisakah Anda menyarankan apa yang salah?
SMT

3

gunakan modul ngx_lua

seperti ini

body_filter_by_lua 'ngx.log(ngx.CRIT,ngx.arg[1])';

di kanan location


1
Saya pikir saya lebih suka menggunakan ngx.DEBUG. CRIT mungkin dicetak ke konsol, diemail ke seluruh tim sysadmin, dll ...
Michael Hampton

0

Saya telah menemukan ini sebagai contoh , dan saya pikir modul gema juga dapat melakukannya.


2
Modul gema dan contohnya memberikan bicara tentang cara mencatat header permintaan / badan tetapi saya ingin mencatat badan tanggapan. Terima kasih petermolanar.
vamsu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.