【问题标题】:How to use logging in Python Quart route handler?如何在 Python Quart 路由处理程序中使用日志记录?
【发布时间】:2021-01-19 22:32:36
【问题描述】:

我是hypercorn+uvloop+quart 的新手。我正在尝试创建以下文件并在路由处理程序中打印一些信息/调试日志,但没有显示任何内容。我已经调试到路由处理程序并注意到dog_server.logger.disabled = True。有谁知道是什么问题?谢谢!

dog_blueprint.py

from quart import Blueprint
import logging

logging.basicConfig(level=logging.DEBUG)

class DogBlueprint(Blueprint):
    logger = None
    app_config = None

    def register(self, app, options, first_registration: bool = False):
        # app.logger.info('DogBlueprint is registering')
        print('Blueprint registering...')
        self.logger = app.logger 
        self.logger.info("Hello")  # This one working fine
        self.app_config = app.config
        super(DogBlueprint, self).register(app, options, first_registration)
        self.logger.info("World")  # This one working fine

route.py

dog_server = DogBlueprint('dog_server', __name__)
logging.basicConfig(level=logging.DEBUG)

@dog_server.route('/score', methods=['POST'])
async def post_handler():
    received = await _fetch_post_body(request)
    dog_server.logger.info(f'Received size: {len(received)}')  # This one does not work
    ... ... 

【问题讨论】:

  • logging.basicConfig(level=logging.DEBUG)更改为logging.basicConfig(level=logging.INFO)
  • DEBUG 假设给我更多的日志记录。但我确实尝试使用INFO 而不是DEBUG。结果相同。我什至尝试打印critical 错误消息,但仍然没有任何结果,因为记录器以某种方式禁用。
  • dog_server = DogBlueprint('dog_server', __name__)这行代码执行的时候会不会自动调用register函数?
  • 是的,HelloWorld 可以打印出来。
  • 你可以试试DogBlueprint.logger.info,而不是dog_server.logger.info,看看是否能通过。当您将 logger 定义为类变量时,看看您是否能够使用类而不是对象来实现它。

标签: python quart hypercorn


【解决方案1】:

这是 Hypercorn 中的一个错误,请参阅discussion。我会避免使用 0.11.0 并使用 0.10.2 或 0.11.1。 (我是 Hypercorn 作者)。

【讨论】:

  • 已验证 0.10.2 对我来说工作正常。谢谢@pgjones
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2011-07-16
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多