Python脚本日志系统

 

  Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能。

  假设要开发一个自动化脚本工具,工程结构如下,Common这个package是框架功能的实现,Scripts目录是我们编写的测试用例脚本(请忽略其他不相关的目录)。

  我们对日志功能的需求如下:

  1 为了便于日志的查看,每个脚本对应一个日志文件,日志文件以脚本的名字命名

  2 日志路径以及每个脚本保存的日志容量可以设置,比如设置为5MB,则超过后最老日志被自动覆盖

  3 日志功能要使用方便,减少与框架业务功能的耦合

  aaarticlea/png;base64,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" alt="" />

  现在来逐一分析上述需求。

  1 要实现每个脚本一个日志文件,则需要在日志模块中,根据用例脚本的名字来生成日志文件,这里的关键问题就是怎样在日志模块中获取用例脚本的名字。

  获取文件名的常用方法有:os.getcwd(), sys.argv[0], __file__,来看下各种的作用:

  先在一个文件(假设为test.py)中编写如下代码:

  aaarticlea/png;base64,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" alt="" />

  然后在另一个文件中(假设为script1.py)中import test,然后调用func方法:

  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKQAAABDCAIAAACdljksAAAChklEQVR4nO2cy3GsMBBFOyyF4ESsNDwRaOkoZvkUgDOY1SxGGczqZdBvwUc/GAMWfhT3nppygZDAVYfuhgUtfytut5uSMyKUjQNlA0HZQFA2EJQNBGUDQdlAUDYQlA0EZQNB2UAsl3238iFy9b/9H5JmHDCyF95V3opdf+dtW3USjic7fJklsoMzG7RtW3UWFsruou2SOBhH+p/1E4PGPfvpvcKLyKcLyUzzabIzp2d44dtb6UjMBWdERIwL5aRhbGoVEptr9t3Kh9hr8veeTevsmq+gqvp0ph7svcYbYvpCcxQJOTjTKfU2qq2lMo3vITub/3pw5kLhGcpDKYW2GMZJ4HaDMdYp+9ci+2JdHdnzsv31u0xuvap671VVgzOFRe96yangYhUWa2t2XlxnZaeFXFXna/ZkbR4mVxm+wNs0jPuaPUbyuF/U6HwVEs2fxu82xi45Fm1lL3yWJv+H471nk92gbCAoGwjKBoKygaBsICgbCMoGgrKBoGwgKBsIygaCsoGgbCAoGwjKBoKygaBsICgbCMoGgrKBoGwgKBsIygaCsoGgbCAoG4hTyg7u3T00uHfH7wtTjiE7fknf4FPasfVC7MZAVHWN7P26E3kr7ZxE1arUnbNY9o7diRq2vqjk0nbCQtn7dSfKeqH86XetHzbGEWsnr153VSibbSA3USnYnMYbdieqW+F0u+lG3wllGBkzRtFKhbJfsVl2w+5ES2TPbRQwjb9ivez23YlmZMd6XzuOx4L3IT8ZH9DmWPXq9fPuRJNptswQw8OAMSIib2/x6FjR47rKZXoX5ubhOcZ7dmO8Ne4xkXvQOaVsMg1lA0HZQFA2EJQNBGUDQdlAUDYQ/wBIi+mWU1amkQAAAABJRU5ErkJggg==" alt="" />

  运行script1.py,结果为:

  aaarticlea/png;base64,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" alt="" />

  可见,os.getcwd()获取的是执行脚本的目录, sys.argv[0]是执行脚本的绝对路径名, __file__是被执行代码所在文件的绝对路径名。

  现在就清楚了,我们应该用sys.argv[0]来获取执行脚本的名字,由于获取到的是绝对路径,需要做一点处理:sys.argv[0].split('/')[-1].split('.')[0]

  2 日志容量问题,要实现超过容量后自动覆盖最老日志,采用logging中的RotatingFileHandler类即可,可以设置日志文件的大小,以及备份个数。

  那么日志路径和容量配置放在哪里呢?让用户直接修改RotatingFileHandler的参数显然不好,最好不要让用户修改框架文件,用户只需调用接口写自己的脚本即可。

  这里采用的方案是将配置信息写入一个文件,XML文件比较适合用来作为配置文件,用户通过修改XML文件来制定配置,日志模块从XML文件读取参数。

  这里为了方便将XML文件放入Common下面,命名为config.xml,内容为:

<?xml version="1.0" encoding="utf-8"?>

<config>
<!-- 日志保存路径 -->
<logpath>E:\PythonLog</logpath> <!-- 每个脚本对应的日志文件大小,单位MB -->
<logsize>8</logsize> <!-- 每个脚本保存的日志文件个数 -->
<lognum>3</lognum>
</config>

  读取XML文件内容,使用lxml库非常简单,后面再给出代码。

  

  3 日志功能要使用方便,减少与框架业务功能的耦合,最好就是对日志功能进行封装,只提供记录日志的接口即可。

  日志接口采用类方法的形式就可以满足上述要求,用户只需要通过类调用日志记录接口,随处调用,使用方便,并且无需定义类实例,与框架业务没有耦合。

    

  有了上述分析,我们来实现日志模块。

  由于日志功能也是框架基础的一部分,我们将日志模块也放在Common这个package中,在Common下新建log.py文件,代码如下:

 1 # coding: utf-8
2
3 from lxml import etree 或者from lxml import html
4 import logging.handlers
5 import logging
6 import os
7 import sys
8
9 # 提供日志功能
10 class logger:
11 # 先读取XML文件中的配置数据
12 # 由于config.xml放置在与当前文件相同的目录下,因此通过 __file__ 来获取XML文件的目录,然后再拼接成绝对路径
13 # 这里利用了lxml库来解析XML
14 root = etree.parse(os.path.join(os.path.dirname(__file__), 'config.xml')).getroot()
15 # 读取日志文件保存路径
16 logpath = root.find('logpath').text
17 # 读取日志文件容量,转换为字节
18 logsize = 1024*1024*int(root.find('logsize').text)
19 # 读取日志文件保存个数
20 lognum = int(root.find('lognum').text)
21
22 # 日志文件名:由用例脚本的名称,结合日志保存路径,得到日志文件的绝对路径
23 logname = os.path.join(logpath, sys.argv[0].split('/')[-1].split('.')[0])
24
25 # 初始化logger
26 log = logging.getLogger()
27 # 日志格式,可以根据需要设置
28 fmt = logging.Formatter('[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
29
30 # 日志输出到文件,这里用到了上面获取的日志名称,大小,保存个数
31 handle1 = logging.handlers.RotatingFileHandler(logname, maxBytes=logsize, backupCount=lognum)
32 handle1.setFormatter(fmt)
33 # 同时输出到屏幕,便于实施观察
34 handle2 = logging.StreamHandler(stream=sys.stdout)
35 handle2.setFormatter(fmt)
36 log.addHandler(handle1)
37 log.addHandler(handle2)
38
39 # 设置日志基本,这里设置为INFO,表示只有INFO级别及以上的会打印
40 log.setLevel(logging.INFO)
41
42 # 日志接口,用户只需调用这里的接口即可,这里只定位了INFO, WARNING, ERROR三个级别的日志,可根据需要定义更多接口
43 @classmethod
44 def info(cls, msg):
45 cls.log.info(msg)
46 return
47
48 @classmethod
49 def warning(cls, msg):
50 cls.log.warning(msg)
51 return
52
53 @classmethod
54 def error(cls, msg):
55 cls.log.error(msg)
56 return

  来测试一下,在脚本script1和script2中分别编写下面代码:

from Common.log import *

logger.info('This is info')
logger.warning('This is warning')
logger.error('This is error')

  分别运行两个脚本,控制台输出为:

  aaarticlea/png;base64,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" alt="" />

  产生的日志文件:

  aaarticlea/png;base64,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" alt="" />

  文件内容:

  aaarticlea/png;base64,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" alt="" />

  好了,现在不管是在框架的其他文件中,或是在用户脚本中,都可以方便的通过logger类的日志接口记录日志。

原文链接:http://www.cnblogs.com/haigege/p/5768485.html

使用python实现日志功能的更多相关文章

  1. Python的日志功能

    python自带的logging是日志处理模块,可以记录日志,并输出到控制台和文件等.日志分5个级别:DEBUG:调试信息,权重10INFO:一般信息,权重20WARNING:警告信息,权重30ERR ...

  2. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

  3. 【Python】自己写日志功能

    Python有自带的logging模块,用于日志记录,功能很强大,但不好用,使用挺麻烦的,而且发现了几个bug,调用了一个logger.warning()一次,结果日志文件中出现了n行记录,且逐渐变成 ...

  4. Python日志功能与处理逻辑

    前言 在应用程序执行过程中,我们希望通过规范格式输出程序执行的详细信息,这时我们需要用到日志功能.在Python语言中,有个內建模块logging能够很好的实现日志功能.整体来说,logging配置可 ...

  5. python接口测试之日志功能

    之前在简书中看了一篇关于日志功能的文档,供大家参考:https://www.jianshu.com/p/62f7b49b41e7 Python通过logging模块提供日志功能,所以直接导入即可 im ...

  6. Python之日志处理(logging模块)

    本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日 ...

  7. Python脚本日志系统

    Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化脚本工具,工程结构如下,Com ...

  8. 【转】Python之日志处理(logging模块)

    [转]Python之日志处理(logging模块) 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging ...

  9. Python 配置日志的几种方式

    Python配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: (1)使用Python代码显式的创建loggers,handlers和formatters并分别调用它们的配 ...

随机推荐

  1. [Bayes] Hist & line: Reject Sampling and Importance Sampling

    吻合度蛮高,但不光滑. > L= > K=/ > x=runif(L) > *x*(-x)^/K)) > hist(x[ind],probability=T, + xla ...

  2. [Tensorflow] Cookbook - Retraining Existing CNNs models - Inception Model

    From: https://github.com/jcjohnson/cnn-benchmarks#alexnet 先大概了解模型,再看如果加载pre-training weight. 关于retai ...

  3. [TensorBoard] Name & Variable scope

    TF有两个scope, 一个是name_scope一个是variable_scope 第一个程序: with tf.name_scope("hello") as name_scop ...

  4. Qt编写调试日志输出类带网络转发(开源)

    用qt开发商业程序已经九年了,陆陆续续开发过至少几十个程序,除了一些算不算项目的小工具外,大部分的程序都需要有个日志的输出功能,希望可以将程序的运行状态存储到文本文件或者数据库或者做其他处理等,qt对 ...

  5. 7.9CSS总结

    2018-7-9 18:01:18 1.类选择器是 用  .      .xxx{}  (ps,公司常用的是类选择  ) 2.id选择器是用  #   #xx{}  (id选择器并不常用) 3.css ...

  6. 函数调用的方法一共有 4 种,call,apply,bind

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  7. bootstrape学习

    bootstrape学习 已分享到有道上:http://note.youdao.com/share/?id=076fb6314c99c742a79f6fb66b2a58b0&type=note ...

  8. Ubuntu 18.04 安装中文输入法ibus

    在安装ubuntu时,如果选择英文安装默认会不启用中文输入法的.可以通过下述方法开启 安装 pingyin 输入法 sudo apt-get install ibus-pinyin 然后在 setti ...

  9. Xcode报错Expected selector for Objective-C and Expected method body

    昨天把键盘拿起来拍一下清清灰,然后就发现Xcode报错了,Xcode报错Expected selector for Objective-C and Expected method body,也不知道什 ...

  10. ms sql server 游标

    很简单的一个小例子. /****** Object: StoredProcedure [dbo].[usp_test] Script Date: 10/28/2016 15:08:31 ******/ ...