在系统关闭时保证Akka中的日志输出刷新?

时间:2012-06-19 17:36:37

标签: scala logging akka fsm application-shutdown

我正在使用Akka FSM使用Scala并使用log特征的FSM成员进行记录,即akka.event.Logging的实例。

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

是否可以保证在系统关闭之前始终打印出所有日志消息?

1 个答案:

答案 0 :(得分:1)

根据库恩博士的建议,这是一个示例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]
}