zoukankan      html  css  js  c++  java
  • python--logging库学习_第三波

    本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。为什么需要日志输出呢,我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听。这个事件监听,对我们现在来说,还是有点复杂去理解,所以我这里,选择封装一个简单的日志类,同样达到这个效果。
    我们大概需要如下日志输出效果:

    问题分析:
    我们需要封装一个简单的日志类,主要有以下内容:
    1. 生成的日志文件格式是 年月日时分秒.log
    2. 生成的xxx.log文件存储在项目根目录下Logs文件夹下
    3. 这个日志类,支持INFO,ERROR两种日志级别
    4. 日志里,每行日志输出,如上图,时间日期+执行类名称+日志级别+日志描述

    解决问题思路:
    1. 在根目录下新建一个Logs的文件夹,如何获取这个Log的相对路径,前面介绍过。
    2. 日志的保存命名,需要系统时间,前面也介绍过时间格式化输出
    3. Python中有一个logging模块来支持我们自定义封装一个新日志类。
    4. 在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日志信息。

    自定义日志类封装如下:logger.py,新建在test包下

    [python] view plain copy
     
    1. # _*_ coding: utf-8 _*_  
    2. import logging  
    3. import os.path  
    4. import time  
    5.   
    6.   
    7. class Logger(object):  
    8.   
    9.     def __init__(self, logger):  
    10.         """ 
    11.         指定保存日志的文件路径,日志级别,以及调用文件 
    12.             将日志存入到指定的文件中 
    13.         :param logger: 
    14.         """  
    15.         # 创建一个logger  
    16.         self.logger = logging.getLogger(logger)  
    17.         self.logger.setLevel(logging.DEBUG)  
    18.   
    19.         # 创建一个handler,用于写入日志文件  
    20.         rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))  
    21.         log_path = os.path.dirname(os.getcwd()) + '/Logs/'  
    22.         log_name = log_path + rq + '.log'    
    23.         fh = logging.FileHandler(log_name)  
    24.         fh.setLevel(logging.INFO)  
    25.   
    26.         # 再创建一个handler,用于输出到控制台  
    27.         ch = logging.StreamHandler()  
    28.         ch.setLevel(logging.INFO)  
    29.   
    30.         # 定义handler的输出格式  
    31.         formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  
    32.         fh.setFormatter(formatter)  
    33.         ch.setFormatter(formatter)  
    34.   
    35.         # 给logger添加handler  
    36.         self.logger.addHandler(fh)  
    37.         self.logger.addHandler(ch)  
    38.   
    39.     def getlog(self):  
    40.         return self.logger  

    新写一个测试日志类,相关代码如下:

    [python] view plain copy
     
    1. # coding=utf-8  
    2. import time  
    3. from selenium import webdriver  
    4. from test.logger import Logger  
    5.   
    6.   
    7. mylogger = Logger(logger='TestMyLog').getlog()  
    8. class TestMyLog(object):  
    9.   
    10.     def print_log(self):  
    11.         driver = webdriver.Chrome()  
    12.         mylogger.info("打开浏览器")  
    13.         driver.maximize_window()  
    14.         mylogger.info("最大化浏览器窗口。")  
    15.         driver.implicitly_wait(8)  
    16.   
    17.         driver.get("https://www.baidu.com")  
    18.         mylogger.info("打开百度首页。")  
    19.         time.sleep(1)  
    20.         mylogger.info("暂停一秒。")  
    21.         driver.quit()  
    22.         mylogger.info("关闭并退出浏览器。")  
    23.   
    24. testlog = TestMyLog()  
    25. testlog.print_log()  

           在PyCharm里运行下这个测试类,会在根目录下的Logs文件下,新建一个日志文件,打开效果如文章开头的日志输出图。好了,关于自定义封装log类,自己好好去读下代码,理解下每行代码的意思,日志类的封装和调用就介绍到这里。

  • 相关阅读:
    类型转换器(InitBinder 初始化绑定器)
    transient关键字的用法
    Handler
    SpringMVC数据校验
    java中进程与线程的三种实现方式
    初识webservice 服务
    javaMail
    UI测试_错题解析
    ognl
    Struts2数据校验
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/8795550.html
Copyright © 2011-2022 走看看