【发布时间】:2022-01-23 07:15:06
【问题描述】:
如何避免使用我想要记录的 Serilog 接收器创建循环。 问题是基类“MyTcpServer”和“MyTcpClient”使用了 Serilog。 但由于 TcpSink 也使用相同的类,发送日志条目将无限循环。
如何防止这种情况发生?
Main()
{
Serilog.Log.Logger = new LoggerConfiguration()
.WriteTo.TcpSink() //this a TcpListener/Server listening on port 1234
.WriteTo.Console()
.CreateLogger();
MyTcpServer AnotherServer = new MyTcpServer(4321);
}
public class MyTcpServer
{
///this class contains Log.Verbose|Debug|Error
private List<MyTcpClient> clients;
}
public class MyTcpClient
{
///this class contains Log.Verbose|Debug|Error
}
public class TcpServerSink : ILogEventSink
{
MyTcpServer server;
public TcpServerSink(int port = 1234)
{
server = new MyTcpServer(1234);
}
public void Emit(LogEvent logevent)
{
string str = Newtonsoft.Json.JsonConvert.Serialize(logevent);
server.Send(str);
}
}
【问题讨论】:
-
你这里有循环依赖... TcpServerSink 被 Serilog 使用,Serilog 被 TcpServerSink 使用。我认为您应该将 TcpServerSink 的日志推送到不同的位置。事件日志或 Serilog 中的单独接收器。