导入 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 约定
我正在编写一个自定义日志记录模块,可以将其导入到我的所有代码中以创建标准日志。这是我的日志记录模块 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 约定