本文介绍如何写一个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. 使用Unity创建塔防游戏(Part3)—— 项目总结

    之前我们完成了使用Unity创建塔防游戏这个小项目,在这篇文章里,我们对项目中学习到的知识进行一次总结. Part1的地址:http://www.cnblogs.com/lcxBlog/p/60759 ...

  2. 12.18 aop身份验证

    对所有卖家页面进行身份验证,采用aop编程 步骤:1.获得request 2.查询cookie 3.查询redis 4.查询不通过时,采用抛出异常,捕捉异常,再异常里加入跳转到登陆页面的方法 准备工作 ...

  3. SpringInAction--自动化装配(显示装配之 java注解配置)

    Spring在配置时候有三种方案可选 1.在xml中进行显示配置 2.在java中进行显示配置 3.隐式的Bean发现机制和自动装配 今天学习的 第二种—— 在java中进行显示配置 场景: 尽管在很 ...

  4. MySQL单独存放表空间Innodb_file_per_table

    在mysql中Innodb_file_per_table参数的作用是什么呢,其实许多的朋友是不知道的,今天我们来看这篇MySQL单独存放表空间Innodb_file_per_table参数详解之后你就 ...

  5. 使用ElasticSearch完成百万级数据查询附近的人功能

    上一篇文章介绍了ElasticSearch使用Repository和ElasticSearchTemplate完成构建复杂查询条件,简单介绍了ElasticSearch使用地理位置的功能. 这一篇我们 ...

  6. 机器人操作系统(ROS)在线实训平台学习实验指南

    机器人操作系统(ROS)在线学习指南       在高校开设ROS相关课程已经积累了一年多的经验,由于自动化类专业在课程安排中不同于计算机相关专业,通常没有Linux相关的课程基础,直接上手ROS较为 ...

  7. UICollectionView 数据库元素分组 多种section分开显示

    第一遍 复杂方法 : 数据库查询一个表中userID 然后进行分类 中间去重 获得ID个数  放到section 中  显示 #pragma mark -  查询不同的ID 各数  - (void)c ...

  8. OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(下)

    1 UI5代码结构 上一次我们一起用了20秒的时间完成一个UI5版的Hello World.应用打开后有一个按钮,按钮的文字是Hello World,点击这个按钮之后,按钮会慢慢的消失掉(Fade o ...

  9. Underscore template

    /********************************************************************* * Underscore template * 说明: * ...

  10. javascript的slice()与splice()方法

    (1)数组和String对象都有slice()方法. //Array var list = ['A','B','C','D','DS']; console.log(list.slice(,));//截 ...