在Python中记录事件;如何在类内部记录事件?
我为了好玩,做了三个类来帮助我记录工作中的一些事件。
这三个类就是:
class logMessage:
def __init__(self,objectName,message,messageType):
self.objectName = objectName
self.message = message
self.messageType = messageType
self.dateTime = datetime.datetime.now()
def __str__(self):
return str(self.dateTime) + "\nObjeto de valor " + str(self.objectName) + " gerou uma mensagem do tipo: " + self.messageType + "\n" + self.message + "\n"
class logHandler():
def __init__(self):
self.messages = []
def __getitem__(self,index):
return self.messages[index]
def __len__(self):
return len(self.messages)
def __str__(self):
colecaoString = ""
for x in self.messages:
colecaoString += str(x) + "\n"
return colecaoString
def dumpItem(self,index):
temp = self.messages[index]
del self.messages[index]
return str(temp)
def append(self,log):
if isinstance(log,logMessage.logMessage):
self.messages.append(log)
else:
self.newLogMessage(log, "Wrong object type. Not a log message. Impossible to log.","Error")
def newLogMessage(self,objectInstance,message,messageType):
newMessage = logMessage.logMessage(objectInstance,message,messageType)
self.append(newMessage)
我有个问题:
假设我还有其他类,比如员工类(Employee),我想记录在这个类里面发生的事件。
我该怎么做,才能不每次都把一个日志处理器(logHandler)传给我想记录日志的每个类呢?我想的办法是把日志处理器传给每个初始化函数,然后在里面使用它。
有没有其他方法可以做到这一点,而不需要我之前提到的那样?
如果使用全局的日志处理器,这样能行吗?有没有办法在程序运行时检查是否有日志处理器的实例,并用它来创建日志信息?
谢谢!
2 个回答
1
你可以使用一种叫做 Borg模式 的方法。这种方法的意思是,你可以创建多个本地的日志记录器实例,但它们可以共享同样的状态。有些人觉得这样很优雅,而有些人则觉得有点复杂。你自己来判断吧。:)
1
只需要在你发布的模块中创建一个你类的实例。然后在你想要记录日志的每个文件中导入你的日志模块,接着像这样做:
yourloggingmodule.handler.newLogMessage(...)
这里的 handler
是你创建的实例的名字。