首先,我是 Scala 新手:
我正在 Scala 中编写一个日志记录工具,它只是一个扩展 Actor 类的类。这样用户就可以扩展这个类并且日志功能将可用。基本上,每次扩展此类的参与者发送或接收消息时,我都想写入日志文件。为澄清起见,每个参与者都有自己的日志文件,以后可以对其进行整理。我正在采用 Lamport 时钟风格的方法来对事件进行排序,方法是让每个 Actor(扩展此类)都有自己的时间变量,该变量在消息发送-接收时更新,并且 Actor 将比较当前时间变量(只是一个正整数) 与发送者的并用两者中的较大者更新其时间变量。
现在我选择让它成为一个简单的方法,比如
sendMessage(recipient, message)
用于发送消息。这只会记录到演员要向 X 发送消息的文件。
现在,我被难住的部分是在接收消息时进行日志记录。当演员收到消息时,我只想以如下格式记录此事件
myLogFile.writeLine(self.ToString+": Got a message from "+X+" at time: "+messageSendTime+", processed the message at" +Math.max(myCurrTime+1, messageSendTime+1))
但是我需要知道是谁发送了这条消息,除非我强迫用户在消息本身中包含这些信息(即发件人的姓名、时间变量等),否则它会变得很难(呃)。有没有办法获得实际发件人的参考?我希望它也能与远程演员一起工作。我能想到的唯一方法是,如果我在用户在他/她的类中定义的 act 方法上附加一些额外的 case 语句,例如:
def act {
case => // the user's case statements
...
//somehow I append these statements to the end for the Logger class's use
case (LoggerClassRegisterInboundMessage, message, timeStamp)
InboundMessagesMap.put(timeStamp, message)
}
通过具有此功能,我可以在用户发送消息时发送这些隐藏消息来“在幕后”进行所有日志记录。但是,这仅在发件人还使用日志记录工具时才有效。所以一个更普遍的问题是:在 Scala 中有没有一种方法可以在 Scala 中获取发件人的名称/toString,而不管发件人的类别如何?
我实际上可以假设每个发送消息的类都将扩展 Logger 类。因此,如果有人知道如何附加到类似于上述示例的行为或类似的内容,我将同样感激!