我需要通过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,并且仍然保留结构日志记录而不丢失任何数据?
发布于 2022-03-08 09:50:39
经过一些研究后,我找到了将Serilog Serilog.Formatting.Compact NuGet转换成紧凑的JSON字符串的LogEvent。然后可以将此JSON字符串读入带有LogEvent的Serilog 塞里罗格格式-紧凑阅读器NuGET中。经过一些测试,我可以得出结论,这是很好的工作。
可能有JSON灭菌器无法处理的类型,但我还没有找到任何类型。
发布于 2022-10-20 06:25:50
试着看看这个项目,这正是您想要的:日志服务器
在这里,你也会发现RabbitMQ的沉没。
在我的项目中,您会发现以下内容:
由来自这是LogEventHandler队列的每个新消息触发的RabbitMQ。
这是核心在RabbitMQ接收器中发布消息。
在我的例子中,我不使用json格式,但是我使用了更紧凑的protobuf二进制序列化。
在这是自述中,您可以找到有关如何使用此日志系统的更多详细信息。
https://stackoverflow.com/questions/71113693
复制相似问题