4

我将Akka FSM与 Scala 一起使用,并使用trait的log成员进行日志记录,即.FSMakka.event.Logging

当应用程序想要正常终止时调用context.system.shutdown()关闭actor系统时,似乎最新的日志消息有时会丢失(并且根本没有打印出来)。

有没有办法保证在系统关闭之前始终打印出所有日志消息?

4

1 回答 1

1

根据 Kuhn 博士的建议,这里有一个 TerminatingLogger 示例。我将我的放在 error() 通道中,这样它就不会经常落入字符串比较中,但你显然可以把它放在你想要的任何地方。

class TerminatingLogger extends Actor with StdOutLogger {
    override def receive: Receive = {
      case InitializeLogger(_) ⇒ sender() ! LoggerInitialized
      case error : akka.event.Logging.Error if error.message.toString().equals("TERMINATE_SYSTEM") =>
      {
        context.system.shutdown()
      }
      case event: LogEvent     ⇒ 
      {
       print(event) 
      }
    }
  }

然后只需在您的 application.conf 文件中配置它

akka {
  loggers = [com.namespace.TerminatingLogger]
}
于 2015-05-18T12:46:17.963 回答