Akka .NET文档仅解释了如何configure custom loggers。你是如何开始开发自定义记录器的?
答案 0 :(得分:2)
看起来你只需要一个覆盖OnReceive(对象消息)的常规Actor。这是默认的记录器实现:
以下是跟踪记录器实现:
答案 1 :(得分:2)
我花了一些时间研究如何做到这一点,并写了详细的blog post。
简而言之,您需要处理五条消息:Debug
,Info
,Warning
,Error
和InitializeLogger
。
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()));
}
// ...
}
如果您之前曾使用过日志记录,前四条消息是不言自明的。
Log()
只是您定义的辅助函数,它处理将消息记录到目标的详细信息。
InitializeLogger
在启动时完成。需要通知内部事件总线已设置记录器并准备开始接收消息。您必须回复LoggerInitialized
条消息。
理想情况下,您还应该使用适当的生命周期挂钩(PreStart()
和PostStop()
)来处理外部资源的分配和清理。在那里记录适配器目前还没有。