我有两个类,它们都有自己的记录器(已定义和配置)。所有记录器中唯一常见的是它们正在登录同一个文件。所有记录器都在类的 init 方法中定义和配置。这与我正在做的事情类似
class One:
def __init__(self):
pass
def set_params(self):
log_file_name = r"C:\Users\Sample\SamplePath\SampleLogs.log"
log_format = "%(name)s : %(levelname)s : %(asctime)s : [%(filename)s] : [%(funcName)s] : %(message)s"
three = Three(log_file_name, log_format)
self.param = [log_file_name, log_format, three]
def get_param(self):
return self.param
这是设置log_file的父类log_format。
然后有一个第三类,它在第一类
中被实例化class Three:
def __init__(self, log_file_name, log_format):
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(log_file_name)
formatter = logging.Formatter(log_format)
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
self.logger.addHandler(file_handler)
self.logger.addHandler(stream_handler)
def sample_method(self):
self.logger.info("Sample Method called")
第三类的对象正用于第二类(它还有自己的记录器)
class Two:
def __init__(self, log_file_name, log_format, class_three_object):
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(log_file_name)
formatter = logging.Formatter(log_format)
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
self.logger.addHandler(file_handler)
self.logger.addHandler(stream_handler)
class_three_object.sampleMethod()
最后,用于调用的主要方法是
def main():
first = One()
params = first.get_param()
second = Two(params[0], params[1], params[2])
这三个类都在不同的模块中。我知道当我们将处理程序附加到记录器及其祖先时,Python会多次记录。但如果每个类都有自己的记录器,它应该发生吗? 我认为如果实例化第三类两次可能是可能的。因此,我将它实例化一次并将其作为对象传递给第二类,但事实证明这是我的一个直截了当的猜测。 有人可以帮我这个吗? 谢谢
编辑1:所有类都在三个不同的文件中。当 name ==“ main ”
时,在包含第二个类的文件中调用main()函数