Python 3.x 在Python中动态设置Sanic日志级别

Python 3.x 在Python中动态设置Sanic日志级别,python-3.x,sanic,Python 3.x,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 se

我在我的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")
但是,在设置调试和信息之间的日志级别时,我发现调试消息(来自“/main”)只打印了几次,反之亦然

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


如何动态设置日志级别?

我从未做过类似的事情,但是
sanic.log.logger
只是
的一个实例。因此,使用
setLevel
应该可以


问题是你是如何运行你的应用程序的,你使用了多少工人?如果您有多个进程,那么使用
/setlevel
只会更改该进程的记录器。

一种方法是使用
aioredis
,如博客中所述:


我确实有多(4)名员工。如何使日志级别在所有工作人员之间同步?这无疑是个问题。我认为有很多潜在的方法可以做到这一点,因此问题的范围变得非常广泛。在Sanic论坛上发布您的问题,我可以尝试以更熟悉的格式帮助您解决问题:Will do。顺便说一句,你的评论让我觉得将日志级别存储在应用程序之外(在Redis中)是否有意义。这样,当客户端调用路由时,装饰器可以在服务每个请求之前检查并设置日志级别。你怎么认为?我唯一关心的是增加的延迟,但对于Redis,我不认为这是一个大问题。参考:@sandyp将在线程中响应。我认为,此任务的最佳解决方案是。