/// <summary> /// Возвращает установленные приоритеты важности, начиная с заданной /// </summary> /// <param name="loggingLevel">Минимальная важность</param> /// <returns></returns> /// <exception cref="InvalidEnumArgumentException"></exception> public static LoggingLevel GetMinimumLevel(LoggingLevel loggingLevel) { if (!Enum.IsDefined(typeof(LoggingLevel), loggingLevel)) { throw new InvalidEnumArgumentException(nameof(loggingLevel), (int)loggingLevel, typeof(LoggingLevel)); } //Крайние положения возвращаем без изменения if (loggingLevel == LoggingLevel.None || loggingLevel == LoggingLevel.All) { return(loggingLevel); } //Получаем массив приоритетов var priorities = GetLoggingPriorities(); //Определяем индекс необходимого нам приоритета var index = Array.FindIndex(priorities, p => loggingLevel.HasFlag(p)); //Устанавливаем важности до найденного включительно var result = LoggingLevel.None; for (var i = 0; i <= index; i++) { result |= priorities[i]; } return(result); }
public void Write(string info, LoggingLevel level = LoggingLevel.Other) { if (!enabledLevels.HasFlag(level)) { return; } Console.WriteLine(info); }
/// <summary> /// Возвращает первую приоритетную важность из заданной /// </summary> /// <param name="loggingLevel">Важность, в которой будет произведен поиск приоритетной</param> /// <param name="descending">Приоритеты по убыванию? (иначе по возрастанию)</param> /// <returns></returns> public static LoggingLevel GetFirstPriorityLevel(this LoggingLevel loggingLevel, bool descending = true) { //Получаем массив приоритетов var priorities = GetLoggingPriorities(); //Если не по убыванию, то меняем порядок на обратный if (!descending) { Array.Reverse(priorities); } //Перебираем все приоритеты foreach (var priority in priorities) { //Если важность приоритетна, то возвращаем ее if (loggingLevel.HasFlag(priority)) { return(priority); } } //Важность по умолчанию return(LoggingLevel.None); }