我不想打开危险的调试控制台,但我的应用程序出现 500 错误,并且似乎没有为我编写任何输出以进行更深入的调查。
我在邮件列表上看到了这个交流,这让我看到了这个关于记录错误的页面。
但是,我仍然觉得这非常令人困惑并且有几个问题:
(1) 下面的内容应该放在哪个文件中?
ADMINS = ['yourname@example.com']
if not app.debug:
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler('127.0.0.1',
'server-error@example.com',
ADMINS, 'YourApplication Failed')
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
...假设大型应用程序的“变大”文件模式? __init__.py
? config.py
? run.py
?
(2) 那里的选项让我不知所措,不知道应该使用哪个。当我运行 run.py 时,我应该打开哪些记录器,使用什么设置来复制本地 python 服务器调试到 stdout?我发现默认的本地输出流非常有用,比页面中的交互式调试器更有用。有没有人可以分享一个模式,他们可以通过 nginx 部署来设置复制它的东西,输出到日志?
(3) 有什么我需要改变的,不是在烧瓶级别,而是在 nginx 中,比如在我的/etc/nginx/sites-available/appname
文件中,以启用日志记录?
更新
具体来说,我正在寻找当 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