using System; using System.IO; using System.Net; using System.Text; using Serilog.Core; using Serilog.Events; using Serilog.Formatting; namespace Admin.Core.Serilog.Es { public class TCPSink : ILogEventSink, IDisposable { private readonly ITextFormatter _formatter; private readonly TcpSocketWriter _socketWriter; public TCPSink(IPAddress ipAddress, int port, ITextFormatter formatter) { _socketWriter = new TcpSocketWriter(new Uri($"tcp://{ipAddress}:{port}")); _formatter = formatter; } public TCPSink(Uri uri, ITextFormatter formatter) { _socketWriter = new TcpSocketWriter(uri); _formatter = formatter; } public void Emit(LogEvent logEvent) { var sb = new StringBuilder(); using (var sw = new StringWriter(sb)) _formatter.Format(logEvent, sw); sb.Replace("RenderedMessage", "message"); _socketWriter.Enqueue(sb.ToString()); } public void Dispose() { _socketWriter.Dispose(); } } }