私はdangerous debugging consoleをオンにするつもりはありませんが、私のアプリケーションでは500エラーが発生しており、より深く調査するための出力が書かれていないようです。nginx、uwsgi、フラスコによる簡単なアプリケーションのロギング/デバッグ?
私はto this page on logging errorsを導いたthis exchange on the mailing listを見ました。
しかし、私はまだ、これは非常に混乱見つけ、質問のカップルを持っている:
(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サーバーのデバッグを複製するのですか?run.pyを実行するとstdoutになりますか?デフォルトのローカル出力ストリームは、ページ内のインタラクティブなデバッガよりも非常に便利です。誰もがnginxのデプロイメントでこれを複製してログに出力する設定に、共有できるパターンを持っていますか?
(3)フラスコレベルではなく、ログを有効にするには、/etc/nginx/sites-available/appname
ファイルのnginxで変更が必要なものはありますか? Pythonは理由としてローカルで実行したとき、私は、たとえば、パッケージが動作していない、またはどこに構文エラーがあるかもしれない、またはどのような変数」doesnの取得のように具体的に、私は情報を探しています
UPDATE
t存在:
$ 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
が、場合でも、私のアプリケーションエラー空白でありますでる。
私はまた__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
更新された質問に基づいて回答を更新しました。 –
解決済みですか? – hafichuk
私はしませんでした。プロダクションマシンをホストすることができませんでした、フラスコであきらめました。 – Mittenchops