首页 > 解决方案 > 在 Python 中动态设置 Sanic 日志级别

问题描述

我在我的 Sanic 应用程序中公开了一条路由,以根据客户端调用设置日志级别。例如

from sanic.log import logger, logging

@route("/main")
async def sanic_main(request):
    logger.info("Info mesg")
    logger.debug("Debug mesg")

    return json("processed")

@route("/setlevel")
async def setlevel(request):
    level = request.json["level"]
    if level == "info":
         loglevel = logging.INFO
    elif level == "debug":
         loglevel = logging.DEBUG
    logger.setLevel(loglevel)

    return json("done")

然而,在 DEBUG 和 INFO 之间设置日志级别时,我观察到 DEBUG 消息(来自“/main”)仅打印几次的异常行为,反之亦然。

注意:我正在运行多个 Sanic 工人

我应该如何动态设置日志级别?

标签: python-3.xsanic

解决方案


我从来没有做过这样的事情,但这sanic.log.logger只是<class 'logging.Logger'>. 所以,使用setLevel应该没问题。

问题是您如何运行您的应用程序,以及您使用了多少工作人员?如果您处于有多个进程的情况,那么 using/setlevel只会更改该进程的记录器。


推荐阅读