如何取消订阅 运行 时间的 Akka 日志

How to unsubscribe Akka logs in run time

我有自己的 Actor,使用配置订阅 Akka 日志

loggers = ["path.MyActor"]

MyActor 正在接收日志事件,但我想在 运行 后停止接收它们。 有办法吗? (通过获取 Akka 日志的事件总线等)[=​​13=]

您可以致电 system.eventStream 取消订阅 MyActor。例如:

import akka.event.Logging._

case object UnsubscribeFromLogging

class MyActor extends Actor {
  def receive = {
    case InitializeLogger(_)                        => sender() ! LoggerInitialized
    case Error(cause, logSource, logClass, message) => // ...
    case Warning(logSource, logClass, message)      => // ...
    case Info(logSource, logClass, message)         => // ...
    case Debug(logSource, logClass, message)        => // ...

    case UnsubscribeFromLogging => context.system.eventStream.unsubscribe(self)
  }
}

以上示例使用自定义 UnsubscribeFromLogging 消息:

val myActor: ActorRef = ??? // reference to MyActor
myActor ! UnsubscribeFromLogging

您可以将对 MyActor 的引用传递给另一个参与者的 unsubscribe 方法:

val myActor: ActorRef = ??? // reference to MyActor
context.system.eventStream.unsubscribe(myActor)

无论哪种方式,您都需要参考 MyActor。您可以通过确定 MyActor 的路径(例如,让 MyActor 打印 self.path)并将此路径传递给 context.actorSelection.

来获得此信息