【问题标题】:Log all messages in Akka without modifying all receive methods在 Akka 中记录所有消息而不修改所有接收方法
【发布时间】:2015-01-19 16:48:15
【问题描述】:

我想在我的 Akka 应用程序中记录所有收到的消息给所有参与者。 如果参与者接收方法是LoggingReceive,则有一个配置akka.actor.debug.receive 将记录发送给参与者的所有消息。

根据http://doc.akka.io/docs/akka/current/additional/faq.html,这意味着用LoggingReceive包装所有接收方法,如How to log all incoming messages from Akka (Java)

def receive = {
  LoggingReceive {
    case x ⇒ // do something
  }
}

有没有办法隐式或通过配置来做到这一点?

【问题讨论】:

    标签: scala logging akka messages


    【解决方案1】:

    据我所知,您应该很容易就能做到这样的事情:

    trait LoggingReceiveActor extends Actor{
    
      def receive = LoggingReceive(loggedReceive)
    
      def loggedReceive:Receive
    }
    
    class MyActor extends LoggingReceiveActor{
    
      def loggedReceive = {
        case _ => 
      }
    }
    

    任何从LoggingReceiveActor 继承的actor 现在都必须为loggingReceive 提供一个impl,如果您这样做,那么当启用调试日志记录时,这种actor 将记录收到的消息。

    【讨论】:

    • 还是要修改所有actor。虽然一个简单的查找和替换就可以了。我认为查看所有消息将是调试的好方法......有没有更方便的方法来查看发生了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多