直接扔代碼,自己看咯,都有註釋:
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’
此時進行日誌輸出時,如下:
運行之後,查看日誌文件: