python: logging日志级别详解

时间:2022-02-08 22:03:53
import logging

'''
日志级别:
critical > error > warning > info > debug,notset
级别越高打印的日志越少,反之亦然,即
debug    : 打印全部的日志(notset等同于debug)
info     : 打印info,warning,error,critical级别的日志
warning  : 打印warning,error,critical级别的日志
error    : 打印error,critical级别的日志
critical : 打印critical级别
'''

handler=logging.FileHandler("/tmp/TNLOG-error.log")

def log(level):
    logger = logging.getLogger()
    #不能重复创建handler,否则会重复写入同样的记录?
    logger.addHandler(handler)
    logger.setLevel(level)
    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")
    logger.critical("critical\n")

if __name__ == "__main__":
    log(logging.NOTSET)
    log(logging.DEBUG)
    log(logging.INFO)
    log(logging.WARNING)
    log(logging.ERROR)
    log(logging.CRITICAL)

在程序开发阶段,显然我们需要大量的日志,因此日志级别应为debug,等系统逐渐稳定,我们需要记录的日志应该减少一些,这样可以提高程序执行效率(我觉得似乎不应该删除debug级别的日志语句,因为维护时会再度需要?虽然让代码变长,我认为好的系统应该有这样的语句在)这个时候,我们更关心用户在系统里的动作,用户做了什么,如果我们的程序是一个可以买东西的网站,我们需要记录一切与钱有关的信息,即用户对于核心数据的修改,我们必须记录在案,这个时候我们可以选择info和info以上级别的日志,最重要的信息,显然我们需要选择critical级别,具体怎么划分看系统的设计,我也没有太多经验就先不说了,不过异常部分(try-except)我建议还是使用error级别,即使系统正常运行以后也不能保证有未预料的错误产生,一旦选择低级别的日志很可能会漏记重要的系统异常的原因