import logging.handlers
import logging
import os
import sys


# 提供日志功能
class logFactory():
    def __init__(self, name):
        # 初始化logger
        self.log = logging.getLogger(name)
        # 设置日志文件保存路径，common同级目录中的logs文件夹
        self.logpath = os.path.abspath(os.path.join(os.getcwd(), "logs"))
        if not os.path.exists(self.logpath):
            os.makedirs(self.logpath)
        # 日志文件的绝对路径
        self.logname = os.path.join(self.logpath, 'app.log')
        # print(f"日志保存路径{logpath}")
        # 设置日志文件容量，转换为字节
        self.logsize = 1024 * 1024 * int(8)  # 8M
        # 设置日志文件保存个数
        self.lognum = int(3)
        # 日志格式，可以根据需要设置
        self.fmt = logging.Formatter('[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[line:%(lineno)d]: %(message)s',
                                     '%Y-%m-%d %H:%M:%S')

        # 日志输出到文件，设置日志名称，大小，保存个数,编码
        self.handle1 = logging.handlers.RotatingFileHandler(self.logname, maxBytes=self.logsize,
                                                            backupCount=self.lognum, encoding='utf-8')
        self.handle1.setFormatter(self.fmt)
        self.log.addHandler(self.handle1)

        # 日志输出到屏幕，便于实时观察
        self.handle2 = logging.StreamHandler(stream=sys.stdout)
        self.handle2.setFormatter(self.fmt)
        self.log.addHandler(self.handle2)

        # 设置日志等级，这里设置为INFO，表示只有INFO级别及以上的会打印
        self.log.setLevel(logging.INFO)

    # 日志接口，可根据需要定义更多接口
    @classmethod
    def info(self, msg):
        self.log.info(msg)
        return

    @classmethod
    def warning(self, msg):
        self.log.warning(msg)
        return

    @classmethod
    def error(cls, msg):
        cls.log.error(msg)
        return

    @classmethod
    def debug(cls, msg):
        cls.log.debug(msg)
        return