python+selenium之自定义封装一个简单的Log类

一、 问题分析:

我们需要封装一个简单的日志类,主要有以下内容:

1. 生成的日志文件格式是 年月日时分秒.log

2. 生成的xxx.log文件存储在项目Logs文件夹下

3. 这个日志类,支持INFO,ERROR两种日志级别

4. 日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述

二、解决问题思路:

1. 在根目录下新建一个Logs的文件夹,如何获取这个Log的相对路径。

2. 日志的保存命名,需要系统时间,前面也介绍过时间格式化输出

3. Python中有一个logging模块来支持我们自定义封装一个新日志类。

4. 在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日志信息。

三、logger.py文件代码如下所示

#coding:utf-8

import os

import logging

import time

class Logger(object):

def __init__(self,logger):

#创建一个logger

self.logger=logging.getLogger(logger)#进行初始化

self.logger.setLevel(logging.DEBUG)#日志等级为debug

#创建一个handler,用于写入日志文件

tm=time.strftime('%Y%m%d%H%M',time.localtime())  #格式化时间,按照 201712211152 打印

log_path=os.path.dirname(os.path.abspath('.'))+'/pro1/Logs/'

log_name = log_path + tm + '.log'

fh=logging.FileHandler(log_name)

fh.setLevel(logging.INFO)

#再创建一个handler,用于输出到控制台

ch=logging.StreamHandler()

ch.setLevel(logging.INFO)

#定义handler的输出格式

formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setFormatter(formatter)

ch.setFormatter(formatter)

#给logger添加handler

self.logger.addHandler(fh)

self.logger.addHandler(ch)

def getLog(self):

return self.logger

四、logging模块的API

1. logging.getLogger([name])

返回一个logger实例,如果没有指定name,返回root logger。

只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是

一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到

同一个logger实例

2. Logger.setLevel(lvl)

设置logger的level, level有以下几个级别:

NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出

3. Logger.addHandler(hdlr)

logger可以雇佣handler来帮它处理日志, handler主要有以下几种:

StreamHandler: 输出到控制台

FileHandler:   输出到文件

handler还可以设置自己的level以及输出格式。

五、测试代码

1.测试脚本如下所示,文件名为test_log.py

#coding:utf-8

from pro1.logger import Logger

from selenium import webdriver

import time

mylogger=Logger(logger='TestLog').getLog()

class TestLog(object):

def printLog(self):

driver=webdriver.Firefox()

mylogger.info("打开浏览器")

driver.maximize_window()

mylogger.info("窗口最大化")

driver.implicitly_wait(8)

driver.get("https://www.baidu.com/")

mylogger.info("打开百度首页")

time.sleep(2)

mylogger.info("暂停2秒")

driver.quit()

mylogger.info("关闭并退出浏览器")

test=TestLog()

test.printLog()

详情参考:http://blog.csdn.net/u011541946/article/details/70198676

python+selenium之自定义封装一个简单的Log类的更多相关文章

  1. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  2. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

  3. VC++ 一个简单的Log类

    在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...

  4. Directx11学习笔记【四】 封装一个简单的Dx11DemoBase

    根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBas ...

  5. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  6. 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件

    先拉开MSDN的文档,大致读一遍 (https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets) WebSocket 是一 ...

  7. 代码改变世界 | 如何封装一个简单的 Koa

    下面给大家带来:封装一个简单的 Koa Koa 是基于 Node.js 平台的下一代 web 开发框架 Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装 ...

  8. C++定义一个简单的Computer类

    /*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...

  9. C 封装一个简单二叉树基库

    引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷 ...

随机推荐

  1. Maven构建项目时index.jsp文件报错

    错误为:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 原 ...

  2. 基于UML的面向对象分析与设计

          前言      经常听到有朋友抱怨,说学了UML不知该怎么用,或者画了UML却觉得没什么作用.其实,就UML本身来说,它只是一种交流工具,它作为一种标准化交流符号,在OOA&D过程 ...

  3. 【转帖】云平台发现服务构建:为什么不使用ZooKeeper

    http://www.chinacloud.cn/show.aspx?id=19979&cid=16 [日期:2015-04-29] 来源:dockerone   作者: [字体:大 中 小] ...

  4. [Asp.Net]最近一个项目的总结

    引言 项目到目前告一段落,目前进入测试阶段,下周就要去部署了.虽然项目不大,但是从头到尾都是自己一个人负责,在完成编码之后,对代码进行走查,命名规范,业务逻辑,代码优化等,能负责一个项目的整个编码,非 ...

  5. spring in action 9.1 spring security

    spring security是基于spring AOP 和 Servlet 规范中的Filter 实现的安全框架. Spring Security 是为基于 Spring 的应用程序提供声明式安全保 ...

  6. vsftpd被动模式配置

    1.vsftp配置   参考文章http://linux008.blog.51cto.com/2837805/6105992.设置vsftpd.conf开启被动模式参数    #vim    pasv ...

  7. linux 使用FIO测试磁盘iops 方法详解

    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎, 包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...

  8. 从零开始学习OpenCL开发(一)架构

    1 异构计算.GPGPU与OpenCL OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算(heterogeneous)的标准,它是跨平台的.旨在充分利用GPU ...

  9. Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾

    1.全选并复制到系统剪贴板 ggVG或ggvG 然后 "+y gg 让光标移到首行,在vim才有效,vi中无效 V 是进入Visual(可视)模式 G 光标移到最后一行 "+y 复 ...

  10. xadmin 问题总结

    pip install django-import-export