初探自动化测试框架(python)第十二章——日志


import os
import logging
from logging.handlers import TimedRotatingFileHandler

from config.pathes import LOG_PATH, PROJECTINFO, NOW, DAY
from utils.FileReader import YamlReader


class Logger(object):
    def __init__(self, progect):
        self.progect = progect
        self.logger_name = '%stest' % self.progect
        self.logger = logging.getLogger(self.logger_name)
        logging.root.setLevel(logging.NOTSET)
        c = YamlReader(PROJECTINFO).get(progect).get('log')
        if not os.path.exists(LOG_PATH):
            os.mkdir(LOG_PATH)
        self.log_file_name = c.get('file_name') if c and c.get('file_name') else NOW+'test.log'  # 日志文件
        self.backup_count = c.get('backup') if c and c.get('backup') else 5  # 保留的日志数量
        self.console_output_level = c.get('console_level') if c and c.get('console_level') else 'WARNING'   # 日志输出级别
        self.file_output_level = c.get('file_level') if c and c.get('file_level') else 'DEBUG'
        pattern = c.get('pattern') if c and c.get('pattern') else '%(asctime)s - %(name)s - %(levelname)s - %(message)s'    # 日志输出格式
        self.ft = logging.Formatter(pattern)


    def remove_log(self):
        """删除多余日志"""
        while True:
            lists = os.listdir(LOG_PATH)
            log_count = len(set(lists))
            if log_count <= self.backup_count:
                break
            else:
                lists.sort(key=lambda fn: os.path.getmtime(LOG_PATH))
                old_log_file = os.path.join(LOG_PATH, lists[0])
                os.remove(old_log_file)

    def get_logger(self):
        if not self.logger.handlers:  # 避免重复日志
            console_handler = logging.StreamHandler()
            console_handler.setFormatter(self.ft)
            console_handler.setLevel(self.console_output_level)
            self.logger.addHandler(console_handler)
            self.remove_log()   # 每天重新创建一个日志文件,最多保留backup_count份
            lf = TimedRotatingFileHandler(filename=os.path.join(LOG_PATH, DAY+' '+self.log_file_name),
                                                    when='D',
                                                    interval=1,
                                                    backupCount=self.backup_count,
                                                    delay=True,
                                                    encoding='utf-8'
                                                    )
            lf.setFormatter(self.ft)
            lf.setLevel(self.file_output_level)
            self.logger.addHandler(lf)
            # 在控制台输出日志信息
            ls = logging.StreamHandler()
            ls.setFormatter(self.ft)
            ls.setLevel(self.file_output_level)
            self.logger.addHandler(ls)
        return self.logger


if __name__ == '__main__':
    Logger('OA').get_logger().info('doooo')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值