日志級別
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-8 -*-# 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()