Библиотека nLog

Класс синглтон 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(Ссылка на метод реального логирования);
    }
				
			

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

0

Автор публикации

не в сети 2 недели

Андрей Мизеров

0
Комментарии: 0Публикации: 76Регистрация: 15-11-2023
Рубрики
Write a comment