Класс Синглтон Logger реализуем в отдельной DLL, его можно использовать во всем проекте, во всех модулях, как сейчас модно говорить в каждом Микросервисе.

				
					    public class Logger
    {
        static Action<Log>? _write;
        public static void Write(Log msg) => _write?.Invoke(msg);

        static object _lockFlag = new object();
        static Logger? _instance;

        public static Logger Instance
        {
            get
            {
                lock (_lockFlag)
                {
                    if (_instance == null)
                        _instance = new Logger();
                }
                return _instance;
            }
        }
        public void Init(Action<Log> write)
        {
            _write = write;
        }
    }
				
			

У метода Write параметр типа Log

				
					    public class Log
    {
        public int id = 0; // Some ID
        public int lvl = 0; // Error level:
                            // Trace - 0,
                            // Debug - 1,
                            // Info  - 2,
                            // Warn  - 3,
                            // Error - 4,
                            // Fatal - 5
        public int type; // Type of message
        public string src = ""; // Source
        public string msg = ""; // Message 
				
			

и если хотим использовать Logger в коде, то просто пишем:

				
					Logger.Write(new Log(){lvl = 2, msg = "какое то сообщение"});
				
			

ну или можем заполнить и другие поля типа id = 1, type = 2

Кроме того, что Logger это Синглтон со статическим методом Write, здесь еще интересно, то что сам этот метод никуда ничего не пишет, он доверяет, можно сказать делегирует эту задачу некоему методу клиентского модуля.

В клиентском модуле инициализируем Logger передавая ссылку на рабочий метод, которая сохранится в закрытом поле логгера _write.

				
					    void InitializeLogger()
    {
        Logger.Instance.Init(Ссылка на метод реального логирования);
    }
				
			

Проект в котором я начал экспериментировать с таким подходом логирования 

nLog

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.