You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
7.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. using System;
  2. // ReSharper disable InconsistentNaming
  3. namespace IPA.Logging
  4. {
  5. /// <summary>
  6. /// The logger base class. Provides the format for console logs.
  7. /// </summary>
  8. public abstract class Logger
  9. {
  10. private static Logger _log;
  11. internal static Logger log
  12. {
  13. get
  14. {
  15. if (_log == null)
  16. _log = new StandardLogger("IPA");
  17. return _log;
  18. }
  19. }
  20. internal static Logger updater => log.GetChildLogger("Updater");
  21. internal static Logger libLoader => log.GetChildLogger("LibraryLoader");
  22. internal static Logger loader => log.GetChildLogger("Loader");
  23. internal static Logger features => loader.GetChildLogger("Features");
  24. internal static Logger config => log.GetChildLogger("Config");
  25. internal static bool LogCreated => _log != null || UnityLogProvider.Logger != null;
  26. /// <summary>
  27. /// The standard format for log messages.
  28. /// </summary>
  29. public static string LogFormat { get; protected internal set; } = "[{3} @ {2:HH:mm:ss} | {1}] {0}";
  30. /// <summary>
  31. /// An enum specifying the level of the message. Resembles Syslog.
  32. /// </summary>
  33. public enum Level : byte
  34. {
  35. /// <summary>
  36. /// No associated level. These never get shown.
  37. /// </summary>
  38. None = 0,
  39. /// <summary>
  40. /// A debug message.
  41. /// </summary>
  42. Debug = 1,
  43. /// <summary>
  44. /// An informational message.
  45. /// </summary>
  46. Info = 2,
  47. /// <summary>
  48. /// A warning message.
  49. /// </summary>
  50. Warning = 4,
  51. /// <summary>
  52. /// An error message.
  53. /// </summary>
  54. Error = 8,
  55. /// <summary>
  56. /// A critical error message.
  57. /// </summary>
  58. Critical = 16
  59. }
  60. /// <summary>
  61. /// An enum providing log level filters.
  62. /// </summary>
  63. [Flags]
  64. public enum LogLevel : byte
  65. {
  66. /// <summary>
  67. /// Allow no messages through.
  68. /// </summary>
  69. None = Level.None,
  70. /// <summary>
  71. /// Only shows Debug messages.
  72. /// </summary>
  73. DebugOnly = Level.Debug,
  74. /// <summary>
  75. /// Only shows info messages.
  76. /// </summary>
  77. InfoOnly = Level.Info,
  78. /// <summary>
  79. /// Only shows Warning messages.
  80. /// </summary>
  81. WarningOnly = Level.Warning,
  82. /// <summary>
  83. /// Only shows Error messages.
  84. /// </summary>
  85. ErrorOnly = Level.Error,
  86. /// <summary>
  87. /// Only shows Critical messages.
  88. /// </summary>
  89. CriticalOnly = Level.Critical,
  90. /// <summary>
  91. /// Shows all messages error and up.
  92. /// </summary>
  93. ErrorUp = ErrorOnly | CriticalOnly,
  94. /// <summary>
  95. /// Shows all messages warning and up.
  96. /// </summary>
  97. WarningUp = WarningOnly | ErrorUp,
  98. /// <summary>
  99. /// Shows all messages info and up.
  100. /// </summary>
  101. InfoUp = InfoOnly | WarningUp,
  102. /// <summary>
  103. /// Shows all messages.
  104. /// </summary>
  105. All = DebugOnly | InfoUp,
  106. /// <summary>
  107. /// Used for when the level is undefined.
  108. /// </summary>
  109. Undefined = Byte.MaxValue
  110. }
  111. /// <summary>
  112. /// A basic log function.
  113. /// </summary>
  114. /// <param name="level">the level of the message</param>
  115. /// <param name="message">the message to log</param>
  116. public abstract void Log(Level level, string message);
  117. /// <summary>
  118. /// A basic log function taking an exception to log.
  119. /// </summary>
  120. /// <param name="level">the level of the message</param>
  121. /// <param name="e">the exception to log</param>
  122. public virtual void Log(Level level, Exception e) => Log(level, e.ToString());
  123. /// <summary>
  124. /// Sends a debug message.
  125. /// Equivalent to Log(Level.Debug, message);
  126. /// <see cref="Log(Level, string)"/>
  127. /// </summary>
  128. /// <param name="message">the message to log</param>
  129. public virtual void Debug(string message) => Log(Level.Debug, message);
  130. /// <summary>
  131. /// Sends an exception as a debug message.
  132. /// Equivalent to Log(Level.Debug, e);
  133. /// <see cref="Log(Level, Exception)"/>
  134. /// </summary>
  135. /// <param name="e">the exception to log</param>
  136. public virtual void Debug(Exception e) => Log(Level.Debug, e);
  137. /// <summary>
  138. /// Sends an info message.
  139. /// Equivalent to Log(Level.Info, message).
  140. /// <see cref="Log(Level, string)"/>
  141. /// </summary>
  142. /// <param name="message">the message to log</param>
  143. public virtual void Info(string message) => Log(Level.Info, message);
  144. /// <summary>
  145. /// Sends an exception as an info message.
  146. /// Equivalent to Log(Level.Info, e);
  147. /// <see cref="Log(Level, Exception)"/>
  148. /// </summary>
  149. /// <param name="e">the exception to log</param>
  150. public virtual void Info(Exception e) => Log(Level.Info, e);
  151. /// <summary>
  152. /// Sends a warning message.
  153. /// Equivalent to Log(Level.Warning, message).
  154. /// <see cref="Log(Level, string)"/>
  155. /// </summary>
  156. /// <param name="message">the message to log</param>
  157. public virtual void Warn(string message) => Log(Level.Warning, message);
  158. /// <summary>
  159. /// Sends an exception as a warning message.
  160. /// Equivalent to Log(Level.Warning, e);
  161. /// <see cref="Log(Level, Exception)"/>
  162. /// </summary>
  163. /// <param name="e">the exception to log</param>
  164. public virtual void Warn(Exception e) => Log(Level.Warning, e);
  165. /// <summary>
  166. /// Sends an error message.
  167. /// Equivalent to Log(Level.Error, message).
  168. /// <see cref="Log(Level, string)"/>
  169. /// </summary>
  170. /// <param name="message">the message to log</param>
  171. public virtual void Error(string message) => Log(Level.Error, message);
  172. /// <summary>
  173. /// Sends an exception as an error message.
  174. /// Equivalent to Log(Level.Error, e);
  175. /// <see cref="Log(Level, Exception)"/>
  176. /// </summary>
  177. /// <param name="e">the exception to log</param>
  178. public virtual void Error(Exception e) => Log(Level.Error, e);
  179. /// <summary>
  180. /// Sends a critical message.
  181. /// Equivalent to Log(Level.Critical, message).
  182. /// <see cref="Log(Level, string)"/>
  183. /// </summary>
  184. /// <param name="message">the message to log</param>
  185. public virtual void Critical(string message) => Log(Level.Critical, message);
  186. /// <summary>
  187. /// Sends an exception as a critical message.
  188. /// Equivalent to Log(Level.Critical, e);
  189. /// <see cref="Log(Level, Exception)"/>
  190. /// </summary>
  191. /// <param name="e">the exception to log</param>
  192. public virtual void Critical(Exception e) => Log(Level.Critical, e);
  193. }
  194. }