本文介绍如何写一个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. Last_SQL_Errno: 1062

    Last_SQL_Errno: 1062: Last_Error: Error 'Duplicate entry '212' for key 'PRIMARY'' on query. Default ...

  2. Windows消息队列(优先队列,结构体中放比较函数)

    Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...

  3. PCA--主成份分析

    主成份分析(Principle Component Analysis)主要用来对数据进行降维.对于高维数据,处理起来比较麻烦,而且高维数据可能含有相关的维度,数据存在冗余,PCA通过把高维数据向低维映 ...

  4. Win10启动盘制作工具

    Rufus https://rufus.akeo.ie/ http://www.iplaysoft.com/windows-10-udisk-install.html

  5. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  6. (转)MapReduce Design Patterns(chapter 6 (part 2))(十二)

    Chain Folding 这是对job 链的一种优化.基本上是一种大体规则:每条记录都会提交给多个mapper,或者给reducer然后给mapper.这种综合处理方法会节省很多读文件和传输数据的时 ...

  7. 随想录(kgdb的基本原理)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在linux kernel调试的时候,有一种很方便的调试方法,那就是kgdb.kgdb的本质,就 ...

  8. Python matplotlib 数据分布

    利用plt.hist() import matplotlib.pylab as plt %matplotlib inline plt.figure(figsize=(21, 12)) plt.hist ...

  9. iOS 网络编程(HTTP协议)

    HTTP协议的概念HTTP协议,Hyper Text Transfer Protocol (超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应 ...

  10. 打开U盘时出现“使用驱动器 X:中的光盘之前需要将其格式化。”字样

    今天打开U盘时出现如下情况,吓死宝宝了,格式化!!!里面还有好多数据嘞,幸好最终找到方法解决了这个问题. 解决方法: 1.下载DiskGenius软件 2.工具->搜索已丢失分区(重建分区):不 ...