我正试图找到一种方法来构造我的代码,以便在Heroku上托管的生产服务器中查看日志。
我发现的每个教程似乎都是这样进行日志记录的:
How to show stdout logs in Heroku using Flask?
但是,我使用的是使用Blueprints的应用程序工厂模式。因此,这里有一些示例:
main.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run()app/_ init _ _.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
...
db = SQLAlchemy()
...
def create_app():
app = Flask(__name__)
...
db.init_app(app)
from .routes.demo_blueprint import demo_blueprint
...
# Register the routes to the Flask object
app.register_blueprint(demo_blueprint)
... app/routes/demo_blueprint.py
from app import db
...
demo_blueprint = Blueprint('demo_blueprint', __name__)
@demo_blueprint.route('/demo', methods=['GET'])
...为了在蓝图级别执行日志记录,我需要从app中导入main.py。但是,这将导致导入错误,因为__init__.py在创建app之前导入了蓝图。我想知道这件事是否有什么可做的。
发布于 2022-04-22 20:28:43
结果发现这是个简单的解决办法。要访问Blueprint中的应用程序上下文,只需使用current_app。如下所示:
How to show stdout logs in Heroku using Flask?
main.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run()app/_ init _ _.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
...
db = SQLAlchemy()
...
def create_app():
app = Flask(__name__)
if __name__ != '__main__':
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
...
db.init_app(app)
from .routes.demo_blueprint import demo_blueprint
...
# Register the routes to the Flask object
app.register_blueprint(demo_blueprint)
... app/routes/demo_blueprint.py
from flask import ***current_user***
from app import db
...
demo_blueprint = Blueprint('demo_blueprint', __name__)
@demo_blueprint.route('/demo', methods=['GET'])
def demo():
current_app.logger.debug('debug message: %s', 'test')
...https://stackoverflow.com/questions/71973482
复制相似问题