Scala 在系统关闭时保证Akka的日志输出刷新?
我与Scala一起使用,并使用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()通道中,这样它就不会经常陷入字符串比较中,但是很明显,你可以把它放在任何你
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系统?如果你告诉我怎么做,我可以尝试一下。对您来说,最简单的解决方案可能是让您的记录器关闭系统,而不是让您的参与者。