FFXIVLauncher-Netmaui
50 строк · 1.5 Кб
1using System;2using Serilog.Core;3using Serilog.Events;4
5namespace XIVLauncher.Common.Support6{
7/// <summary>8/// Serilog event sink.9/// </summary>10public class SerilogEventSink : ILogEventSink11{12private static SerilogEventSink instance;13private readonly IFormatProvider formatProvider;14
15/// <summary>16/// Initializes a new instance of the <see cref="SerilogEventSink"/> class.17/// </summary>18/// <param name="formatProvider">Logging format provider.</param>19private SerilogEventSink(IFormatProvider formatProvider)20{21this.formatProvider = formatProvider;22}23
24/// <summary>25/// Event on a log line being emitted.26/// </summary>27public event EventHandler<(string Line, LogEventLevel Level, DateTimeOffset TimeStamp, Exception? Exception)>? LogLine;28
29/// <summary>30/// Gets the default instance.31/// </summary>32public static SerilogEventSink Instance => instance ??= new SerilogEventSink(null);33
34/// <summary>35/// Emit a log event.36/// </summary>37/// <param name="logEvent">Log event to be emitted.</param>38public void Emit(LogEvent logEvent)39{40var message = logEvent.RenderMessage(this.formatProvider);41
42if (logEvent.Exception != null)43{44message += "\n" + logEvent.Exception;45}46
47this.LogLine?.Invoke(this, (message, logEvent.Level, logEvent.Timestamp, logEvent.Exception));48}49}50}