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

LogManager.cs 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Threading.Tasks;
  3. namespace Discord.Logging
  4. {
  5. internal class LogManager
  6. {
  7. public LogSeverity Level { get; }
  8. public Logger ClientLogger { get; }
  9. public event Func<LogMessage, Task> Message { add { _messageEvent.Add(value); } remove { _messageEvent.Remove(value); } }
  10. private readonly AsyncEvent<Func<LogMessage, Task>> _messageEvent = new AsyncEvent<Func<LogMessage, Task>>();
  11. public LogManager(LogSeverity minSeverity)
  12. {
  13. Level = minSeverity;
  14. ClientLogger = new Logger(this, "Discord");
  15. }
  16. public async Task LogAsync(LogSeverity severity, string source, Exception ex)
  17. {
  18. if (severity <= Level)
  19. await _messageEvent.InvokeAsync(new LogMessage(severity, source, null, ex)).ConfigureAwait(false);
  20. }
  21. public async Task LogAsync(LogSeverity severity, string source, string message, Exception ex = null)
  22. {
  23. if (severity <= Level)
  24. await _messageEvent.InvokeAsync(new LogMessage(severity, source, message, ex)).ConfigureAwait(false);
  25. }
  26. #if NETSTANDARD1_3
  27. public async Task LogAsync(LogSeverity severity, string source, FormattableString message, Exception ex = null)
  28. {
  29. if (severity <= Level)
  30. await _messageEvent.InvokeAsync(new LogMessage(severity, source, message.ToString(), ex)).ConfigureAwait(false);
  31. }
  32. #endif
  33. public Task ErrorAsync(string source, Exception ex)
  34. => LogAsync(LogSeverity.Error, source, ex);
  35. public Task ErrorAsync(string source, string message, Exception ex = null)
  36. => LogAsync(LogSeverity.Error, source, message, ex);
  37. #if NETSTANDARD1_3
  38. public Task ErrorAsync(string source, FormattableString message, Exception ex = null)
  39. => LogAsync(LogSeverity.Error, source, message, ex);
  40. #endif
  41. public Task WarningAsync(string source, Exception ex)
  42. => LogAsync(LogSeverity.Warning, source, ex);
  43. public Task WarningAsync(string source, string message, Exception ex = null)
  44. => LogAsync(LogSeverity.Warning, source, message, ex);
  45. #if NETSTANDARD1_3
  46. public Task WarningAsync(string source, FormattableString message, Exception ex = null)
  47. => LogAsync(LogSeverity.Warning, source, message, ex);
  48. #endif
  49. public Task InfoAsync(string source, Exception ex)
  50. => LogAsync(LogSeverity.Info, source, ex);
  51. public Task InfoAsync(string source, string message, Exception ex = null)
  52. => LogAsync(LogSeverity.Info, source, message, ex);
  53. #if NETSTANDARD1_3
  54. public Task InfoAsync(string source, FormattableString message, Exception ex = null)
  55. => LogAsync(LogSeverity.Info, source, message, ex);
  56. #endif
  57. public Task VerboseAsync(string source, Exception ex)
  58. => LogAsync(LogSeverity.Verbose, source, ex);
  59. public Task VerboseAsync(string source, string message, Exception ex = null)
  60. => LogAsync(LogSeverity.Verbose, source, message, ex);
  61. #if NETSTANDARD1_3
  62. public Task VerboseAsync(string source, FormattableString message, Exception ex = null)
  63. => LogAsync(LogSeverity.Verbose, source, message, ex);
  64. #endif
  65. public Task DebugAsync(string source, Exception ex)
  66. => LogAsync(LogSeverity.Debug, source, ex);
  67. public Task DebugAsync(string source, string message, Exception ex = null)
  68. => LogAsync(LogSeverity.Debug, source, message, ex);
  69. #if NETSTANDARD1_3
  70. public Task DebugAsync(string source, FormattableString message, Exception ex = null)
  71. => LogAsync(LogSeverity.Debug, source, message, ex);
  72. #endif
  73. public Logger CreateLogger(string name) => new Logger(this, name);
  74. public async Task WriteInitialLog()
  75. {
  76. await ClientLogger.InfoAsync($"Discord.Net v{DiscordConfig.Version} (API v{DiscordConfig.APIVersion})").ConfigureAwait(false);
  77. }
  78. }
  79. }