现在,我被要求在akka的演员中添加日志功能.
收到消息后,在处理消息之前,应将此消息写入日志.在发送消息之前,应首先记录此消息.
我想我应该覆盖Actor中的receive和send函数.假设我创建了一个actorlog扩展的特征Actor.课程myActor延伸actorlog.但在myActor,我需要覆盖receive功能(这似乎导致问题).所以我很困惑我该做什么.
PS.我知道akka提供日志记录.但现在我需要自己实现这个功能.
Bjö*_*son 25
有一个实用程序可以在Akka中记录收到的消息.在日志记录文档中简要提到了它.基本上你将你的接收函数包装成如下:
def receive = LoggingReceive {
// your normal receive here
}
Run Code Online (Sandbox Code Playgroud)
然后在配置中启用它:
akka.actor.debug.receive=on
Run Code Online (Sandbox Code Playgroud)
将在调试级别记录信息.
除了这里的其他答案,另一种方法是使用orElse前置部分功能到你的receive.在该部分函数中,将登录信息放入,isDefinedAt以便在每条消息上调用它.
例如:
trait ReceiveLogger {
this: Actor with ActorLogging =>
def logMessage: Receive = new Receive {
def isDefinedAt(x: Any) = {
log.debug(s"Got a $x")
false
}
def apply(x: Any) = throw new UnsupportedOperationException
}
}
class MyActor extends Actor with ActorLogging with ReceiveLogger {
def receive: Receive = logMessage orElse {
case ...
}
}
Run Code Online (Sandbox Code Playgroud)
使用orElse是编写receive行为的一般方法.在大多数情况下,我正在撰写如下内容:
def otherBehavior: Receive = {
case OtherMessage => ...
}
class MyActor extends Actor {
def receive = otherBehavior orElse {
case ...
}
}
Run Code Online (Sandbox Code Playgroud)
可堆叠特征方法的一个很好的例子可以在这个演示文稿中看到:http://www.slideshare.net/EvanChan2/akka-inproductionpnw-scala2013
| 归档时间: |
|
| 查看次数: |
4413 次 |
| 最近记录: |