享受每一天,Just Enjoy !

0%

Python基础 logging模块使用(一)

一. 日志的作用
  • 日志是对软件执行时所发生事件的一种追踪方式,无论是开发人员还是测试人员,日志的重要的作用应该是不言而喻的;不但可以帮助开发定位缺陷解决问题,也可以辅助在测试过程中的测试工程师定位缺陷。
    作为测试人员更应该重视日志,无论是单元测试去捕获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:格式化器, 指明了最终输出中日志记录的布局
    四. 简单的例子
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 伊洛Yiluo
    # https://yiluotalk.com
    import logging

    logging.debug('调试信息')
    logging.info('信息消息')
    logging.warning('错误:config file %s not found', 'server.conf')
    logging.error('发生错误')
    logging.critical('关键错误')
  • 看以下输出结果
    1
    2
    3
    4
    5
    WARNING:root:错误:config file server.conf not found
    ERROR:root:发生错误
    CRITICAL:root:关键错误

    Process finished with exit code 0
    五. basicConfig() 使用方法
  • basicConfig()主要做一些基础的配置
  • 我们将日志的结果输出到一个名为"test.log"的文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 伊洛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"文件
    1
    2
    3
    4
    5
    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__
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 伊洛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')
  • 查看文件的日志结果
    1
    2
    3
    4
    5
    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,打印出包括这个等级及这个等级之上级别的日志
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 伊洛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')
  • 如下按照等级打印出了日志的信息
    1
    2
    3
    4
    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'
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 伊洛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')
  • 查看日志文件的结果为
    1
    2
    3
    4
    5
    6
    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输出到日志文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 伊洛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')
  • 输出都控制台
    1
    2
    3
    4
    5
    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
  • 输出到日志
    1
    2
    3
    4
    5
    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 !

关注公众号获取更多内容