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

时间:2018-01-16 14:43:28

标签: logging akka.net

我正在使用Serilog,我注意到在关闭actor系统时,并没有在删除Serilog等自定义记录器之前处理所有未完成的日志消息。因此,一堆消息不再发送到Serilog接收器,而是最终在默认记录器中。

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

await Task.Delay(TimeSpan.FromSeconds(5));
Context.System.Terminate();

我可以在非异步处理程序或FSM AutoResetEvent处理程序中使用OnTermination或类似内容。

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

1 个答案:

答案 0 :(得分:0)

如果您使用的是全球Log课程,请在终止前致电Log.CloseAndFlush()

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