void OnLogerError(ILoger <ILogParameter> loger) { //при возникновении ошибки во время логирования LogerPack pack = null; foreach (var p in m_logers) { if (p.Loger != null) { if (p.Loger == loger) { pack = p; break; } } } //удаляем косячный логер pack.Loger.LogerError -= OnLogerError; m_logers.Remove(pack); WindowsLoger.LogMessage("LogSet", "Логер был исключён из набора из-за исключения при логировании", System.Diagnostics.EventLogEntryType.Warning , new LogParameter("Тип логера", pack.Loger.GetType().FullName)); if (m_logers.Count == 0) { if (!pack.Loger.GetType().Equals(typeof(WindowsLoger))) { AddLoger(new WindowsLoger("LogSetGenerated")); WindowsLoger.LogMessage("LogSet", "Логирование было переключено на журнал Windows из-за отсутствия других логеров в Наборе", System.Diagnostics.EventLogEntryType.Information , new LogParameter("Тип логера", pack.Loger.GetType().FullName)); } } }
/// <summary> /// Добавление логера для логирования с указанными параметрами /// </summary> /// <param name="loger">Целевой логер для записи</param> public void AddLoger(LogerPack pack) { if (pack.Loger == null) { throw new ArgumentNullException("Не допустимо добавление в набор логирования пустого экземпляра логера"); } m_logers.Add(pack); pack.Loger.LogerError += OnLogerError; }