• logging日志的使用


    背景

            说到日志,无论是开发写代码还是写UI自动化测试,都离不开日志的记录,它能给我们在定位问题、缺陷时带来很大的方便。通常测试人员使用最多的方法就是用print来打印出日志和报错信息,但是对于一些项目比较大的项目,使用print就不是那么方便了。因为print打印出来的日志没有时间,不知道日志记录的位置,针对这种情况,我们可以使用python自带的logging模块,可以很好地解决上面问题。

    环境准备

    编译工具:pycharm
    编程语言:python

    日志级别

            在python提供的log模块,一共把日志级别分为5级,分别为:

    1、Debug级是最详细的日志信息,典型的应用场场景是问题诊断。

    2、INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作。

    3、WARNING  当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

    4、ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息

    5、CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

    1. '''log的使用'''
    2. import logging
    3. logging.basicConfig(level=logging.INFO)  #设置logging的日志级别
    4. logging.info('infor级调试信息')
    5. logging.debug('debug级调试信息')
    6. logging.warning('warning级调试信息')
    7. logging.error('error级调试信息')
    8. logging.critical('critical级调试信息')

            其中log日志级别程度逐次增高,默认情况下日志的级别是WARNING,低于WARNING级别的日志都不会被输出。

    log日志级别设置

            上面说过log日志默认输出WARNING级别的,但是我想要输出INFO级的话就需要设置日志级别输出,在开始记录日志前可以使用logging.basicConfig方法来设定日志级别。

    1. logging.basicConfig(level=logging.INFO) #设置logging的日志级别为INFO
    2. logging.info('输出info级调试信息')
    3. logging.debug('输出debug级调试信息')
    4. logging.warning('输出warning级调试信息')
    5. logging.error('输出error级调试信息')

            通过设置logging日志级别为INFO后,输出结果如下:

    Logging.basicConfig函数说明

            如果我们想要指定log日志输出的格式、保存路径的话,可以用logging.basicConfig函数来实现,其主要参数使用如下:
    1、filename:指定日志说出目标文件的文件名,指定该设置项后日志信息就不会被输出到控制台了。
    2、filemode:指定日志文件的打开模式,默认为‘a',需要注意的是,该选项要在filename指定时才有效
    3、format:指定日志格式字符串,既指定日志输出时所包含的字段信息以及他们的顺序,logging模块定义的格式字段下面会列出
    4、datefmt:指定日期/时间格式,需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
    5、level:指定日志器的日志级别
    6、stream:指定日志输出目标stream,如sys.stdout,sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发ValueError异常
    7、style:Python3.2中新添加的配置项,指定format格式字符串的风格,可取值为“%,{,$”,,默认是'%'。
    8、handlers:Python3.3中新添加的配置项,该选项如果被指定,它应该是一个创建了多个handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename,stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

     

    1. mport logging
    2. my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d' #log日志格式设置,打印当前时间,当前执行的程序名称,当前行号、模块。
    3. logging.basicConfig(
    4. filename = 'my.log', #日志文件名称
    5. level = logging.INFO, #设置日志级别为INFO级
    6. format=my_format
    7. )
    8. logging.info('infor')
    9. logging.debug('debug')
    10. logging.warning('warning')
    11. logging.error('error')
    12. logging.critical('critical')

    运行代码后打开my,log可以看到记录的log信息。

    Logging模块的格式化字符串

            对个这个格式,我们可以一起使用,每个格式之间需要使用”-”进行连接,如:
    my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d'

    使用格式

    描述信息

    字段/属性名称

    %(asctime)s

    打印日志的时间

    asctime

    %(filename)s

    打印当前执行程序名称

    fimename

    %(levelname)s

    打印日志级别名称

    levelname

    %(message)s

    打印日志信息

    message

    %(levelno)s

    打印日志级别的数值

    levelno

    %(pathname)s

    打印当前执行程序的路径

    pathname

    %(funcName)s

    打印日志的当前函数

    funcName

    %(lineno)d

    打印日志的当前行号

    lineno

    %(thread)d

    打印线程id

    thread

    %(threadName)s

    打印线程名称

    threadName

    Log处理器

            什么是log处理器,我的理解就是把记录生成的log日志进行处理的过程,它就像一个搬运工一样,不生产、制造产品,只负责把物品搬运到指定的位置。Python自己内置了很多的处理器,常见的有:
    1、StreamHandler标准流处理器,将消息发送到标准输出流、错误流
    2、FileHandler文件处理器,将消息发送到文件
    3、RotatingFileHandler文件处理器,文件达到指定大小后,启用新文件存储日志。
    4、TimedRotatingFileHandler文件处理器,日志以特定的时间间隔轮换日志文件。

    1. 例如:
    2. import logging
    3. from logging import StreamHandler
    4. from logging import FileHandler
    5. logger = logging.getLogger(__name__)
    6. # 设置为DEBUG级别
    7. logger.setLevel(logging.DEBUG)
    8. # 标准流处理器,设置的级别为WARAING
    9. stream_handler = StreamHandler()
    10. stream_handler.setLevel(logging.WARNING)
    11. logger.addHandler(stream_handler)
    12. # 文件处理器,设置的级别为INFO
    13. file_handler = FileHandler(filename="test.log")
    14. file_handler.setLevel(logging.INFO)
    15. logger.addHandler(file_handler)
    16. logger.debug("this is debug")
    17. logger.info("this is info")
    18. logger.error("this is error")
    19. logger.warning("this is warning")

     总结

            以上就是logging日志的基本使用方法,相信掌握以上方法可以帮助我们更好地理解日志的输出、打印和选择,在今后的UI自动化中不局限于仅仅使用print打印,还可以用logging模块来系统地记录报错信息,定位问题更加方便!

  • 相关阅读:
    Go---字典(map)
    C# 在PDF中添加墨迹注释Ink Annotation
    《缓冲区的理解》
    Hibernate 和 Spring Data JPA中的 N+1 问题
    JUC源码学习笔记6——ReentrantReadWriteLock
    【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
    婴儿推车外贸出口ASTM F833 - 19安全标准规范
    计算机系统概论、进制转换部分习题
    Java学习 --- 成员方法
    网工知识角|在LSA中Seq序列号起什么作用
  • 原文地址:https://blog.csdn.net/sl01224318/article/details/125474332