Logger.cs 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. namespace MeloongCore;
  2. /// <summary>
  3. /// 日志等级。
  4. /// </summary>
  5. public enum LogLevels {
  6. /// <summary>
  7. /// 追踪。
  8. /// 只在调试状态下输出日志信息。
  9. /// </summary>
  10. Trace,
  11. /// <summary>
  12. /// 信息。
  13. /// </summary>
  14. Info,
  15. /// <summary>
  16. /// 警告。
  17. /// </summary>
  18. Warning,
  19. /// <summary>
  20. /// 错误。
  21. /// </summary>
  22. Error
  23. }
  24. /// <summary>
  25. /// 输出日志时执行的错误汇报行为。
  26. /// </summary>
  27. public enum LogBehaviors {
  28. /// <summary>
  29. /// 无提示。
  30. /// </summary>
  31. None,
  32. /// <summary>
  33. /// 只在调试状态下给出错误提示信息。
  34. /// </summary>
  35. ToastIfDebug,
  36. /// <summary>
  37. /// 给出错误提示信息。
  38. /// </summary>
  39. Toast,
  40. /// <summary>
  41. /// 弹出错误弹窗,不要求反馈。
  42. /// </summary>
  43. Alert,
  44. /// <summary>
  45. /// 弹出错误弹窗,要求提交反馈。
  46. /// </summary>
  47. AlertThenFeedback,
  48. /// <summary>
  49. /// 弹出系统原生样式的错误弹窗,要求提交反馈,然后使程序崩溃。
  50. /// </summary>
  51. AlertThenCrash
  52. }
  53. public interface ILogger {
  54. void Log(string message, LogLevels level, LogBehaviors behavior, string filePath);
  55. void Log(Exception ex, string? message, LogLevels level, LogBehaviors behavior, string filePath);
  56. }
  57. public static class Logger {
  58. public static ILogger Instance { get; set; } = new ConsoleLogger();
  59. // 转发给实例的方法调用
  60. // TODO: Trace
  61. public static void Log(string message, LogLevels level = LogLevels.Info, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "")
  62. => Instance.Log(message, level, behavior, filePath);
  63. public static void Log(Exception ex, string? message = null, LogLevels level = LogLevels.Warning, LogBehaviors behavior = LogBehaviors.ToastIfDebug, [CallerFilePath] string filePath = "")
  64. => Instance.Log(ex, message, level, behavior, filePath);
  65. public static void Trace(string message, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(message, LogLevels.Trace, behavior, filePath);
  66. public static void Info(string message, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(message, LogLevels.Info, behavior, filePath);
  67. public static void Warning(string message, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(message, LogLevels.Warning, behavior, filePath);
  68. public static void Error(string message, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(message, LogLevels.Error, behavior, filePath);
  69. public static void Trace(Exception ex, string? message = null, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(ex, message, LogLevels.Trace, behavior, filePath);
  70. public static void Info(Exception ex, string? message = null, LogBehaviors behavior = LogBehaviors.None, [CallerFilePath] string filePath = "") => Log(ex, message, LogLevels.Info, behavior, filePath);
  71. public static void Warning(Exception ex, string? message = null, LogBehaviors behavior = LogBehaviors.ToastIfDebug, [CallerFilePath] string filePath = "") => Log(ex, message, LogLevels.Warning, behavior, filePath);
  72. public static void Error(Exception ex, string? message = null, LogBehaviors behavior = LogBehaviors.AlertThenFeedback, [CallerFilePath] string filePath = "") => Log(ex, message, LogLevels.Error, behavior, filePath);
  73. }
  74. public class ConsoleLogger : ILogger {
  75. public void Log(string message, LogLevels level, LogBehaviors behavior, string filePath) {
  76. }
  77. public void Log(Exception ex, string? message, LogLevels level, LogBehaviors behavior, string filePath) {
  78. }
  79. }