首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将Flask优秀的调试日志消息写入生产环境中的文件?

如何将Flask优秀的调试日志消息写入生产环境中的文件?
EN

Stack Overflow用户
提问于 2012-12-26 16:35:36
回答 4查看 69.1K关注 0票数 60

我有一个Flask应用程序,它工作得很好,偶尔会产生错误,在使用debug=True运行时可以看到:

代码语言:javascript
复制
if __name__ == '__main__':
    app.run(debug=True)

我得到了有用的错误消息,例如:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./main.py", line 871, in index_route

KeyError: 'stateIIIII'

当我在生产环境中运行应用程序时(使用Lighttpd + fastcgi),我希望将这样的错误消息保存到一个文件中。

在查看了各种StackOverflow问题(http://flask.pocoo.org/docs/errorhandling/http://docs.python.org/2/library/logging.html等)、Flask邮件列表和一些博客之后,似乎没有一种简单的方法可以将所有重要的错误消息发送到一个文件中-我需要使用Python日志记录模块来定制内容。所以我想出了下面的代码。

在我的应用程序文件的顶部,我有各种导入,后面跟着:

代码语言:javascript
复制
app = Flask(__name__)

if app.debug is not True:   
    import logging
    from logging.handlers import RotatingFileHandler
    file_handler = RotatingFileHandler('python.log', maxBytes=1024 * 1024 * 100, backupCount=20)
    file_handler.setLevel(logging.ERROR)
    app.logger.setLevel(logging.ERROR)
    app.logger.addHandler(file_handler)

然后,我将每条路由的代码放在try/except语句中,并使用traceback找出错误来自哪一行,并打印出一条漂亮的错误消息:

代码语言:javascript
复制
def some_route():
    try:
        # code for route in here (including a return statement)

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        app.logger.error(traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2))
        return render_template('error.html')

然后在文件的末尾,我删除了debug=True语句。尽管我认为我不需要这样做,因为应用程序是由fastcgi服务器运行的(?)当它在生产中运行时。我的应用程序代码的最后两行如下所示:

代码语言:javascript
复制
if __name__ == '__main__':
    app.run()

我正在努力让它工作。我认为最好的方法是使用(app.logger.error('test message') )获取一条错误日志消息并保存到文件中,但它只打印这一条消息。直接在该错误之后记录另一个错误的尝试将被忽略。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14037975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档