Skip to content

utils.log.logger.Logger.getLogger()在初始化新的logger时会报错 #1

@Deophius

Description

@Deophius

发现getLogger()的在setup == True时,会调用logger.setup(name),然后回调用add_default_handler

    @classmethod
    def getLogger(cls, name: str, setup: bool = True):
        if name in _loggers:
            return cast(cls, _loggers[name])
        _logger_class  = logging.getLoggerClass()
        logging.setLoggerClass(cls)
        logger = cast(cls, logging.getLogger(name))
        logging.setLoggerClass(_logger_class)
        if setup:
            logger.setup(name)
        _loggers[name] = logger
        return logger

    def setup(self, name: str, handle: bool = True) -> None:
        self.setupConfig()
        if handle: self.add_default_handler(name)

    def setupConfig(self) -> None:
        from django.conf import settings
        self.debug_mode = settings.DEBUG
        self.format = '{asctime} [{levelname}] {message}'
        self.format_style = '{'
        self.stack_level = 8
        self.setLevel(logging.INFO)

    def add_default_handler(self, name: str, *paths: str, format: str = None) -> None:
        base_dir = os.path.join(*paths)
        os.makedirs(base_dir, exist_ok=True)
        file_path = os.path.join(base_dir, name + '.log')
        handler = logging.FileHandler(file_path, encoding='UTF8', mode='a')
        formatter = logging.Formatter(format or self.format, style=self.format_style)
        handler.setFormatter(formatter)
        self.addHandler(handler)

但是此时paths是空的,导致在os.path.join(*paths)一行报错,因为os.path.join()需要至少一个参数。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions