2015-09-22 14 views
12

Tôi đang chạy ứng dụng Flask với uWSGI và nginx. Có lỗi 500, nhưng traceback không xuất hiện trong trình duyệt hoặc nhật ký. Làm cách nào để đăng nhập truy xuất từ ​​Flask?Traceback ứng dụng Flask không hiển thị trong nhật ký máy chủ

uwsgi --http-socket 127.0.0.1:9000 --wsgi-file /var/webapps/magicws/service.py --module service:app --uid www-data --gid www-data --logto /var/log/magicws/magicapp.log 

Nhật ký uWSGI chỉ hiển thị mã trạng thái 500 chứ không hiển thị lần truy nguyên. Cũng không có gì trong nhật ký nginx.

[pid: 18343|app: 0|req: 1/1] 127.0.0.1() {34 vars in 642 bytes} 
[Tue Sep 22 15:50:52 2015] 
GET /getinfo?color=White => generated 291 bytes in 64 msecs (HTTP/1.0 500) 
2 headers in 84 bytes (1 switches on core 0) 

Trả lời

19

Chạy trong chế độ gỡ lỗi bằng cách đặt biến môi trường FLASK_DEBUG thành 1.

export FLASK_DEBUG=1 # use `set` on Windows 
flask run 

Nếu bạn vẫn đang sử dụng app.run (không còn được khuyến cáo trong Flask 0.11), vượt qua debug=True.

if __name__ == '__main__': 
    app.run(debug=True) 

Bây giờ, dấu vết ngăn xếp sẽ xuất hiện trong đầu cuối và trình duyệt thay vì trang lỗi 500 chung.


Trong quá trình sản xuất, bạn không muốn chạy ứng dụng của mình ở chế độ gỡ lỗi. Thay vào đó, bạn nên ghi lại các lỗi vào một tệp.

Bình sử dụng thư viện ghi nhật ký chuẩn của Python có thể được định cấu hình để ghi nhật ký lỗi. Chèn phần sau đây để gửi các thông điệp tường trình của Flask tới một tập tin.

import logging 
handler = logging.FileHandler('/path/to/app.log') # errors logged to this file 
handler.setLevel(logging.ERROR) # only log errors and above 
app.logger.addHandler(handler) # attach the handler to the app's logger 

Đọc thêm về mô-đun Python logging. Đặc biệt, bạn có thể muốn thay đổi nơi các lỗi được ghi lại hoặc thay đổi mức để ghi lại nhiều hơn là chỉ các lỗi.

Bình cũng có instructions về cách đăng nhập ứng dụng của bạn.

1

Vì cờ gỡ lỗi cài đặt OP answer trong mã có thể giải quyết sự cố tạm thời, nhưng cố gắng giữ mã như đọc biến gỡ lỗi từ môi trường.Bạn có thể sử dụng các dự án như this.

from envparse import env 
app.debug = env('DEBUG', cast=bool) 

Bằng cách này, bạn có thể dễ dàng chuyển chế độ gỡ lỗi khỏi môi trường. Sau đó, sử dụng cài đặt trình quản lý quy trình để đặt biến môi trường.

Upstart (mặc định trong Ubuntu 14,04)

# /etc/init/uwsgiapp.conf 
env DEBUG=true 
script 
    // upstart exec section 
end script 

Systemd (mặc định trong Ubuntu 16.04, Arch)

[Service] 
Environment="DEBUG=true" 
# other parts 

Nếu bạn đang sử dụng os BUILTIN cơ chế quá trình quản lý thì bạn có thể tìm nhật ký/var/log phần

Supervi sord

[program:flask] 
environment=DEBUG=true 
# or use FLASK_DEBUG = 1 
+0

Tự bản thân chuyển chế độ gỡ lỗi bằng biến môi trường ('FLASK_DEBUG'). Việc đặt 'app.debug' sẽ không hoạt động như mong đợi trong nhiều trường hợp, nó không được khuyến nghị. – davidism

+0

@davidism được chỉnh sửa để đề cập đến lá cờ, chỉnh sửa bất kỳ cờ nào nếu bạn có bất kỳ lời đề nghị nào –

Các vấn đề liên quan