日志级别

debug、info、warn、error、critical五个级别

logging模块构成(四部分)

logger(记录器,用于日志采集)

Handler(处理器,将日志记录发送到合适的路径)

Filter(过滤器,提供了更好的粒度控制,决定输出哪些日志记录)

Formatter(格式化起,指明了日志的格式)

logger(记录器)

在使用debug、info、warn、error、critical五个级别之前创建logging实例

方法:basicConfig()为日志记录系统做基础配置

# -*- coding: utf-8 -*-#

import logging
# 根据日志级别输出
# logging.basicConfig(level=logging.INFO)
logging.basicConfig(level=logging.CRITICAL) logging.debug("debug info")
logging.info("hello world")
logging.warning("warnning info")
logging.error("error info")
logging.critical("critical info")

Handler(处理器)

1.StreamHandler

将日志记录输出发送到sys.stdout,sys.stderr货值任何类似文件流的对象,上面的例子就是输出到控制台

2.FileHandler

将日志记录输出发送到磁盘文件,继承了StreamHandler的输出功能

logging.basicConfig(filename="runlog.log",lever=logging.DEBUG)

运行后当前脚本路径会生成一个runlog.log文件,用于记录日志

3.NullHandler

不做任何格式化或输出,本质是一个开发人员使用“无操作”处理程序。

Filter(过滤器)

可以使用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)s                        打印进程ID

%(message)s                       打印日志信息

方法:

logging.basicConfig(level=logging.DEBUG,filename="runlog.log",format="%(asctime)s%(filename)s[line:%(lineno)d] %(levelname)s %(message)s")

打开淘宝实例:

# -*- coding: utf- -*-#

from appium import webdriver
import yaml
import logging
from selenium.common.exceptions import NoSuchElementException file = open('../xxx.yaml',encoding="utf-8")
data = yaml.load(file,yaml.FullLoader) logging.basicConfig(level=logging.DEBUG,filename="runlog.log",format="%(asctime)s%(filename)s [line:%(lineno)d] %(levelname)s %(message)s") desired_caps={
"platformName": data["platformName"],
"platformVersion": data["platformVersion"],
"deviceName": data["deviceName"],
"appPackage": data["appPackage"],
"appActivity": data["appActivity"],
"unicodeKeyboard":data["unicodeKeyboard"],
"resetKeyboard":data["resetKeyboard"],
"noReset": data["noReset"]
}
logging.info("logging app...")
driver = webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps) #检测同意协议弹窗
def check_agreebtn():
logging.info("check_agreebtn")
try:
agreebtn=driver.find_element_by_id('com.taobao.taobao:id/provision_positive_button')
except NoSuchElementException:
logging.info("no agreebtn")
else:
agreebtn.click() def check_localtionbtn():
logging.info("check_localtionbtn")
try:
localtionbtn=driver.find_element_by_id('com.taobao.taobao:id/uik_mdButtonDefaultPositive')
except NoSuchElementException:
logging.info("no localtionbtn")
else:
localtionbtn.click() check_agreebtn()
check_localtionbtn()

最新文章

  1. 现代软件工程作业-- GitHub的学习
  2. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化
  3. 【类库】容器对象(List、DataTable、 DataView、Dictionary)
  4. CI,从数据库读取数据
  5. 学习 HTML5-页面结构(1)
  6. 数据库中is null(is not null)与=null(!=null)的区别
  7. WIN2003跳出res://C:WINDOWSsystem32mys.dll/mys.hta解决方法
  8. bnu 4353 删格游戏(博弈)
  9. linux下ssh免密登陆
  10. C#编写Windows服务程序图文教程(转载)
  11. HBase配置&启动脚本分析
  12. org.springframework.data.mapping.PropertyReferenceException: No property created found for type
  13. Android NDK开发之从Java与C互调中详解JNI使用(一)
  14. assembly 基础
  15. Linux之redis-cluster(集群配置)
  16. 移动前端—H5实现图片先压缩再上传
  17. 参数签名ascii码排序的坑
  18. druid监控配置
  19. HTML中       等6种空白空格的区别
  20. cordova 常用插件

热门文章

  1. MySQL初始化脚本mysql_install_db使用简介及选项参数
  2. [官网]Windows 10 版本信息
  3. dubbo探究
  4. C++:标准C函数(随机数,时间函数)
  5. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
  6. Hibernate一对多自关联、多对多关联
  7. vuex 理解
  8. MogileFS操作指令
  9. java——值传递和引用传递
  10. 从业务流程角度:分析TMS系统各个功能模块