Подтвердить что ты не робот

Отслеживание приложений фляг не отображается в журнале сервера

Я запускаю приложение Flask с помощью uWSGI и nginx. Там ошибка 500, но трассировка не отображается в браузере или журналах. Как записать трассировку из Flask?

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

В журнале uWSGI отображается только код состояния 500, а не трассировка. Там также нет ничего в журнале 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)
4b9b3361

Ответ 1

Запустите в режиме разработки, установив для переменной среды FLASK_ENV значение development. Необработанные ошибки будут отображать трассировку стека в терминале и браузере вместо общей страницы ошибок 500.

export FLASK_ENV=development  # use 'set' on Windows
flask run

До Flask 1.0 используйте вместо этого FLASK_DEBUG=1.

Если вы все еще используете app.run (больше не рекомендуется в Flask 0.11), передайте debug=True.

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

В производственной среде вы не хотите запускать ваше приложение в режиме отладки. Вместо этого вы должны записать ошибки в файл.

Flask использует стандартную библиотеку журналов Python, которая может быть настроена для регистрации ошибок. Вставьте следующее, чтобы отправлять сообщения журнала Flask в файл.

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 logger

Узнайте больше о модуле регистрации Python. В частности, вы можете изменить место регистрации ошибок или изменить уровень, чтобы записывать больше, чем просто ошибки.

Flask имеет документацию для настройки регистрации и обработки ошибок.

Ответ 2

Вы можете установить переменную среды FLASK_DEBUG=1 при запуске приложения в качестве службы. Делайте это только временно и обратите внимание, что включение режима отладки на производственном сервере является проблемой безопасности.

Upstart (по умолчанию в Ubuntu 14.04)

# /etc/init/uwsgiapp.conf
env FLASK_DEBUG=1
script
  // upstart exec section
end script

Systemd (по умолчанию в Ubuntu 16.04, Arch)

[Service]
Environment="FLASK_DEBUG=1"
# other parts

Supervisord

[program:flask]
environment=FLASK_DEBUG=1

Обычно журналы будут где-то в /var/log/.

Ответ 3

Вам необходимо проверить права пользователя и группы в вашем коде. Вы можете увидеть это используя команду "top".

Ответ 4

Вы можете использовать расширение Flask-Debug в качестве альтернативы. Конечно, это никогда не должно быть включено на производстве.

from flask import Flask
from flask_debug import Debug
app = Flask(__name__)
Debug(app)
app.run(debug=True)

Затем перейдите по адресу http://localhost: 5000/_debug для предварительного просмотра журналов.

flask-appconfig> = 0.10 поддерживает автоматическую инициализацию Flask-Debug во время разработки, что позволяет полностью исключить его из собственного кода (и, следовательно, производственных развертываний).