我正在使用Serilog,我注意到在关闭actor系统时,并没有在删除Serilog等自定义记录器之前处理所有未完成的日志消息。因此,一堆消息不再发送到Serilog接收器,而是最终在默认记录器中。
作为一种解决方法,我在ReceiveAsync
处理程序中使用它:
await Task.Delay(TimeSpan.FromSeconds(5));
Context.System.Terminate();
我可以在非异步处理程序或FSM AutoResetEvent
处理程序中使用OnTermination
或类似内容。
上面的解决方法只是一个解决方法。有没有办法冲洗日志?请注意,我在关闭演员系统之前已经冲洗了Serilog,这部分工作正常。
答案 0 :(得分:0)
如果您使用的是全球Log
课程,请在终止前致电Log.CloseAndFlush()
。
如果您正在使用IoC容器或类似设备单独管理Logger
实例,而未分配给全局Log.Logger
属性,请确保容器(或您的应用代码){{1终止前的记录器实例。