"""
日志生成步骤：
1，设置存放日志的目录，不存在则创建。
2，设置日志的级别’DE_BUG‘,’INFO‘,’WARING‘,’ERROR‘,CRITICAL’.
3，设置写入日志的格式‘[%(asctime)s][%(threadName)s][line:%(lineno)d] %(levelname)s: %(message)s’
4，设置控制台输出
5，设置日志文件名
6，确保每日生成不同的日志文件，且能够区分生成时间，可用logging.handlers.TimeRotatingFileHandler进行处理，使用之前先进行导入
7，将日志对象添加到logger里
8，进行调用即可get_logger(name="test")
9，日期文件全部进去根目录的autotest_sc_log目录下，将日志文件与项目分离，后续可以使用filebet进行日志采集，进入日志云查询日志
"""
import logging
import os
import time
from logging.handlers import TimedRotatingFileHandler


class Log(object):
    def __init__(self):
        # 获取日志器
        self.logger = logging.getLogger()
        # 先设置日志的的基础显示等级
        self.logger.setLevel(logging.INFO)

        # 设置日志的格式‘[%(asctime)s][%(threadName)s][line:%(lineno)d] %(levelname)s: %(message)s’
        formatter = '[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s: %(message)s'
        log_formatter = logging.Formatter(formatter)

        # 设置存放日志的目录，不存在则创建。
        # 日志文件将放入根目录下，后续更新日志不影响各个项目。
        # 日志目录名叫autotest_sc_log
        root_dir = os.path.abspath(os.sep)
        # 日志目录
        log_dir = os.path.join(root_dir, 'autotest_sc_log')
        # 若该目录不存在则创建该目录
        if not os.path.exists(log_dir):
            os.mkdir(log_dir)
        # 设置日志文件名
        log_file_name = time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log'
        '''
        实例化TimedRotatingFileHandler
        filename：日志文件名。
        when：日志文件按什么切分。'S'-秒；'M'-分钟；'H'-小时；'D'-天；'W'-周
              这里需要注意，如果选择D-天，那么这个不是严格意义上的‘天’，是从你项目启动开始，过了24小时，才会重新创建一个新的日志文件，如果
              项目重启，这个时间就会重置。选择‘MIDNIGHT’是指过了凌晨12点就会创建新的日志。
        interval：时间间隔
        backupCount：是保留日志的个数。默认是0，不会自动删除，如何超过这个数就会自动删除
        '''
        # 创建文件日志与控制台日志处理器
        file_handler = TimedRotatingFileHandler(filename=os.path.join(log_dir, log_file_name),
                                                when='MIDNIGHT',
                                                interval=1,
                                                backupCount=3,
                                                encoding='utf-8')
        console_handler = logging.StreamHandler()

        # 设置文件日志与控制台日志格式
        file_handler.setFormatter(log_formatter)
        console_handler.setFormatter(log_formatter)

        # 设置文件日志与控制台日志基础等级
        # 设置日志的级别’DE_BUG‘,’INFO‘,’WARING‘,’ERROR‘,CRITICAL’.
        file_handler.setLevel(logging.INFO)
        console_handler.setLevel(logging.INFO)

        # 添加日志处理器,文件日志与控制台日志
        self.logger.addHandler(file_handler)
        self.logger.addHandler(console_handler)


# 实例化，后面直接引入使用
log = Log().logger
