Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与领班一起工作_Python_Heroku_Flask_Foreman_Procfile - Fatal编程技术网

Python 与领班一起工作

Python 与领班一起工作,python,heroku,flask,foreman,procfile,Python,Heroku,Flask,Foreman,Procfile,我正在尝试设置Heroku ready Flask应用程序,但我不知道如何打开日志记录 如果没有Foreman,我可以创建helloworld应用程序,如中所述: 就这样开始吧: python hello.py 并已登录到stdout 但是,当我遵循时,没有app.run行: import os from flask import Flask app = Flask(__name__) @app.route('/') def hello(): app.logger.debug('A

我正在尝试设置Heroku ready Flask应用程序,但我不知道如何打开日志记录

如果没有Foreman,我可以创建helloworld应用程序,如中所述:

就这样开始吧:

python hello.py
并已登录到stdout

但是,当我遵循时,没有
app.run
行:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    app.logger.debug('A value for debugging')
    app.logger.warning('A value for warning')
    return 'Hello World!'
因此我不知道如何在调试模式下运行和/或获取日志输出:

foreman start -p 5000
程序文件:

web: gunicorn hello:app

Flask应用程序的默认日志记录配置在调试模式和生产模式下不同

在第一个示例中,您处于调试模式。在这种情况下,Flask定义了一个日志处理程序,它将所有级别为
logging.DEBUG
或更高级别的消息记录到
stderr

第二个示例未处于调试模式。未启用调试模式时,Flask将创建一个记录器对象,但不会向其添加任何处理程序,因此不会打印任何内容

对于Foreman和Heroku,您需要将日志发送到
stdout
stderr
,因此您只需添加一个
StreamHandler
,日志级别由您选择:

import os
from flask import Flask

app = Flask(__name__)

# log to stderr
import logging
from logging import StreamHandler
file_handler = StreamHandler()
app.logger.setLevel(logging.DEBUG)  # set the desired logging level here
app.logger.addHandler(file_handler)

@app.route('/')
def hello():
    app.logger.debug('A value for debugging')
    app.logger.warning('A value for warning')
    return 'Hello World!'
或者,如果您愿意,您可以不执行这些操作,只为Foreman/Heroku控制的应用程序启用调试模式,尽管这不是我建议用于生产应用程序的方式:

from flask import Flask
app = Flask(__name__)
app.debug = True

@米格尔-谢谢,但这只适用于警告级别日志记录。调试级日志记录仍未显示。如何与Foreman一起在调试模式下运行应用程序?@Yarin:我已经更新了代码,我在处理程序中设置了日志记录级别,而不是在父日志记录程序中。我还添加了一个代码片段,向您展示了如何在不调用
app.run()
@Miguel-Perfect的情况下设置调试模式-我只需要一行
app.debug=True
。@Miguel-我遇到了一个问题-在这样设置调试时,应用程序不会重新加载更改。当在没有foreman的情况下以调试模式运行应用程序时,我不需要重新启动应用程序来查看更改,但出于某种原因,我会这样做。有什么想法吗?@Yarin:Werkzeug提供了一项功能,当你在Foreman手下运行时,你会用Gunicorn替换它,所以你没有这个功能。如果您将
Procfile
设置为使用Werkzeug,则可以通过调用
app.run(debug=True)
启动应用程序,然后获得重新加载程序。
from flask import Flask
app = Flask(__name__)
app.debug = True