Cách xuất biến trong nhật ký nginx để gỡ lỗi


83

Tôi đang kiểm tra nginx và muốn xuất các biến cho các tệp nhật ký. Làm thế nào tôi có thể làm điều đó và tập tin nhật ký nào sẽ đi (truy cập hoặc lỗi).

Câu trả lời:


143

Bạn có thể gửi các giá trị biến nginx thông qua các tiêu đề. Tiện dụng cho sự phát triển.

add_header X-uri "$uri";

và bạn sẽ thấy trong tiêu đề phản hồi của trình duyệt:

X-uri:/index.php

Tôi đôi khi làm điều này trong quá trình phát triển địa phương.

Nó cũng hữu ích để cho bạn biết nếu một tiểu mục có được thực hiện hay không. Chỉ cần rắc nó vào trong mệnh đề của bạn để xem chúng có quen không.

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Vì vậy, việc truy cập một url như http://www.example.com/index.php sẽ kích hoạt tiêu đề sau trong khi truy cập http://www.example.com/img/my-ducky.png sẽ kích hoạt tiêu đề cũ.


29
Lưu ý rằng add_headersẽ chỉ làm việc trên các yêu cầu thành công . Tài liệu nói rằng nó chỉ có thể được áp dụng cho các phản hồi với mã 200, 204, 301, 302 hoặc 304. Do đó, nó không thể được sử dụng để gỡ lỗi lỗi HTTP.
John WH Smith

31
@JohnWHSmith: Như marat đã lưu ý trong câu trả lời này . Tính đến phiên bản 1.7.5 , nginx thêm một "luôn luôn" tham số để add_headermà sẽ trở lại tiêu đề, không có vấn đề gì mã phản hồi. Vì vậy, ví dụ, add_header X-debug-message "A php file was used" always;nên hoạt động ngay cả đối với 500 mã lỗi.
yuvilio

6
Điều này không trả lời câu hỏi nào cả. Chàng trai muốn đăng nhập để đăng nhập tập tin không cho khách hàng.
Avamander

37

Bạn có thể trả về một chuỗi đơn giản dưới dạng phản hồi HTTP:

location /
{
    return 200 $document_root;
}

1
Điều gì nếu bạn muốn trả về hai giá trị biến?
BringBackCoosore64

Đi đến vị trí ngay lập tức sẽ mở hộp thoại Lưu dưới dạng trình duyệt của tôi (đã thử nghiệm trên Opera, Chromium). Không có phản ứng gì.
BringBackCoosore64

@ BringBackCoosore64 Thêm tiêu đề văn bản / html Nội dung có thể giúp ích.
bitwise

Sử dụng Postman , điều này hoạt động mà không có bất kỳ tiêu đề bổ sung. Cảm ơn!
aexl

19

Bạn có thể đặt định dạng nhật ký truy cập tùy chỉnh bằng cách sử dụng lệnh log_formatghi nhật ký các biến bạn quan tâm.


2
cảm ơn, và tôi đoán không có cách nào dễ dàng hơn để tự xuất một biến?
lulalala

@lulalala Không phải tôi biết.
mgorven

Có thể đặt mức ghi nhật ký trong chỉ thị error_logđể debugbạn có thể thấy giá trị của các biến và khối đó được thực thi. Ví dụerror_log file.log debug
Victor Aguilar

1
Lưu ý rằng các biến rỗng được hiển thị như -trong nhật ký, nhưng thực sự trống trong mã nginx, bạn không nên kiểm tra -bất cứ lúc nào. Điều này đôi khi gây nhầm lẫn cho người dùng.
higuita

6

Một tùy chọn khác là bao gồm mô-đun echo khi bạn xây dựng nginx hoặc cài đặt OpenResty được nginx kèm theo một loạt các tiện ích mở rộng (như echo.)

Sau đó, bạn có thể chỉ cần rắc cấu hình của mình bằng các câu như:

echo "args: $args"

2
Khi tôi thử điều này, nó sẽ phát ra một tệp văn bản đơn giản trên máy chủ làm gián đoạn đầu ra của trang thực tế.
JaredMcAteer

Có một echo_logchỉ thị trong phát triển.
Gajus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.