Akka日志记录在关机期间重置

时间:2013-04-12 23:36:08

标签: akka

在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消息正确记录。)

有人对此行为有任何了解吗?

2 个答案:

答案 0 :(得分:1)

Akka的日志记录是建立在演员之上的,自然因为所有演员在ActorSystem.shutdown()期间都被关闭了所以它必须在某个时刻停止工作。控制台日志记录的后备已经到位,因此记录的消息确实很晚仍未完全丢失。

您所看到的是log.info有时会在关闭日志记录之前和之后进入,因为ActorSystem.shutdown()只是启动关闭,然后异步进行。

因此,结论是通过actor系统进行的日志记录只能在actor系统中进行,因为这可以确保事情仍在运行。

答案 1 :(得分:0)

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