【发布时间】:2022-10-20 14:25:50
【问题描述】:
我需要通过 RabbitMQ 通道将 Serilog 日志数据从服务器 A 发送到服务器 B。为此,我在服务器 A 上创建了一个发送数据的 serilog 自定义接收器。问题是它应该如何发送这些数据,以便服务器 B 可以轻松地使用 Serilog 将其重新记录到外部日志服务并保持结构日志记录完好无损。
服务器 A 上的日志代码可能如下所示:
var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 34;
log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
然后这将由 Serilog 打包到 LogEvent 对象中,然后发送到接收器:
我简单的水槽可能看起来像这样:
public class MySink : ILogEventSink
{
private readonly IFormatProvider _formatProvider;
public MySink(IFormatProvider formatProvider)
{
_formatProvider = formatProvider;
}
public void Emit(LogEvent logEvent)
{
//Sending logEvent over MQ
}
}
如何将此 LogEvent 发送到服务器 b,在那里我可以将其重新登录到 Serilog 并仍然保留结构日志记录而不会丢失任何数据?
【问题讨论】:
-
ILogger.Write(LogEvent) 对您不起作用?
-
@Fildor,你的意思是什么?我怀疑自定义接收器必须以某种方式序列化 LogEvent,通过 MQ 将其发送到服务器 B,服务器 B 将反序列化 LogEvent,然后将其发布到 Serilog。真的那么容易吗?
-
这就是我的意思 - 在 MQ 接收器中的 B 上。它可能这么容易,但我不是当然.我只是想知道为什么不应该工作,如果我们有 LogEvent 的重载?
-
您不必问我们是否那么容易。去试试吧!如果它不起作用并且您无法弄清楚,请提供minimal reproducible example 并清楚地解释您的尝试不起作用的地方。
标签: c# logging rabbitmq serilog