import logging
import os
from logging import Logger, handlers
from config.settings import get_log_path


class MyLogger(Logger):

    def __init__(self):
        # log_name = '{}.log'.format(time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()))
        # log_path_file = os.path.join(get_log_path(), log_name)
        # 获取日志文件路径
        all_log_path_file = os.path.join(os.path.abspath(get_log_path()), "network-assets-reptile", "log", "app.log")
        error_log_path_file = os.path.join(os.path.abspath(get_log_path()), "network-assets-reptile", "log",
                                           "error.log")
        # print(f'log file path:{all_log_path_file}')
        # 设置日志的名字、日志的收集级别
        super().__init__("test_api", logging.DEBUG)

        # 自定义日志格式(Formatter), 实例化一个日志格式类
        fmt_str = '%(asctime)s  %(levelname)s  %(filename)s : %(funcName)s  [line: %(lineno)s]  %(message)s'
        formatter = logging.Formatter(fmt_str)
        # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        # 实例化控制台渠道(StreamHandle)
        sh = logging.StreamHandler()
        # 设置控制台输出的日志级别
        sh.setLevel(logging.DEBUG)
        # 设置渠道当中的日志显示格式
        sh.setFormatter(formatter)
        # 将渠道与日志收集器绑定起来
        self.addHandler(sh)

        # 实例化文件渠道(FileHandle)
        # fh = logging.FileHandler(log_path_file, mode='a', encoding="utf-8")
        '''
        创建一个文件实例,如果 api_test.log 文件不存在,就会自动创建;
        mode 参数设置为追加;另外为防止乱码, encoding 参数设置为 utf-8 编码格式
        '''
        fh = handlers.RotatingFileHandler(all_log_path_file, maxBytes=10 ** 6, backupCount=5,
                                          encoding="utf-8", mode="a")
        # 设置向文件输出的日志格式
        fh.setLevel(logging.DEBUG)
        # 设置渠道当中的日志显示格式
        fh.setFormatter(formatter)
        # 加载文件实例到 logger 对象中
        self.addHandler(fh)
        # 当log达到最大字节长度,将自动backup5个log文件。当5个log文件都达到最大长度时,将只保留最新的log。
        fh1 = handlers.RotatingFileHandler(error_log_path_file, maxBytes=10 ** 6, backupCount=5,
                                           encoding="utf-8", mode="a")
        # 设置向文件输出的日志格式
        fh1.setLevel(logging.ERROR)
        # 设置渠道当中的日志显示格式
        fh1.setFormatter(formatter)
        # 加载文件实例到 logger 对象中
        self.addHandler(fh1)

        fh.close()
        fh1.close()
        sh.close()


# 实例化MyLogger对象,在其他文件直接使用log就能调用
log = MyLogger()

if __name__ == '__main__':
    log.error("this is a error log")
    log.info("this is a info log")
    log.debug("this is a debug log")
    log.warning("this is a warning log")