Python基础 logging模块使用(一)

作者: 伊洛的小屋 | 来源:发表于2020-02-13 12:05 被阅读0次
    一. 日志的作用
    • 日志是对软件执行时所发生事件的一种追踪方式,无论是开发人员还是测试人员,日志的重要的作用应该是不言而喻的;不但可以帮助开发定位缺陷解决问题,也可以辅助在测试过程中的测试工程师定位缺陷。
      作为测试人员更应该重视日志,无论是单元测试去捕获Traceback,还是做接口/UI自动化都应当输出有必要的日志

    本文首发自伊洛的个人博客:https://yiluotalk.com,欢迎关注并查看更多内容!!!

    • 那么python中,怎么可以做到一个算是标准的日志记录呢? 很多人会使用print直接输出的方式,但是其实这事极为不规范的做法,来看看官网上怎么说
      截图来自官网
    • 今天就来简单的介绍下python logging模块的基本使用方法
    二. 日志的级别
    • 5个级别分别是,可以注意到源码中,WARN = WARNING,后续使用中两者是一个意思
      截图来自官网
    • 每个级别都有对应的一个值


    三. logging的工作流程
    • 还是先来看看官网上的流程图


      截图来自官网
    • 可以看到以下几种类型,Logger、LogRecord、Filter、Handler、Formatter
    1. Logger:是进行日志记录时创建的对象
    2. LogRecord:日志记录器,将日志传到相应的处理器处理
    3. Handler:即用来处理日志记录的类
    4. Filter :过滤器
    5. Formatter:格式化器, 指明了最终输出中日志记录的布局
    四. 简单的例子
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    
    logging.debug('调试信息')
    logging.info('信息消息')
    logging.warning('错误:config file %s not found', 'server.conf')
    logging.error('发生错误')
    logging.critical('关键错误')
    
    • 看以下输出结果
    WARNING:root:错误:config file server.conf not found
    ERROR:root:发生错误
    CRITICAL:root:关键错误
    
    Process finished with exit code 0
    
    五. basicConfig() 使用方法
    • basicConfig()主要做一些基础的配置
    • 我们将日志的结果输出到一个名为"test.log"的文件
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    
    logging.basicConfig(filename="test.log", filemode="w", level=logging.DEBUG)
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    • 打开"test.log"文件
    DEBUG:root:This is a debug message
    INFO:root:This is an info message
    WARNING:root:This is a warning message
    ERROR:root:This is an error message
    CRITICAL:root:This is a critical message
    
    • filename:即日志输出的文件名
    • filemode:这个是指定日志文件的写入方式
    • format:指定日志信息的输出格式
    • datefmt:指定时间的输出格式
    • level:指定日志输出的类别
    六. 自定义 Logger
    • 定义一个Logger,名字为test_log, 通常默认为 __name__
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logger = logging.getLogger('test_log')
    
    logger.info('info log1')
    logger.debug('debug log')
    logger.warning('warning log')
    logger.info('info log2')
    logger.info('info log3')
    logger.critical('critical log')
    
    • 查看文件的日志结果
    2020-02-13 09:49:51,040 - test_log - INFO - info log1
    2020-02-13 09:49:51,040 - test_log - WARNING - warning log
    2020-02-13 09:49:51,040 - test_log - INFO - info log2
    2020-02-13 09:49:51,040 - test_log - INFO - info log3
    2020-02-13 09:49:51,040 - test_log - CRITICAL - critical log
    
    七. 设置等级
    • 设置等级为WARNING,打印出包括这个等级及这个等级之上级别的日志
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logger = logging.getLogger('test_log')
    logger.setLevel(level=logging.WARNING)
    
    logger.info('info log1')
    logger.debug('debug log')
    logger.warning('warning log')
    logger.info('info log2')
    logger.info('info log3')
    logger.critical('critical log')
    
    • 如下按照等级打印出了日志的信息
    2020-02-13 10:04:57,325 - test_log - WARNING - warning log
    2020-02-13 10:04:57,325 - test_log - CRITICAL - critical log
    
    Process finished with exit code 0
    
    
    八. Handler 的使用
    • 重新记录一个日志的文件名为'test_log.log'
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    
    logger = logging.getLogger('test_log')
    logger.setLevel(level=logging.DEBUG)
    handler = logging.FileHandler('test_log.log')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    
    logger.info('info log1')
    logger.debug('debug log')
    logger.warning('warning log')
    logger.info('info log2')
    logger.info('info log3')
    logger.critical('critical log')
    
    • 查看日志文件的结果为
    2020-02-13 10:44:55,888 - test_log - INFO - info log1
    2020-02-13 10:44:55,888 - test_log - DEBUG - debug log
    2020-02-13 10:44:55,889 - test_log - WARNING - warning log
    2020-02-13 10:44:55,889 - test_log - INFO - info log2
    2020-02-13 10:44:55,889 - test_log - INFO - info log3
    2020-02-13 10:44:55,889 - test_log - CRITICAL - critical log
    
    九. 多个handler
    • 一个handler输出到控制台,一个handler输出到日志文件
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging
    import sys
    
    logger = logging.getLogger('test_log')
    logger.setLevel(level=logging.INFO)
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 输出到控制台的handler
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(level=logging.INFO)
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    
    # 输出到文件的handler
    file_handler = logging.FileHandler('test_log.log')
    file_handler.setLevel(level=logging.DEBUG)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    
    
    logger.info('info log1')
    logger.debug('debug log')
    logger.warning('warning log')
    logger.info('info log2')
    logger.info('info log3')
    logger.critical('critical log')
    
    
    • 输出都控制台
    2020-02-13 11:05:49,000 - test_log - INFO - info log1
    2020-02-13 11:05:49,001 - test_log - WARNING - warning log
    2020-02-13 11:05:49,001 - test_log - INFO - info log2
    2020-02-13 11:05:49,001 - test_log - INFO - info log3
    2020-02-13 11:05:49,001 - test_log - CRITICAL - critical log
    
    • 输出到日志
    2020-02-13 11:06:54,721 - test_log - INFO - info log1
    2020-02-13 11:06:54,722 - test_log - WARNING - warning log
    2020-02-13 11:06:54,722 - test_log - INFO - info log2
    2020-02-13 11:06:54,722 - test_log - INFO - info log3
    2020-02-13 11:06:54,722 - test_log - CRITICAL - critical log
    
    待续文件配置,配置共享等......

    欢迎下方【戳一下】【点赞】
    Author:伊洛Yiluo
    愿你享受每一天,Just Enjoy !

    关注公众号获取更多内容

    相关文章

      网友评论

        本文标题:Python基础 logging模块使用(一)

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