代码之家  ›  专栏  ›  技术社区  ›  Khoa Vo

如何在python中完全禁用昂贵的日志任务

  •  1
  • Khoa Vo  · 技术社区  · 8 年前

    巨蟒的 打印 对于较大的对象,我用于记录字典的函数非常慢。我无法找到一种使用标准日志库完全关闭该函数的方法。运行下面的代码作为示例:

    logging.disable(50)
    logging.log(msg=sum(range(20000000)), level=0)
    

    即使结果没有显示出来,总和仍然是绝对计算出来的(在 范围 看看我的意思)。在日志模块中有一个标准的方法来完全禁用计算吗?如果没有,也欢迎其他建议。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Khoa Vo    8 年前

    问题是,在根级别的任何东西(包括函数的参数,而不是函数的内部参数)都是在python一看到它(即在python调用日志函数之前计算的)就计算出来的。为了解决这个问题,你可以把你的逻辑放在一个函数中…只有在适当的时候才执行逻辑

    def lazy_log(callable_fn,log_name,log_level):
        logger = logging.getLogger(log_name)
        if logger.getEffectiveLevel() > log_level:
            return
        logger.log(msg=str(callable_fn()),level=log_level)
    

    我想可能对你有用

    lazy_log(lambda : sum(range(1000000)), None, 51)