如何将Serilog数据发送到logservice?
How to send Serilog data to logservice?
我需要通过 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 并仍然保留结构日志记录而不会丢失任何数据?
经过一番研究,我找到了 Serilog.Formatting.Compact NuGet that will translate the Serilog LogEvent to a compact JSON string. This JSON string can then be read back into a Serilog LogEvent with Serilog-formatting-compact-reader NuGET。经过一些测试后,我可以得出结论,这很好用。
可能有一些类型是 JSON 消毒器无法处理的,但我还没有找到。
我需要通过 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 并仍然保留结构日志记录而不会丢失任何数据?
经过一番研究,我找到了 Serilog.Formatting.Compact NuGet that will translate the Serilog LogEvent to a compact JSON string. This JSON string can then be read back into a Serilog LogEvent with Serilog-formatting-compact-reader NuGET。经过一些测试后,我可以得出结论,这很好用。
可能有一些类型是 JSON 消毒器无法处理的,但我还没有找到。