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.

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