如何在终止 actor 系统之前刷新日志记录?

use*_*702 5 logging akka.net

我正在使用 Serilog,并且在关闭 Actor 系统时注意到,在删除像 Serilog 这样的自定义记录器之前,并非所有未完成的日志消息都已处理。因此,一堆消息不再发送到 Serilog 接收器,而是在默认记录器中结束。

作为一种解决方法,我在ReceiveAsync处理程序中使用它:

await Task.Delay(TimeSpan.FromSeconds(5));
Context.System.Terminate();
Run Code Online (Sandbox Code Playgroud)

我可能可以AutoResetEvent在非异步处理程序或 FSMOnTermination处理程序中使用一个或类似的。

上面的解决方法只是一种解决方法。有没有办法刷新日志?请注意,在关闭 actor 系统之前我已经刷新了 Serilog,这部分工作正常。

Nic*_*rdt 1

如果您使用全局Log类,请Log.CloseAndFlush()在终止之前调用。

如果您使用 IoC 容器或类似容器来Logger单独管理实例(未分配给全局Log.Logger属性),请确保容器(或您的应用程序代码)Dispose()在终止前是记录器实例。