如何将类属性的每个属性和方法设置为类的属性和方法?

2024-10-01 07:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一个像这样的logCreator类

import logging,logging.handlers

class LogCreator:

    _logLevel = {
        "NOTSET": 0,
        "DEBUG": 10,
        "INFO": 20,
        "WARN": 30,
        "WARNING": 30,
        "ERROR": 40,
        "CRITICAL": 50
    }

    def __init__(self,logFile,
                      level='DEBUG',
                      verbose=True,
                      maxBytes=1024*1024,
                      logFormat='%(asctime)s %(levelname)s %(message)s'):

        self.logger = logging.getLogger(logFile)
        self.logger.setLevel(self._logLevel[level])
        logger_formatter = logging.Formatter(logFormat,
                                             datefmt='%Y-%m-%d %H:%M:%S')

        file_handler = logging.handlers.RotatingFileHandler(logFile, maxBytes=maxBytes, backupCount=1, encoding="UTF-8")
        file_handler.setLevel(self._logLevel[level])
        file_handler.setFormatter(logger_formatter)
        self.logger.addHandler(file_handler)

        if verbose:
            console_handler = logging.StreamHandler()
            console_handler.setLevel(self._logLevel[level])
            console_handler.setFormatter(logger_formatter)
            self.logger.addHandler(console_handler)

LogCreator的属性是logger,所以如果我想做一些日志记录,我必须这样做

l = LogCreator('logfile.log')

# some script
l.logger.info('I just did something')

我觉得它看起来有点难看和不直观,如果我能写的话会更好

l = LogCreator('logfile.log')

# some script
l.info('I just did something')

因此,类logCreatorlogger属性中的每个属性和方法都是该类的属性和方法。我在类的初始化结束时尝试了return self.logger,但它引发了错误,因为__init__()必须返回None


Tags: self属性formatterloggingloggerlevelconsolefile
1条回答
网友
1楼 · 发布于 2024-10-01 07:20:49

我想你可以添加一些方法来做。像这样:

class LogCreator:
    """ your init code"""

    def info(self, message):
        self.logger.info(message)

    def debug(self, message):
        self.logger.debug(message)

然后您可以使用:

logger = LogCreator('./out.log')

logger.info('info')
logger.debug('debug')

或者。您只能添加一个方法来返回记录器:

def get_logger(self):
    return self.logger

然后使用:

logger = LogCreator('./out.log')

log = logger.get_logger()

log.info('info')
log.debug('debug')

相关问题 更多 >