selenium之日志架构

1.什么是日志

跟踪软件运行时事件的方法(跟踪文档)

日志作用:

  1. 服务诊断
  2. 信息查询
  3. 数据分析

2.python实现日志收集

1)logging模块 python底层封装的基本常用 内置模块 不需要安装

Logging模块四大组件:

1、  日志器 logger 提供日志入口

2、  处理器 handler 日志怎么实现输出?日志可以写在文档里,那还在哪里输出呢?控制台输出,在不同的情况下,还需要把日志以邮件的方式输出

3、  格式器 formater 决定日志输出的格式及内容

4、  过滤器 filter在不同场景对应不同日志的输出,只保留最感兴趣的日志内容

2)日志级别

问题:把项目部署到开发环境或者生产环境,生成的日志是一样的吗?

日志越详细对定位问题越有帮助,在开发环境有必要,但是在生产环境,如果收集的日志越多,会给服务器输入输出增大压力,从而可能让整个项目的性能受限,其次生成的日志越多也会干扰到我们去排查问题。所以需要结合不同的场景、不同的情况去做具体的分析,并不是说在任何时候需要把所有时候做的所有事情都记录下来。

怎么样在不同场景输出对应的不同等级的日志?

功能也有等级

日志级别从低到高:

1、  debug等级 用来调试

2、  info 关键事件的描述

3、  warning 警告

4、  error 错误

5、  critical严重

生产环境应该输出哪些日志等级?4、5等级的日志

开发环境应该输出哪些日志?1、2、3、4、5所有日志输出

 

如何把日志整合到自动化框架设计

1)  登录 收集什么样的信息 元素加载没完成、元素变更,导致用例定位不到

简化代码,提供代码复用性

代码扩展性、可维护性

3.实战:

import logging
import os


class FramLog:
#将日志输出到Console
def get_log(self):
#创建日志器
logger=logging.getLogger('logger')
#设置日志器的等级 不设置的话,默认warning级别及以上会输出,debug、info级别不输出
#这里进行自定义INFO
logger.setLevel(logging.DEBUG)
# logger.setLevel(logging.INFO)
#创建控制台处理器
sh=logging.StreamHandler()
#创建格式器
#日志里面包含哪些内容:时间 文件名 行 日志等级 事件描述 s表示字符串格式 d数字类型
formater=logging.Formatter(fmt="%(asctime)s [%(filename)s:%(lineno)d] [%(levelname)s] :%(message)s ",
datefmt="%Y-%m-%d %X")
#一个日志器可以有多个处理器,并且每个处理器可以有各自的格式器和过滤器
logger.addHandler(sh)
sh.setFormatter(formater)
return logger
#将日志输出到文件
def log_file(self,level,message):
logfile = os.getcwd().split('public')[0] + "log/error" + ".log"
# 创建logger
logger = logging.getLogger('logger')
# 设置logger日志级别,设置日志级别后,可以输出设计级别以上级别的日志,默认warning级别
logger.setLevel(logging.DEBUG) # DEBUG级别以上可以输出
# 创建handler,将日志输出到文件中
handler = logging.FileHandler(logfile, "a") # a表示追加模式
# 定义formatter
formatter = logging.Formatter(fmt="%(asctime)s [%(filename)s:%(lineno)d] [%(levelname)s] :%(message)s ",
datefmt="%Y-%m-%d %X")
# 给handler添加formatter
handler.setFormatter(formatter)
# 给logger添加handler
logger.addHandler(handler)

# 根据传入的level实现不同日志级别的输出
if level == "debug":
logger.debug(message)
elif level == "info":
logger.info(message)
elif level == "warning":
logger.warning(message)
elif level == "error":
logger.error(message)
# 避免日志的重复输出
logger.removeHandler(handler)
handler.close() # 关闭打开的文件

def log_debug(self, message):
self.log_file("debug", message)

def log_info(self, message):
self.log_file("info", message)

def log_warning(self, message):
self.log_file("warning", message)

def log_error(self, message):
self.log_file("error", message)

if __name__ == '__main__':
FramLog().log_error('这个一个报错日志')
posted @ 2022-04-16 21:30  小侠う  阅读(258)  评论(0编辑  收藏  举报