美文网首页
python标准日志模块

python标准日志模块

作者: Byte猫 | 来源:发表于2019-05-12 12:44 被阅读0次

    日志对于系统开发的开发、调试和运行整个过程中都起着很重要的作用,调试阶段需要查看日志来明确问题所在,运行阶段如果程序崩溃,日志可以记录程序崩溃的相关原因。python的标准库里的logging模块从Python2.3开始支持,包含四大组件:

    组件 说明
    logger 提供应用程序代码直接使用的接口
    handler 用于将日志记录发送到指定的目的位置
    filter 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
    formatter 用于控制日志信息的最终输出格式

    logger对象的声明

    # coding=utf-8
    import logging
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    

    logger为日志对象是logging模块中最基础的对象。
    设置logger的level可以指定哪些级别的日志才会被输出。一共有五个等级,从低到高日志的信息量是依次减少。当为某个应用程序指定一个日志级别后,应用程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息。

    严重等级 描述
    DEBUG 最详细的日志信息,典型应用场景是 问题诊断
    INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
    WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
    ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
    CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

    logging模块中的handler处理器

    handler处理器用于设置日志发送的路径

    1、StreamHandler

    可用来输出日志到任何类似文件流的对象,典型例子是输出到控制台

    # coding=utf-8
    import logging
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    
    # 创建StreamHandler输出到控制台
    shander = logging.StreamHandler()
    shander.setLevel(logging.DEBUG)
    
    # 添加handlers到logger
    logger.addHandler(shander)
    
    # 测试
    logger.debug("this is a debug")
    

    2、FileHandler

    将日志输出发送到磁盘文件

    # coding=utf-8
    import logging
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    
    # 创建FileHandler输出到磁盘
    fhander = logging.FileHandler("debug.log", mode='w')
    fhander.setLevel(logging.DEBUG)
    
    # 添加handlers到logger
    logger.addHandler(fhander)
    
    # 测试
    logger.debug("this is a debug")
    

    logging模块中的filter过滤器

    使用filter可以完成比级别更复杂的过滤

    # coding=utf-8
    import logging
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    
    # 创建StreamHandler输出到控制台
    shander = logging.StreamHandler()
    shander.setLevel(logging.DEBUG)
    
    # 添加一个Filter规则
    def should_log(record):
        '''
        返回一条日志是否应该被记录
        '''
        if record.msg.startswith("this"):
            return False
        return True
    
    filter1 = logging.Filter()
    filter1.filter = should_log
    
    # 添加handlers到logger
    logger.addHandler(shander)
    # 添加filter到logger
    logger.addFilter(filter1)
    
    # 测试
    logger.debug("this is a debug")
    logger.debug("that is a debug")
    

    LogRecord的属性

    logging模块中的formatter格式器

    formatter可以设置日志信息的结构和内容

    # coding=utf-8
    import logging
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    
    # 创建StreamHandler输出到控制台
    shander = logging.StreamHandler()
    shander.setLevel(logging.DEBUG)
    # 创建 logging format
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    shander.setFormatter(formatter)
    
    # 添加handlers到logger
    logger.addHandler(shander)
    
    # 测试
    logger.debug("this is a debug")
    

    logging 模块提供了向日志消息添加各种详细信息的速记表


    相关文章

      网友评论

          本文标题:python标准日志模块

          本文链接:https://www.haomeiwen.com/subject/zjzgmqtx.html