0

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

出力の最初の 3 行は SLF4J (構成済みのロガー) 経由ですが、最後の 2 行は経由ですakka.event.Logging$StandardOutLogger。これは、シャットダウン中にログに記録された例外 (状況によってはいくつか見られます) がロガーに失われていることを意味します。

(もちろん、RemoteServerShutdown メッセージが正しくログに記録されるのもうれしいことです。)

誰でもこの動作について何か洞察がありますか?

4

2 に答える 2

1

Akka のロギングはアクターに基づいて構築されており、当然のことながら、すべてのアクターはシャットダウンされActorSystem.shutdown()ているため、ある時点で動作を停止する必要があります。コンソール ロギングへのフォールバックが導入されたため、非常に遅れて記録されたメッセージが完全に失われることはありません。

あなたが見ているのはlog.info、ロギングがシャットダウンされる時点の前と後にある場合があるということです。これは、ActorSystem.shutdown()単にシャットダウンを開始し、その後非同期に進行するためです。

したがって、アクター システムを介したログ記録は、アクター システム内からのみ行う必要があるという結論になります。

于 2013-04-13T19:16:19.310 に答える
0

この問題は、Akka 2.10-2.1.2 にアップグレードすることで解決されるようです。

于 2013-04-13T01:36:29.823 に答える