直接扔代码,自己看咯,都有注释:
1. 配置文件中,存放日志相关信息: 等级,渠道(日志保存在文件中还是输出在控制台),日志文件名称,测试人员信息,如下:
2. 自定义日志类
from common.read_config import *
import logging
"""获取日志配置信息"""
log_set = my_config.read_data_by_one_section_name('log_set') # 获取测试数据文件的文件名
class MyLog:
def __new__(cls, level, channel, logname, tester='Lujier'):
# 创建自己的日志收集器,my_log当作一个对象返回
dir_path = os.path.dirname(os.path.dirname(__file__))
log_path = os.path.join(dir_path, 'logs', logname)
my_log = logging.getLogger(tester)
# 创建一个日志输出渠道(输出到控制台)
my_log.setLevel(level) # 日志输出等级
output_type = ''
if channel == 'CONSOLE':
output_type = logging.StreamHandler() # 输出到控制台
else:
output_type = logging.FileHandler(log_path, encoding='UTF-8') # 输出到控制台
output_type.setLevel(level)
# 将输出渠道添加到日志收集器中
my_log.addHandler(output_type) # 将输出渠道添加到日志收集器中
my_log.addHandler(output_type)
# 设置日志输出格式
ft = '%(asctime)s-->[%(filename)s-->%(funcName)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
ft = logging.Formatter(ft)
output_type.setFormatter(ft)
output_type.setFormatter(ft)
return my_log
my_log = MyLog(**log_set) # 创建一个日志对象
注意: ft中%各自代表含义如下:
‘’’
%(name)s:收集器名称
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
“”"
工作中常用
format=’%(asctime)s - [%(filename)s–>line:%(lineno)d] - %(levelname)s: %(message)s’
此时进行日志输出时,如下:
运行之后,查看日志文件: