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

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

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

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

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

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

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

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

python--logging库学习_第三波的更多相关文章

  1. python--logging库学习_第一波

    简单使用 #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') lo ...

  2. python requests库学习笔记(上)

    尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...

  3. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  4. python标准库学习-SimpleHTTPServer

    这是一个专题 记录学习python标准库的笔记及心得 简单http服务 SimpleHTTPServer 使用 python -m SimpleHTTPServer 默认启动8000端口 源码: &q ...

  5. 【踩坑记录】记录一次使用Python logging库多进程打印日志的填坑过程

    背景: 项目使用Python自带的logging库来打印日志 项目部署在一台Centos7的机器上 项目采用gunicorn多进程部署 过程: 1.LOG日志代码封装: 采用logging库,并设置w ...

  6. python requests库学习

    Python 第三方 http 库-Requests 学习 安装 Requests 1.通过pip安装 $ pip install requests 2.或者,下载代码后安装: $ git clone ...

  7. Python turtle库学习笔记

    1.简介 Python的turtle库的易操作,对初学者十分友好.对于初学者来说,刚学编程没多久可以写出许多有趣的可视化东西,这是对学习编程极大的鼓舞,可以树立对编程学习的信心.当然turtle本身也 ...

  8. python--logging库学习_第二波

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所 ...

  9. python requests库学习笔记(下)

    1.请求异常处理 请求异常类型: 请求超时处理(timeout): 实现代码: import requestsfrom requests import exceptions        #引入exc ...

随机推荐

  1. Linux 内核驱动自动创建设备节点并挂载设备

    *注:本文来自http://blog.csdn.net/lwj103862095/article/details/17470573 一.首先需要在最开始定义两个数据结构: static struct ...

  2. New Concept English three(12)

    25W/m 76% Most of us have formed an unrealistic picture of life on a desert island. We sometimes ima ...

  3. EasyNVR网页/微信播放RTSP摄像机HLS/RTMP播放时出现起播等待问题的优化过程

    EasyNVR 项目中, 我们需要在网页/微信中嵌入 HLS 播放器, 实现直播效果. 开发过程中, 我们调研了很多HLS播放器, 包括 百度cyberplayer, ckplayer, flowpl ...

  4. JMter压力测试

    一. 压力测试场景设置 一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接 ...

  5. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  6. .net core web 中使用app.UseRouter的几种使用方式

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory ...

  7. 单独编译某个pas文件

    默认的询问.提示.警告框都是英文,找到Vcl.consts.pas改了下,重新编译,放到安装目录下,替换原有的即可. 1. 使用dcc32.exe编译指定的pas文件,dcc32.exe所在目录见下图 ...

  8. web端高德地图javascript API的调用

    [转载https://www.cnblogs.com/zimuzimu/p/6202244.html]web端高德地图javascript API的调用 关于第三放地图的使用,腾讯.百度.高德 具体怎 ...

  9. Hexo+GitHub+Netlify一站式搭建属于自己的博客网站

    喜欢的话请关注我的个人博客我在马路边https://hhongwen.cn/,此文为博主原创,转载请标明出处. 更好的阅读体验请点击查看:Hexo+GitHub+Netlify一站式搭建属于自己的博客 ...

  10. UICollectionView官方使用示例代码研究

    注:这里是iOS6新特征汇总贴链接 iOS6新特征:参考资料和示例汇总 这个链接可以学习到UICollectionView的相关介绍:iOS6新特征:UICollectionView介绍 由于UICo ...