【问题标题】:Logging events in Python; How to log events inside classes?在 Python 中记录事件;如何在类内记录事件?
【发布时间】:2009-10-28 19:15:41
【问题描述】:

我(只是为了好玩)构建了 3 个类来帮助我记录工作中的一些事件。

这是他们:

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 实例传递给我想要记录的每个其他类,我该如何做到这一点?我的想法是将 logHandler 传递给每个 init 函数,然后在其中使用它。

不做我指定的事情怎么办?

它将如何与全局 logHandler 一起工作?有没有办法在运行时发现程序中是否有 logHandler 实例,并使用它来创建消息?

谢谢

【问题讨论】:

    标签: python oop logging global-variables


    【解决方案1】:

    只需在您发布的模块中创建您的类的实例。然后只需将您的日志记录模块导入您要记录的每个文件中,然后执行以下操作:

    yourloggingmodule.handler.newLogMessage(...)
    

    其中handler 是您创建的实例的名称。

    【讨论】:

    • 感谢 Pynt 的回答。那是我想避免的事情,但这是一个不错的解决方案。还有其他想法吗?
    【解决方案2】:

    您可以使用Borg pattern,这意味着您可以创建记录器对象的本地实例并让它们访问相同的状态。有人会说这很优雅,其他人可能会说这很混乱。你决定。 :)

    【讨论】:

    • 这是一个非常有趣的概念。我确实检查过了,我可能会走这条路来完成我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多