Я не хочу включать опасную консоль отладки, но мое приложение получает 500 ошибок и, похоже, не пишет для меня никакой вывод исследовать более глубоко.
Я видел этот обмен в списке рассылки, который привел меня на эту страницу при ошибках регистрации.
Однако я все еще считаю это очень запутанным и имею пару вопросов:
(1) В каком файле должен находиться материал ниже?
ADMINS = ['[email protected]']
if not app.debug:
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler('127.0.0.1',
'[email protected]',
ADMINS, 'YourApplication Failed')
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
... предполагая, что шаблон "получить больше" для более крупных приложений? __init__.py
? config.py
? run.py
?
(2) Я перегружен опциями там и не могу сказать, что я должен использовать. Какие регистраторы я должен включить, с какими настройками, чтобы реплицировать локальный отладчик сервера python? Я получаю stdout при запуске run.py? Я считаю, что поток по умолчанию, локальный выходной поток очень полезен, более того, чем интерактивный отладчик на странице. У кого-нибудь есть шаблон, который они могли бы использовать при создании чего-то, дублирующего это с помощью развертывания nginx, выводящего журнал?
(3) Есть ли что-то, что мне нужно изменить, а не на уровне фляжки, но в nginx, скажем, в моем /etc/nginx/sites-available/appname
файле, чтобы включить ведение журнала?
UPDATE
В частности, я ищу информацию, которую я получаю, когда python запускается локально в отношении того, почему, скажем, пакет не работает или где моя синтаксическая ошибка может быть, или какая переменная не существует:
$ python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from myappname import app
File "/home/me/myappname/myappname/__init__.py", line 27, in <module>
file_handler.setLevel(logging.debug)
File "/usr/lib/python2.7/logging/__init__.py", line 710, in setLevel
self.level = _checkLevel(level)
File "/usr/lib/python2.7/logging/__init__.py", line 190, in _checkLevel
raise TypeError("Level not an integer or a valid string: %r" % level)
Когда я запускаю колбу на сервере, я никогда этого не вижу. Я просто получаю ошибку uWSGI в браузере и не знаю, какой код был проблематичным. Я бы просто хотел, чтобы что-то вроде этого было записано в файл.
Я также отмечаю, что установка следующего ведения журнала на самом деле не сильно писала в файл, даже когда я поворачиваю путь журнала до уровня DEBUG:
from logging import FileHandler
file_handler = FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)
mylog.log
пуст, даже когда мои ошибки приложения отсутствуют.
Я также добавлю, что я попытался установить debug = True следующими способами: __init__.py
:
app = Flask(__name__)
app.debug = True
app.config['DEBUG'] = True
from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)
app.config.from_object('config')
app.config.update(DEBUG=True)
app.config['DEBUG'] = True
if __name__ == '__main__':
app.run(debug=True)
В моем файле config.py у меня есть...
debug = True
Debug = True
DEBUG = True
Тем не менее, отладка не происходит, и без протоколирования или отладки это довольно сложно отследить. Ошибки просто завершают приложение с помощью не полезного сообщения в браузере:
uWSGI Error
Python application not found