FFXIVLauncher-Netmaui

Форк
0
50 строк · 1.5 Кб
1
using System;
2
using Serilog.Core;
3
using Serilog.Events;
4

5
namespace XIVLauncher.Common.Support
6
{
7
    /// <summary>
8
    /// Serilog event sink.
9
    /// </summary>
10
    public class SerilogEventSink : ILogEventSink
11
    {
12
        private static SerilogEventSink instance;
13
        private 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>
19
        private SerilogEventSink(IFormatProvider formatProvider)
20
        {
21
            this.formatProvider = formatProvider;
22
        }
23

24
        /// <summary>
25
        /// Event on a log line being emitted.
26
        /// </summary>
27
        public event EventHandler<(string Line, LogEventLevel Level, DateTimeOffset TimeStamp, Exception? Exception)>? LogLine;
28

29
        /// <summary>
30
        /// Gets the default instance.
31
        /// </summary>
32
        public 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>
38
        public void Emit(LogEvent logEvent)
39
        {
40
            var message = logEvent.RenderMessage(this.formatProvider);
41

42
            if (logEvent.Exception != null)
43
            {
44
                message += "\n" + logEvent.Exception;
45
            }
46

47
            this.LogLine?.Invoke(this, (message, logEvent.Level, logEvent.Timestamp, logEvent.Exception));
48
        }
49
    }
50
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.