Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在系统关闭时保证Akka的日志输出刷新?_Scala_Logging_Akka_Fsm_Application Shutdown - Fatal编程技术网

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

Scala 在系统关闭时保证Akka的日志输出刷新?,scala,logging,akka,fsm,application-shutdown,Scala,Logging,Akka,Fsm,Application Shutdown,我与Scala一起使用,并使用FSMtrait的log成员进行日志记录,即akka.event.logging的一个实例 当调用context.system.shutdown()在应用程序希望正常终止时关闭actor系统时,最新的日志消息似乎有时会丢失(并且根本不会打印出来) 有没有办法保证在系统关闭之前总是打印出所有日志消息?根据库恩博士的建议,这里是一个示例TerminationLogger。我把我的放在error()通道中,这样它就不会经常陷入字符串比较中,但是很明显,你可以把它放在任何你

我与Scala一起使用,并使用
FSM
trait的
log
成员进行日志记录,即
akka.event.logging的一个实例

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


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

根据库恩博士的建议,这里是一个示例TerminationLogger。我把我的放在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]
}

你怎么知道所有的信息都是打印出来的?我不知道你的意思。从我的应用程序的角度来看,当打印所有日志消息时,它不需要任何通知。换言之,我不需要“知道”所有消息都已打印。我只是想看看它们印出来。在我目前的情况下,我可以确认我记录的消息没有打印出来。这清楚了吗?我的观点是,Akka不可能知道所有消息何时被处理。我理解这一点。因为日志子系统也是使用Akka消息实现的,所以没有办法保证所有日志消息的输出?如果这是真的,那么有没有办法至少让所有挂起的日志消息都被刷新,因为我使用的是没有分发功能的单节点actor系统?如果你告诉我怎么做,我可以尝试一下。对您来说,最简单的解决方案可能是让您的记录器关闭系统,而不是让您的参与者。