我将Akka FSM与 Scala 一起使用,并使用trait的log
成员进行日志记录,即.FSM
akka.event.Logging
当应用程序想要正常终止时调用context.system.shutdown()
关闭actor系统时,似乎最新的日志消息有时会丢失(并且根本没有打印出来)。
有没有办法保证在系统关闭之前始终打印出所有日志消息?
根据 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]
}