日志收集-logging

logging

日志作用

不管是在项目开发还是测试过程中,项目运行一旦出现问题日志信息就非常重要了。日志是定位问题的重要手段,就像侦探人员要根据现场留下的线索来推断案情。

日志级别

CRITICAL > ERROR > WARNING > INFO > DEBUG
DEBUG:调试信息,也是最详细的日志信息
INFO:证明事情按预期工作
WARNING:表面发生了一些意外,或者不久的将来会发生问题(如:磁盘满了)。软件还是在正常工作
ERROR:由于更严重的问题,软件已经不能执行一些功能了
CRITICAL:严重错误,表面软件已经不能继续运行了

日志格式

一般为时间+模块+行数+日志具体信息的内容格式

iWpu6I.md.jpg

日志位置

一个项目中会有很多的日志采集点,而日志采集点必须结合业务属性来设置。比如在登录代码执行前可以插入“准备登录..”日志信息,如果登录完成之后,再设置登录的提示日志就会给人造成误解,无法判断到底是登录之前的问题还是登录之后的问题,因此日志采集点的位置很重要。

logging用法

logging模块官方文档

basicConfig(**kwargs) 为日志记录系统做基本配置
部分参数
  • filename 指定日志文件名称
  • filemode 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为’a)
  • format 为处理程序使用指定的格式字符串。
    iWpUcn.md.jpg
  • level 将根记录器级别设置为指定级别。(仅会显示指定级别以及比它更严重的级别。如level=logging.ERROR,则仅会显示ERROR和CRITICAL级别的日志)
    事例用法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import logging
    logging.basicConfig(level=logging.DEBUG,
    filename='runlog.log',
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    filemode='a')

    logging.debug('debug info')
    logging.info('info inof')
    logging.warning('warning info')
    logging.error('error info')
    logging.critical('critical info')

实例:

将之前yaml的代码加上logging

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import yaml
from appium import webdriver
import logging

with open('device_info.yaml', 'r', encoding='utf-8') as file:
data = yaml.load(file)
desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platforVersion'] = data['platforVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['app'] = data['app']
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['noReset'] = data['noReset']

logging.basicConfig(level=logging.INFO,
filename='runlog.log',
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
filemode='a')
logging.info('start app...')
driver = webdriver.Remote(
'http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
logging.info('Skip startup page...')
driver.find_element_by_id('com.baidu.BaiduMap:id/dj2').click()
logging.info('Close Xiaodu...')
driver.find_element_by_id('com.baidu.BaiduMap:id/byo').click()