日志的概念
日志是记录系统运行过程中各种重要信息的文件,在系统运行过程中由各进程创建并记录
日志的作用
- 记录系统的运行过程及异常信息
- 调试
- 定位错误
- 数据分析
运行日志
运行日志的记录包括:
(1)启动成功或失败
(2)定位成功或失败
(3)操作成功或失败
(4)检查成功或失败
(5)资源加载失败
(6)警告信息
(7)超时
(8)数据读取成功或失败
(9)正常操作过程的步骤顺序
日志级别
- critical 严重的错误,这表明程序本身可能无法继续运行
- error 严重的问题,软件没能执行一些功能
- warning 一个迹象表明,一些意想不到的事情发生,或表明一些问题在不久的将来,这个软件还能按预期工作
- info 确认一切按预期运行
- debug 打印全部的日志,详细的信息,通常只出现在诊断问题上
级别排序:critical >error>warning>info>debug
logging模块
- python程序里自带的logging模块
- logging模块可以记录日志到控制台或日志文件里,比print更好的输出信息,控制日志级别来控制过滤掉不需要看的信息。
- logging模块输出日志到控制台和日志文件里的步骤
- 创建一个日志器对象(Logger)
- 创建一个日志句柄(Handler),用于输出到控制台
- 再创建一个日志句柄(Handler),用于输出到文件
- 添加这两个句柄到日志器对象(Logger)里
- 调用日志器对象(Logger)方法完成日志记录
日志模块四大组件
四大组件关系
- 日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,例如文件、网络等
- 不同的处理器(handler)可以将日志输出到不同的位置
- 日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置
- 每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤
- 每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方
日志常用的格式
定义日志代码
# coding:utf-8
# 导入模块
import logging,time,os
# 定义日志保存本地的路径
# log_path = "D:\\test\\newp\\report"
log_path="../logs/"
class MyLog:
# 定义日志工具类构造方法
def __init__(self):
# 文件的命名
self.logname = os.path.join(log_path, '%s.log'%time.strftime('log%Y%m%d'))
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
# 日志输出格式
self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s[line:%(lineno)d] - fuc:%(funcName)s- %(levelname)s: %(message)s')
def writelog(self, level, message):
# 创建一个FileHandler,用于写到本地
fh = logging.FileHandler(self.logname, 'a',encoding='utf-8') # 追加模式
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)
# 创建一个StreamHandler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)
if level == 'info':
self.logger.info(message)
elif level == 'debug':
self.logger.debug(message)
elif level == 'warning':
self.logger.warning(message)
elif level == 'error':
self.logger.error(message)
# 这两行代码是为了避免日志输出重复问题
self.logger.removeHandler(ch)
self.logger.removeHandler(fh)
# 关闭打开的文件
fh.close()
def info(self, message):
self.writelog('info', message)
def debug(self, message):
self.writelog('debug', message)
def warning(self, message):
self.writelog('warning', message)
def error(self, message):
self.writelog('error', message)
log = MyLog()
if __name__ == "__main__":
log.info("---测试开始----")
log.info("输入密码")
log.warning("----测试结束----")
导入日志模块
- 在Selenium基础模块里调用日志模块记录日志信息:
from utils.logger import log
给登录模块测试代码增加日志
查看日志文件
logs目录中 log年月日.log