【14】Appium进阶篇-日志模块
一、日志收集概述
日志级别:
级别 |
何时使用 |
DEBUG |
调试信息,也是最详细的日志信息。 |
INFO |
证明事情按预期工作。 |
WARNING |
表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。 |
ERROR |
由于更严重的问题,软件已不能执行一些功能了。 |
CRITICAL |
严重错误,表明软件已不能继续运行了。 |
日志格式:日志一般采用 时间+模块+行数+日志具体信息 的内容格式
二、Logging模块简介与应用
logging的构成:logging模块包括logger,Handler,Filter,Formatter四个部分。
Logger 记录器,用于设置日志采集。
Handler 处理器,将日志记录发送至合适的路径。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志的格式
logger记录器:basicConfig(**kwargs) 为日志记录系统做基本配置
部分参数简介
filename 指定日志文件名称
filemode 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为'a)
Tips:文件读写模式
w 以写方式打开,
W 文件若存在,首先要清空,然后(重新)创建
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
format 为处理程序使用指定的格式字符串。
datefmt 使用指定的日期/时间格式。样式如果指定了格式字符串,则使用它来指定 格式字符串的类型.
level 将根记录器级别设置为指定级别。
Handler 处理器:Handler 处理器,将日志记录发送至合适的路径,Handler处理器类型有很多种,比较常用的有三个:
1.StreamHandler:将日志记录输出发送到诸如sys.stdout,sys.stderr或任何类似文件流的对象。上面例子就是输出到控制台
2.FileHandler:将日志记录输出发送到磁盘文件。 它继承了StreamHandler的输出功能。logging.basicConfig(filename='runlog.log',level=logging.DEBUG)
3.NullHandler:不做任何格式化或输出。 它本质上是一个开发人员使用的“无操作”处理程序。
Filter 过滤器 Handlers和Loggers可以使用Filters来完成比级别更复杂的过滤。
Formatter使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。
格式 |
描述 |
%(levelno)s |
打印日志级别的数值 |
%(levelname)s |
打印日志级别名称 |
%(pathname)s |
打印当前执行程序的路径 |
%(filename)s |
打印当前执行程序名称 |
%(funcName)s |
打印日志的当前函数 |
%(lineno)d |
打印日志的当前行号 |
%(asctime)s |
打印日志的时间 |
%(thread)d |
打印线程id |
%(threadName)s |
打印线程名称 |
%(process)d |
打印进程ID |
%(message)s |
打印日志信息 |
# coding:utf-8 import logging #设置日志格式,名称 logging.basicConfig(level=logging.INFO,filename='infolog.log', format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s') logging.debug('debug-info') logging.info('INFO') logging.warning("warning_info") logging.error("error_info") logging.critical("critical_info")
三、Logging配置文件管理
多模块日志配置格式
[loggers] keys=root,infoLogger [logger_root] level=DEBUG #日志等级 handlers=consoleHandler,fileHandler #控制台和文件都记录 [logger_infoLogger] handlers=consoleHandler,fileHandler qualname=infoLogger propagate=0 [handlers] keys=consoleHandler,fileHandler [handler_consoleHandler] class=StreamHandler level=INFO formatter=form02 args=(sys.stdout,) [handler_fileHandler] class=FileHandler level=INFO formatter=form01 args=('runlog.log', 'a') #日志输出文件路径 [formatters] keys=form01,form02 [formatter_form01] format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s [formatter_form02] format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
import logging import logging.config #调用方法如下 CON_LOG='log.conf' #配置日志文件的名称 logging.config.fileConfig(CON_LOG) logging=logging.getLogger()