如何创建自定义 Akka .NET 记录器?

Gig*_*igi 1 logging akka.net

Akka .NET 文档仅解释如何配置自定义记录器。您首先如何开发自定义记录器?

Gig*_*igi 5

我花了一些时间研究如何做到这一点,并写了一篇关于它的详细博客文章

简而言之,您需要处理五个消息:DebugInfoWarningErrorInitializeLogger

public class MyLogger : ReceiveActor
{
    public MyLogger()
    {
        Receive<Debug>(e => this.Log(LogLevel.DebugLevel, e.ToString()));
        Receive<Info>(e => this.Log(LogLevel.InfoLevel, e.ToString()));
        Receive<Warning>(e => this.Log(LogLevel.WarningLevel, e.ToString()));
        Receive<Error>(e => this.Log(LogLevel.ErrorLevel, e.ToString()));
        Receive<InitializeLogger>(_ => Sender.Tell(new LoggerInitialized()));
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您以前使用过日志记录,那么前四条消息是不言自明的。

Log()只是您定义的辅助函数,用于处理将消息记录到目标的详细信息。

InitializeLogger是在启动时完成的。需要通知内部事件总线记录器已设置并准备好开始接收消息。您必须回复LoggerInitialized消息。

PreStart()理想情况下,您还应该使用适当的生命周期挂钩(和)来负责外部资源的分配和清理PostStop()。那里的日志适配器目前还不能做到这一点。