在日常开发中,日志的输出有助于了解测试任务的执行状态。python提供了日志模块logging。
废话不多说,直接上代码。
MyLogger.py
#! /usr/bin/env python3
# -*- coding:UTF-8 -*-
import logging
import os
import time
# from colorama import Fore, Style
class TestingLogger(object):
def __init__(self, home, name=""):
self.home = home
self.name = name
# 创建一个handler,用于写入日志文件
self.time_style = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
self.basedir = os.path.split(os.path.realpath(__file__))[0]
log_home = self.basedir + os.sep + self.home + os.sep
# 创建一个logger
self.logger = logging.getLogger(self.time_style + self.name + '.log')
# 设置Log等级总开关
self.logger.setLevel(logging.DEBUG)
fh = logging.FileHandler(self.log_name, mode='w', encoding='utf-8')
# 输出到file的log等级的开关
fh.setLevel(logging.DEBUG)
# 同时在控制台输出的内容
ch = logging.StreamHandler()
# 输出到console的log等级的开关
# ch.setLevel(logging.WARNING)
ch.setLevel(logging.DEBUG)
# 定义handler的输出格式
# formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(message)s')
# formatter_fh = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
formatter_fh = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
formatter_ch = logging.Formatter("%(message)s")
fh.setFormatter(formatter_fh)
ch.setFormatter(formatter_ch)
# 第四步,将logger添加到handler里面
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def debug(self, msg):
"""
定义输出的颜色debug--white,info--green,warning/error/critical--red
:param msg: 输出的log文字
:return:
"""
# self.logger.debug(Fore.WHITE + str(msg) + Style.RESET_ALL)
if isinstance(msg, list):
msg = "".join(msg)
self.logger.debug(str(msg))
def info(self, msg):
# self.logger.info(Fore.GREEN + str(msg) + Style.RESET_ALL)
if isinstance(msg, list):
msg = "".join(msg)
self.logger.info(str(msg))
def warning(self, msg):
# self.logger.warning(Fore.RED + str(msg) + Style.RESET_ALL)
if isinstance(msg, list):
msg = "".join(msg)
self.logger.warning(str(msg))
def error(self, msg):
# self.logger.error(Fore.RED + str(msg) + Style.RESET_ALL)
if isinstance(msg, list):
msg = "".join(msg)
self.logger.error(str(msg))
def critical(self, msg):
# self.logger.critical(Fore.RED + str(msg) + Style.RESET_ALL)
if isinstance(msg, list):
msg = "".join(msg)
self.logger.critical(str(msg))
if __name__ == '__main__':
mew = TestingLogger("log", "Test_")
mew.debug('this is a logger debug message')
mew.info('this is a logger info message')
mew.warning('this is a logger warning message')
mew.error('this is a logger error message')
mew.critical('this is a logger critical message')