zoukankan      html  css  js  c++  java
  • python自动化测试(3)--自定义日志类及日志的封装

    一、相关概念

    在自定义日志之前,我们需要了解如下信息:

    1、日志收集器:可以理解为用于收集日志信息的容器;

    2、日志级别(Level):

      常见的日志级别有:DEBUGINFOWARNINGERROR以及CRITICAL

    3、输出渠道(Handle):

      控制台输出:StreamHandle

      将日志信息保存在文件中:FileHandle

    4、日志格式(Format):

      一般包含如下信息:日志时间-日志名称-日志级别名称-文件名称-行号-日志信息等

    【示例】

    1 # 4、设置日志的输出格式
    2 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
    3 formatter = logging.Formatter(fmt)

    【说明】

    在logging模块中,默认的是root日志收集器,默认的输出级别为:WARNING

    二、自定义日志的操作流程

    1、导入logging模块:import logging

    2、创建日志收集器:logger = logging.getLogger("日志收集器的name")

    3、设置日志收集器的日志级别:logger.setLevel(logging.INFO)       #设置收集器的级别为INFO

    4、给日志收集器创建输出渠道(根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出):下面以控制台输出为例进行介绍,文件输出与之类似

      4.1、创建日志的输出渠道:handle1 = logging.StreamHandle()

      4.2、可以单独设置日志输出渠道的级别:handle1.setLevel(logging.ERROR)    此步骤可选

      【说明】

      (1)在未设置日志输出渠道的日志级别时,默认使用日志收集器设置的Level

      (2)若需单独设置日志输出渠道的日志级别,则它的日志级别需高于日志收集器级别,否则设置无效。

    5、设置日志输出的内容格式

    1 # 4、设置日志的输出格式
    2 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
    3 formatter = logging.Formatter(fmt)

    6、将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来

    handler1.setFormatter(formatter)

    7、将设置好的输出渠道,添加到日志收集器中

    logger.addHandler(handler1)

    【补充】将日志信息输出到文件的操作流程与之类似,只是在step4上有一点区别而已

    handler2 = logging.FileHandler(filename="xxx.log",encoding="utf-8")

    三、代码实现

     1 import logging
     2 
     3 # 1、创建日志收集器
     4 logger = logging.getLogger(name="login_test")
     5 
     6 # 2、设置日志收集器的级别:警告级别
     7 logger.setLevel(logging.WARN)
     8 
     9 # 3、设置日志的输出渠道
    10 # 3.1 控制台日志输出
    11 handler1 = logging.StreamHandler()
    12 # 3.2 文件日志输出
    13 handler2 = logging.FileHandler(filename="my_log.log",encoding="utf-8")
    14 # 单独设置输出渠道的日志级别
    15 handler1.setLevel(logging.ERROR)    # 可选
    16 
    17 # 4、设置日志的输出格式
    18 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
    19 formatter = logging.Formatter(fmt)
    20 
    21 # 5、关联3和4
    22 handler1.setFormatter(formatter)
    23 handler2.setFormatter(formatter)
    24 
    25 # 6、关联1和5
    26 logger.addHandler(handler1)
    27 logger.addHandler(handler2)
    28 
    29 # 测试
    30 logger.warning("登录失败警告")
    31 logger.error("登录debug出错")

     四、自定义日志的封装

    由于自定义日志的操作流程相对比较固定,因此我们可以将自定义的日志封装成一个类。当我们需要使用时,只需引入该模块即可。

    1、通过查看源码知,封装的类需要继承logging.Logger类,这样就可以继承父类的debug()、info()等函数;

    2、从第二部分的操作流程知,不同的用户在引入该模块时,可能会设置不同日志名称日志级别以及日志文件信息,因此这些参数可以让用户在实例化日志对象对象时进行初始化设置;

    3、当我们需要使用自定义的日志类时,引入这一模块即可。

     1 import logging
     2 
     3 # 对日志的操作进行封装
     4 class MyLogger(logging.Logger):
     5 
     6     def __init__(self,name,level,file=None):
     7         super().__init__(name,level)
     8         # 设置日志的输出渠道
     9         handler1 = logging.StreamHandler()
    10         # 设置日志的输出格式
    11         fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
    12         formatter = logging.Formatter(fmt)
    13         handler1.setFormatter(formatter)
    14         # 添加日志的输出渠道
    15         self.addHandler(handler1)
    16 
    17         if file:
    18             handler2 = logging.FileHandler(filename=file,encoding="utf-8")
    19             handler2.setFormatter(formatter)
    20             self.addHandler(handler2)
    21             pass
    22         pass
    23     pass
  • 相关阅读:
    vika维格表的新 CP ,飞书集成入口上线
    OKR落地四部曲:vika维格表帮你快速养成OKR思维
    ASP.NET, IIS, and Visual Web Developer 技巧与窍门
    VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中
    VS2008 Tips #007 如何用 ListView 控件将数据排序
    VS2008 Tips #005 – 如何绑定 ListView 控件
    VS2008 Tip #001 创建、管理和运用样式的强大 CSS 工具
    VS2008 Tips #006 关于“标记导航”的特性
    VS2008 Tips #003 – VS 2008 的拆分视图可以设置为垂直分割
    VS2008 Tips #004 – 您可以通过“浏览方式…”添加浏览器到 Visual Web Developer
  • 原文地址:https://www.cnblogs.com/yif930916/p/14700963.html
Copyright © 2011-2022 走看看