一、线性代码
import logging
# 第一步:创建日志器
logger = logging.getLogger("日志服务器")
# 第二步:定义处理器,控制台和文本输出两种方式
console_handler = logging.StreamHandler() # 控制台处理器
file_handler = logging.FileHandler("./log.txt", mode="a", encoding="utf-8")
# 第三步:设置不同的输出格式
console_fmt = "%(name)s--->%(levelname)s--->%(asctime)s"
file_fmt = "%(lineno)d--->%(asctime)s--->(levelname)"
fmt1 =logging.Formatter(fmt=console_fmt)
fmt2 = logging.Formatter(fmt=file_fmt)
console_hander.setFormatter(fmt1)
file_handler.setFormatter(fmt2)
# 第四步:日志器添加处理器
logger.addHandler(console_handler)
logger.addFilter(file_handler)
二、封装成日志库
class Log:
def __init__(self, level="DEBUG"):
# 日志器对像
self.log = logging.getLogger("接口自动化测试")
self.log.setLevel(level)
# 读取log配置信息
self.yml = YamlUtil()
self.cfg = YamlUtil().read_config_yaml('log')
def console_handle(self):
"""控制台处理哭器"""
console_handler = logging.StreamHandler()
console_handler.setLevel(self.cfg['console_log_level'])
# 处理器添加格式器
console_handler.setFormatter(self.get_formatter()[0])
return console_handler
def file_handle(self, level="DEBUG"):
"""文件处理哭器"""
log_path = self.yml.get_project_path() + '/logs/' + self.cfg['log_name'] + \
datetime.datetime.now().strftime('%Y-%m-%d')+'.txt'
file_handler = logging.FileHandler(log_path, mode="a", encoding="utf-8")
file_handler.setLevel(self.cfg['file_log_level'])
# 文件处理器添加格式器
file_handler.setFormatter(self.get_formatter()[1])
return file_handler
def get_formatter(self):
"""格式器"""
# 定义输出格式
console_fmt = logging.Formatter(fmt=self.cfg['console_log_format'])
file_fmt = logging.Formatter(fmt=self.cfg['file_log_format'])
return console_fmt, file_fmt
def get_log(self):
# 日志器添加控制台处理器
self.log.addHandler(self.console_handle())
# 日志器添加文件处理器
self.log.addHandler(self.file_handle())
# 返回日志实例对像
return self.log
def remove_handler(self, handler):
self.log.removeHandler(handler)
网友评论