美文网首页
logging模块的学习记录

logging模块的学习记录

作者: huojusan | 来源:发表于2018-05-14 15:28 被阅读5次

    参考官方文档

    日志级别等级

    • critical > error > warning > info > debug > notset
    Level Numeric value
    CRITICAL 50
    ERROR 40
    WARNING 30
    INFO 20
    DEBUG 10
    NOTSET 0
    • 默认日志级别,为warning级别,也就是说warning级别以上的才会打印输出,而info级别在默认情况下是不会输出的。
    • logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。

    两种方法生成日志文件:

    1. 使用logging.basicConfig( )接口

    通过设置filename等参数,可以将生成的日志,保存在filename指定的文件中,如果不指定filename参数,则会根据日志输出级别,将日志信息通过控制台打印出来。

    # 文件名保存为 ‘‘ log.py ’’
    import logging  
    
    LOGGER_LEVEL = logging.INFO    #设置用户信息级别打印输出
    logging.basicConfig(
                                    level=LOGGER_LEVEL,  
                                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',    
                                    datefmt='%a, %d %b %Y %H:%M:%S',
                                    filename='test.log',
                                    filemode='a'
                            )
    logger = logging.getLogger(__file__)    
    
    logging.debug('debug message')  
    logging.info('info message')  
    logging.warning('warning message')  
    logging.error('error message')  
    logging.critical('critical message') 
    
    

    运行结果:

    INFO:root:info message
    WARNING:root:warning message
    ERROR:root:error message
    CRITICAL:root:critical message
    
    

    logging.basicConfig()接口参数说明

    level=LOGGER_LEVEL, # 定义打印输出级别

    • level : 指定打印输出级别,有以下几个级别:
    • logging.CRITICAL,致命的
    • logging.ERROR, 错误
    • logging.WARNING,警告
    • logging.INFO, 用户信息
    • logging.DEBUG, 调试
    • logging.NOSET 不设置

    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #设置打印输出格式 format可以输出很多有用信息,如上例所示: |%(...)s 输出为字符串 | %(...)d 输出为整数

    • %(levelno)s: 打印日志级别的数值
    • %(levelname)s: 打印日志级别名称
    • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    • %(filename)s: 打印当前执行程序名
    • %(funcName)s: 打印日志的当前函数
    • %(lineno)d: 打印日志的当前行号
    • %(asctime)s: 打印日志的时间
    • %(thread)d: 打印线程ID
    • %(threadName)s: 打印线程名称
    • %(process)d: 打印进程ID
    • %(message)s: 打印日志信息

    datefmt='%a, %d %b %Y %H:%M:%S', # 设置asctime,也就是日期时间的打印格式

    filename='test.log', # log保存的文件名称为 test.log

    filemode='a' # 文件打开模式,‘a’就是追加,是默认参数,跟文件操作一样

    2. 通过创建logger实例,实现文件保存日志和控制台打印输出日志

    logger = logging.getLogger("name") #创建一个logger实例

    # 文件名保存为 ‘‘ log1.py ’’
    import logging
    import sys
    
    # 获取logger实例,如果参数为空则返回root logger
    logger = logging.getLogger("name")
    
    # 给实例指定日志的最低输出级别,默认为WARNING级别
    logger.setLevel(logging.INFO)
    
    # 指定logger输出格式,可以同时作用于文件日志和控制台日志的输出格式
    formatter = logging.Formatter('%(asctime)s %(filename)s %(levelname)-8s: %(message)s')
    
    # 文件日志,指定文件名称和保存日志的格式
    file_handler = logging.FileHandler("test1.log")
    file_handler.setFormatter(formatter)          # 可以通过setFormatter指定输出格式
    # file_handler.formatter = formatter  # 也可以直接给formatter赋值
    
    # 控制台日志,指定控制台输出格式
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(formatter)
    # console_handler.formatter = formatter  # 也可以直接给formatter赋值
    
    # 为logger实例添加的日志处理器,文件处理器和控制台处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    # 输出不同级别的log
    logger.debug('this is debug info')
    logger.info('this is information')
    logger.warn('this is warning message')
    logger.error('this is error message')
    logger.critical('this is critical message')
    
    

    输出结果如下:

    2018-05-04 10:34:10,194 log1.py INFO    : this is information
    2018-05-04 10:34:10,195 log1.py WARNING : this is warning message
    2018-05-04 10:34:10,195 log1.py ERROR   : this is error message
    2018-05-04 10:34:10,195 log1.py CRITICAL: this is critical message
    
    

    相关文章

      网友评论

          本文标题:logging模块的学习记录

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