Appium + Python 自动化测试学习之十三:Logging日志模块

日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述(比如:每个事件发生时的数据都是不同的)。开发者还会区分事件的重要性(重要性也被称为 等级 或 严重性)。而我们在做app自动化测试时,遇到异常情况,查看日志也是必不可少的。那我们在什么情况下使用日志呢?


一.何时使用日志

对于简单的日志使用来说日志功能提供了一系列便利的函数。它们是 debug(),info(),warning(),error() 和 critical()。想要决定何时使用日志,请看下表:

你想要执行的任务 此任务对应最好工具
对于命令行或程序的应用,结果显示在控制台 print()
在对程序的普通操作发生时提交事件报告(比如:状态监控和错误调查) logging.info() 函数(当有诊断目的需要详细输出信息时使用 logging.debug() 函数)
提出一个警告信息基于一个特殊的运行时事件 warnings.warn() 位于代码库中,该事件是可以避免的,需要修改客户端应用以消除告警
对一个特殊的运行时事件报告错误 引发异常
报告错误而不引发异常(如在长时间运行中的服务端进程的错误处理) logging.error(), logging.exception() 或 logging.critical() 分别适用于特定的错误及应用领域

日志功能应以所追踪事件级别或严重性而定。各级别适用性如下(以严重性递增):

级别 何时使用 数值
DEBUG 细节信息,仅当诊断问题时适用。 10
INFO 确认程序按预期运行 20
WARNING 表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行 30
ERROR 由于严重的问题,程序的某些功能已经不能正常执行 40
CRITICAL 严重的错误,表明程序已不能继续执行 50

默认的级别是WARNING,意味着只会追踪该级别及以上的事件,除非更改日志级别配置。
例子:

import logging
logging.warning('This is waring!')  # 会在控制台输出This is waring!
logging.info('This is info')  # 不会输出任何内容

那么如果想把日志文件记录到指定的文件件呢,该如何配置?

# -*- coding:utf-8 -*-
import logging
# 通过下面的方式进行简单配置输出方式与日志级别
logging.basicConfig(filename='logs.log', level=logging.DEBUG,)
logging.debug('debug message')
logging.info('info message')
logging.warning('warn message')
logging.error('error message')
logging.critical('critical message')

控制台未显示任何信息,而在当前工作目录下生成了logs.log,内容如下:

DEBUG:root:debug message
INFO:root:info message
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

二.重要概念

  • Logger 记录器:暴露了应用程序代码能直接使用的接口。
  • Handler 处理器:将(记录器产生的)日志记录发送至合适的目的地。
  • Filter 过滤器:提供了更好的粒度控制,它可以决定输出哪些日志记录。
  • Formatter 格式化器:指明了最终输出中日志记录的布局。
2.1 Logger处理器

Logger类永远不会直接实例化,而是始终通过模块级函数实例化 logging.getLogger(name),getLogger()具有相同名称的多次调用将始终返回对同一Logger对象的引用。 如果没有显式创建,默认创建一个名称为root的logger,并应用默认的日志级别(WARN),默认处理器Handler(StreamHandler,即屏幕打印),和默认格式化器Formatter(日志级别:logger名称:消息)。
创建方式:

#实例化一个logger对象
logger = logging.getLogger(name)

创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器Handler。

  • logger.setLevel(logging.ERROR) :设置日志级别为ERROR,即只有日志级别大于等于ERROR的日志才会输出
  • logger.addHandler(handler_name) :为Logger实例增加一个处理器
  • logger.removeHandler(handler_name) : 为Logger实例删除一个处理器
主要函数 用法
setLevel(level) 设置记录器级别,高于level的日志才会被记录。如果Handler设置了更高的日志级别,则以Handler日志级别为准。
getChild(suffix) 返回后代记录器,logging.getLogger(‘abc’).getChild(‘def.ghi’)与logging.getLogger(‘abc.def.ghi’)一致。
addFilter(filter) 添加过滤器
removeFilter(filter) 删除过滤器
addHandler(handler) 增加处理器
removeHandler(handler) 删除处理器
2.2 Handler 处理器

Handler处理器类型有很多种,比较常用的有四个:StreamHanlder, FileHandler,RotatingFileHandler,TimedRotatingFileHandler

Handler类型 主要用途
StreamHandler 输出日志到标准输出设备(如屏幕)
FileHandler 输出日志到文件
RotatingFileHandler 输出到文件,支持文件达到一定大小后创建一个新的日志文件
TimedRotatingFileHandler 输出到文件,支持经过一段时间后创建一个新的日志文件

创建StreamHandler之后,可以通过使用以下方法设置日志级别,设置格式化器Formatter,增加或删除过滤器Filter。

  • sh.setLevel(logging.WARN) : 指定日志级别,低于WARN级别的日志将被忽略
  • sh.setFormatter(formatter_name) :设置一个格式化器formatter
  • sh.addFilter(filter_name) : 增加一个过滤器,可以增加多个
  • sh.removeFilter(filter_name) : 删除一个过滤器

StreamHandler——流处理器

创建方式:

#实例化控制台输出对象
sh = logging.StreamHandler()

FileHandler——文件处理器

创建方式:

#实例化文件输出对象
fh = logging.FileHandler(filename
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值