using System; namespace BepInEx.Logging { /// /// The level, or severity of a log entry. /// [Flags] public enum LogLevel { /// /// No level selected. /// None = 0, /// /// A fatal error has occurred, which cannot be recovered from. /// Fatal = 1, /// /// An error has occured, but can be recovered from. /// Error = 2, /// /// A warning has been produced, but does not necessarily mean that something wrong has happened. /// Warning = 4, /// /// An important message that should be displayed to the user. /// Message = 8, /// /// A message of low importance. /// Info = 16, /// /// A message that would likely only interest a developer. /// Debug = 32, /// /// All log levels. /// All = Fatal | Error | Warning | Message | Info | Debug } /// /// Helper methods for log level handling. /// public static class LogLevelExtensions { /// /// Gets the highest log level when there could potentially be multiple levels provided. /// /// The log level(s). /// The highest log level supplied. public static LogLevel GetHighestLevel(this LogLevel levels) { var enums = Enum.GetValues(typeof(LogLevel)); Array.Sort(enums); foreach (LogLevel e in enums) { if ((levels & e) != LogLevel.None) return e; } return LogLevel.None; } /// /// Returns a translation of a log level to it's associated console colour. /// /// The log level(s). /// A console color associated with the highest log level supplied. public static ConsoleColor GetConsoleColor(this LogLevel level) { level = GetHighestLevel(level); return level switch { LogLevel.Fatal => ConsoleColor.Red, LogLevel.Error => ConsoleColor.DarkRed, LogLevel.Warning => ConsoleColor.Yellow, LogLevel.Message => ConsoleColor.White, LogLevel.Info => ConsoleColor.DarkGray, LogLevel.Debug => ConsoleColor.DarkGray, _ => ConsoleColor.Gray }; } } }