• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用Python脚本日志功能

python 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?><config>  <!-- 日志保存路径 -->  <logpath>E:\PythonLog</logpath>  <!--<mark style="color:transparent">本文来源gaodaimacom搞#^代%!码网@</mark> 每个脚本对应的日志文件大小,单位MB -->  <logsize>8</logsize>  <!-- 每个脚本保存的日志文件个数 -->  <lognum>3</lognum></config>

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

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

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

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

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

# coding: utf-8from lxml import etreeimport logging.handlersimport loggingimport osimport sys# 提供日志功能class logger:  # 先读取XML文件中的配置数据  # 由于config.xml放置在与当前文件相同的目录下,因此通过 __file__ 来获取XML文件的目录,然后再拼接成绝对路径  # 这里利用了lxml库来解析XML  root = etree.parse(os.path.join(os.path.dirname(__file__), 'config.xml')).getroot()  # 读取日志文件保存路径  logpath = root.find('logpath').text  # 读取日志文件容量,转换为字节  logsize = 1024*1024*int(root.find('logsize').text)  # 读取日志文件保存个数  lognum = int(root.find('lognum').text)  # 日志文件名:由用例脚本的名称,结合日志保存路径,得到日志文件的绝对路径  logname = os.path.join(logpath, sys.argv[0].split('/')[-1].split('.')[0])  # 初始化logger  log = logging.getLogger()  # 日志格式,可以根据需要设置  fmt = logging.Formatter('[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')  # 日志输出到文件,这里用到了上面获取的日志名称,大小,保存个数  handle1 = logging.handlers.RotatingFileHandler(logname, maxBytes=logsize, backupCount=lognum)  handle1.setFormatter(fmt)  # 同时输出到屏幕,便于实施观察  handle2 = logging.StreamHandler(stream=sys.stdout)  handle2.setFormatter(fmt)  log.addHandler(handle1)  log.addHandler(handle2)  # 设置日志基本,这里设置为INFO,表示只有INFO级别及以上的会打印  log.setLevel(logging.INFO)  # 日志接口,用户只需调用这里的接口即可,这里只定位了INFO, WARNING, ERROR三个级别的日志,可根据需要定义更多接口  @classmethod  def info(cls, msg):    cls.log.info(msg)    return  @classmethod  def warning(cls, msg):    cls.log.warning(msg)    return  @classmethod  def error(cls, msg):    cls.log.error(msg)    return

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

from Common.log import *logger.info('This is info')logger.warning('This is warning')logger.error('This is error')

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

  

  产生的日志文件:

  

  文件内容:

  

更多使用Python脚本日志功能相关文章请关注搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用Python脚本日志功能

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址