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. 利用pandas进行数据分析之二:DataFrame与Series数据结构对比

    Series与DataFrame对比学习 文章为本人原创,未经同意请勿转载,http://www.cnblogs.com/smallcrystal/ Series:构建的方法,一组数组(列表或元组), ...

  2. 搜狐畅游CEO王滔辞职

    凤凰科技讯 11月3日消息,搜狐公布公告确认搜狐畅游CEO离职.公告称王滔因个人原因辞去畅游首席运行官职务.将继续担任畅游公司董事和首席产品官. 据搜狐公告,董事会任命搜狐总裁余楚媛与畅游总裁陈德文为 ...

  3. 解决C# WINFORM程序只允许运行一个实例的几种方法详解

    要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: u ...

  4. IntelliJ IDEA 学习(一):IntelliJ IDEA15 破解方法(已验证)

    新的破解方法: 1.进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用记事本编辑 2.如果没有找到hosts文件,可在查看设置中勾选“显示隐藏的项目 ...

  5. 简单认识DataSet与DataTable

    DataSet 是放在内存中的,对DataSet中数据的修改并不直接反应到数据库,要通过 DataAdapter 的 Update 方法更新回数据库; DataSet相当你用的数据库: DataTab ...

  6. 如何用nodejs 开发一个命令行交互工具

    参考地址1 参考地址2 一.npm package.json bin 1.package.json { "name": "test", "versio ...

  7. dbcp数据库连接池管理

    该包主要是管理数据库的链接,获取链接.释放连接.设置最大连接数.初始化连接数.回收的空闲时间 在连接数据库时创建一个连接池可以很方便的管理所有数据库链接,和高效的使用数据库连接. 主要的两个对象是Ba ...

  8. 18. Subsets II【medium】

    Given a list of numbers that may has duplicate numbers, return all possible subsets Notice Each elem ...

  9. 02、Unicode 汉字转码小工具

    在做 Windows app 的时候,与服务器端交互使用的是 json 格式的数据,里面的汉字内容被 编码成 unicode 格式,在调试的时候不太方便,就写了个工具,把里面的 unicode 内容转 ...

  10. [转]__cdecl与__stdcall

    来自Programming Windows 5th Edition The WinMain function is given a type of WINAPI (as is every Window ...