我花了一些时间研究如何做到这一点,并写了一篇关于它的详细博客文章。
简而言之,您需要处理五个消息: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()));
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您以前使用过日志记录,那么前四条消息是不言自明的。
Log()只是您定义的辅助函数,用于处理将消息记录到目标的详细信息。
InitializeLogger是在启动时完成的。需要通知内部事件总线记录器已设置并准备好开始接收消息。您必须回复LoggerInitialized消息。
PreStart()理想情况下,您还应该使用适当的生命周期挂钩(和)来负责外部资源的分配和清理PostStop()。那里的日志适配器目前还不能做到这一点。
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |