导入 python 自定义日志记录模块时出错

error in importing python custom logging module

我正在编写一个自定义日志记录模块,可以将其导入到我的所有代码中以创建标准日志。这是我的日志记录模块 log_info.py:

class CustomLogger:
    def custom_logger(self, loglevel= logging.INFO):
        logger_name= inspect.stack()[1][3]
        logger= logging.getLogger(logger_name)
        logger.setLevel(loglevel)
        log_message_format= logging.Formatter('%(levelname)s:%(name)s,:%(message)s')
        file_handler= logging.FileHandler('sla_data.log')
        file_handler.setFormatter(log_message_format)
        logger.addHandler(file_handler)
        return logger

这是我导入上述模块的代码:

from log_info import CustomLogger
#code to do a bunch of things
...
#calls the custom logging module as
logs= CustomLogger.custom_logger(loglevel= logging.INFO)
logs.info(f'logs: started_by: {windows_user}, started_at: {etl_start},\
     ended_at: {etl_end}, with no errors')

但是我得到这个错误: 类型错误:custom_logger() 缺少 1 个必需的位置参数:'self'.

更新:我从 custom_logger() 中删除了 'self' 并且它起作用了。我可能不太了解 'self' 的用法。我想了解更多以及如何改进此代码?

您正在通过此处的 class 引用调用对象方法

logs = CustomLogger.custom_logger(loglevel = logging.INFO)

相反,您应该使用对象引用,例如

logs = CustomLogger().custom_logger(loglevel = logging.INFO)

或者您可以将 custom_logger 设为静态方法,因为没有 object/class 引用

class CustomLogger:
    @staticmethod
    def custom_logger(loglevel = logging.INFO):
        ...

P.S

花点时间格式化您的空间以满足 PEP8 约定