Akka记录在停机期间重置

Akka记录在停机期间重置,akka,Akka,在Akka 2.10下,我的日志配置在关机期间被重置。。。导致潜在的重要消息被写入标准输出,而不是日志机制 例如,此代码: String settings = "akka.event-handlers = [\"akka.event.slf4j.Slf4jEventHandler\"]\n" + "akka.actor.provider = \"akka.cluster.ClusterActorRefProvider\""; Config config = Con

在Akka 2.10下,我的日志配置在关机期间被重置。。。导致潜在的重要消息被写入标准输出,而不是日志机制

例如,此代码:

String settings =
        "akka.event-handlers = [\"akka.event.slf4j.Slf4jEventHandler\"]\n" +
        "akka.actor.provider = \"akka.cluster.ClusterActorRefProvider\"";
Config config = ConfigFactory.parseString(settings);
ActorSystem system = ActorSystem.create("testing", config);
LoggingAdapter log = Logging.getLogger(system, new Object());
log.info("Via SlF4J");
system.shutdown();
Thread.sleep(1000);
log.info("After shutdown");
生成此输出:

17:24:11.999 [testing-akka.actor.default-dispatcher-4] INFO  akka.event.slf4j.Slf4jEventHandler - Slf4jEventHandler started
17:24:12.151 [testing-akka.actor.default-dispatcher-4] INFO  N.168.1.106:2552) - RemoteServerStarted@akka://testing@192.168.1.106:2552
17:24:12.155 [testing-akka.actor.default-dispatcher-4] INFO  java.lang.Object - Via SlF4J
[INFO] [04/12/2013 17:24:12.218] [testing-akka.actor.default-dispatcher-4] [NettyRemoteTransport(akka://testing@192.168.1.106:2552)] RemoteServerShutdown@akka://testing@192.168.1.106:2552
[INFO] [04/12/2013 17:24:13.156] [main] [Object(akka://testing)] After shutdown
前三行输出是通过SLF4J(我配置的记录器),而最后两行是通过
akka.event.Logging$StandardOutLogger
——这意味着在关机期间记录的异常(在某些情况下,我看到一些异常)会丢失给记录器

(当然,如果能正确记录RemoteServerShutdown消息也会很好。)


有人了解这种行为吗?

这个问题似乎可以通过升级到Akka 2.10-2.1.2来解决。

Akka的日志是建立在参与者之上的,当然,由于所有参与者都在
ActorSystem.shutdown()期间关闭,因此它必须在某个时候停止工作。控制台日志记录的回退功能已经到位,因此真正延迟记录的消息仍然不会完全丢失

您看到的是,您的
log.info
有时在日志关闭的时间点之前,有时在之后出现,因为
ActorSystem.shutdown()
只是启动关闭,然后异步进行

因此得出的结论是,通过actor系统进行日志记录只能在actor系统内部进行,因为这样可以确保事情仍然正常运行。

谢谢您——我同意您的说法——但问题是Akka在关机(例如“RemoteServerShutdown”)后(错误地)记录了自己的消息。添加我的“log.info”只是为了确认日志记录中的更改与时间有关。(我不需要记录这样的消息——但我确实需要Akka正确记录自己的消息!)