Отслеживание приложений фляг не отображается в журнале сервера
Я запускаю приложение 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)
Ответы
Ответ 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 во время разработки, что позволяет полностью исключить его из собственного кода (и, следовательно, производственных развертываний).