【问题标题】:How can I flush logging before terminating the actor system?如何在终止参与者系统之前刷新日志记录?
【发布时间】:2018-01-16 14:43:27
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: logging akka.net


    【解决方案1】:

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

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

    【讨论】:

    • 我现在无法检查,因为我不在办公室,但这只是 Serilog 冲洗,不是吗?我已经这么称呼了。问题是 Akka 在关闭期间删除所有自定义记录器,然后所有待处理的日志消息都传递给自定义记录器。
    • 啊,我明白了 - 感谢您的澄清。听起来它需要有 Akka.NET 知识的人来权衡:-)
    • 是的,很抱歉造成混乱,我稍微澄清了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2010-10-14
    • 1970-01-01
    • 2021-07-20
    • 2013-05-14
    相关资源
    最近更新 更多