首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测井瓶在Heroku中的应用

测井瓶在Heroku中的应用
EN

Stack Overflow用户
提问于 2022-04-22 18:59:24
回答 1查看 105关注 0票数 0

我正试图找到一种方法来构造我的代码,以便在Heroku上托管的生产服务器中查看日志。

我发现的每个教程似乎都是这样进行日志记录的:

How to show stdout logs in Heroku using Flask?

但是,我使用的是使用Blueprints的应用程序工厂模式。因此,这里有一些示例:

main.py

代码语言:javascript
复制
from app import create_app

app = create_app()

if __name__ == "__main__":
    app.run()

app/_ init _ _.py

代码语言:javascript
复制
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

代码语言:javascript
复制
from app import db
...
demo_blueprint = Blueprint('demo_blueprint', __name__)

@demo_blueprint.route('/demo', methods=['GET'])
...

为了在蓝图级别执行日志记录,我需要从app中导入main.py。但是,这将导致导入错误,因为__init__.py在创建app之前导入了蓝图。我想知道这件事是否有什么可做的。

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 20:28:43

结果发现这是个简单的解决办法。要访问Blueprint中的应用程序上下文,只需使用current_app。如下所示:

How to show stdout logs in Heroku using Flask?

main.py

代码语言:javascript
复制
from app import create_app

app = create_app()

if __name__ == "__main__":
    app.run()

app/_ init _ _.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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')
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71973482

复制
相关文章

相似问题

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