From 937ff71c4a890e883350c9e3b4c2f0780177d42c Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 7 Feb 2016 16:38:17 -0400 Subject: [PATCH] Added ILogger, made logger optional for RestClients --- src/Discord.Net.Net45/Discord.Net.csproj | 3 ++ src/Discord.Net/Logging/ILogger.cs | 44 +++++++++++++++++++++ src/Discord.Net/Logging/Logger.cs | 2 +- src/Discord.Net/Net/Rest/BuiltInEngine.cs | 21 +++++----- src/Discord.Net/Net/Rest/ETFRestClient.cs | 2 +- src/Discord.Net/Net/Rest/JsonRestClient.cs | 2 +- src/Discord.Net/Net/Rest/RestClient.cs | 11 +++--- src/Discord.Net/Net/Rest/SharpRestEngine.cs | 22 ++++++----- 8 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 src/Discord.Net/Logging/ILogger.cs diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index 665efdb95..7bc06ff71 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -487,6 +487,9 @@ Legacy.cs + + Logging\ILogger.cs + Logging\Logger.cs diff --git a/src/Discord.Net/Logging/ILogger.cs b/src/Discord.Net/Logging/ILogger.cs new file mode 100644 index 000000000..200f843e4 --- /dev/null +++ b/src/Discord.Net/Logging/ILogger.cs @@ -0,0 +1,44 @@ +using System; + +namespace Discord.Logging +{ + public interface ILogger + { + LogSeverity Level { get; } + + void Log(LogSeverity severity, string message, Exception exception = null); +#if !NET45 + void Log(LogSeverity severity, FormattableString message, Exception exception = null); +#endif + + void Error(string message, Exception exception = null); +#if !NET45 + void Error(FormattableString message, Exception exception = null); +#endif + void Error(Exception exception); + + void Warning(string message, Exception exception = null); +#if !NET45 + void Warning(FormattableString message, Exception exception = null); +#endif + void Warning(Exception exception); + + void Info(string message, Exception exception = null); +#if !NET45 + void Info(FormattableString message, Exception exception = null); +#endif + void Info(Exception exception); + + void Verbose(string message, Exception exception = null); +#if !NET45 + void Verbose(FormattableString message, Exception exception = null); +#endif + void Verbose(Exception exception); + + void Debug(string message, Exception exception = null); +#if !NET45 + void Debug(FormattableString message, Exception exception = null); +#endif + void Debug(Exception exception); + } +} diff --git a/src/Discord.Net/Logging/Logger.cs b/src/Discord.Net/Logging/Logger.cs index 9d7a6111b..9b2683055 100644 --- a/src/Discord.Net/Logging/Logger.cs +++ b/src/Discord.Net/Logging/Logger.cs @@ -2,7 +2,7 @@ namespace Discord.Logging { - public class Logger + public class Logger : ILogger { private readonly LogManager _manager; diff --git a/src/Discord.Net/Net/Rest/BuiltInEngine.cs b/src/Discord.Net/Net/Rest/BuiltInEngine.cs index 7e422b49a..83d12ec50 100644 --- a/src/Discord.Net/Net/Rest/BuiltInEngine.cs +++ b/src/Discord.Net/Net/Rest/BuiltInEngine.cs @@ -22,15 +22,15 @@ namespace Discord.Net.Rest private readonly string _baseUrl; private readonly AsyncLock _rateLimitLock; + private readonly ILogger _logger; private DateTime _rateLimitTime; - internal Logger Logger { get; } - public BuiltInEngine(DiscordConfig config, string baseUrl, Logger logger) + public BuiltInEngine(DiscordConfig config, string baseUrl, ILogger logger) { _config = config; _baseUrl = baseUrl; - Logger = logger; + _logger = logger; _rateLimitLock = new AsyncLock(); _client = new HttpClient(new HttpClientHandler @@ -100,15 +100,18 @@ namespace Discord.Net.Rest int milliseconds; if (retryAfter != null && int.TryParse(retryAfter, out milliseconds)) { - var now = DateTime.UtcNow; - if (now >= _rateLimitTime) + if (_logger != null) { - using (await _rateLimitLock.LockAsync().ConfigureAwait(false)) + var now = DateTime.UtcNow; + if (now >= _rateLimitTime) { - if (now >= _rateLimitTime) + using (await _rateLimitLock.LockAsync().ConfigureAwait(false)) { - _rateLimitTime = now.AddMilliseconds(milliseconds); - Logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds"); + if (now >= _rateLimitTime) + { + _rateLimitTime = now.AddMilliseconds(milliseconds); + _logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds"); + } } } } diff --git a/src/Discord.Net/Net/Rest/ETFRestClient.cs b/src/Discord.Net/Net/Rest/ETFRestClient.cs index b52da1037..5a2620e89 100644 --- a/src/Discord.Net/Net/Rest/ETFRestClient.cs +++ b/src/Discord.Net/Net/Rest/ETFRestClient.cs @@ -9,7 +9,7 @@ namespace Discord.Net.Rest { private readonly ETFWriter _serializer; - public ETFRestClient(DiscordConfig config, string baseUrl, Logger logger) + public ETFRestClient(DiscordConfig config, string baseUrl, ILogger logger = null) : base(config, baseUrl, logger) { _serializer = new ETFWriter(new MemoryStream()); diff --git a/src/Discord.Net/Net/Rest/JsonRestClient.cs b/src/Discord.Net/Net/Rest/JsonRestClient.cs index 5acfdf595..3aea24115 100644 --- a/src/Discord.Net/Net/Rest/JsonRestClient.cs +++ b/src/Discord.Net/Net/Rest/JsonRestClient.cs @@ -8,7 +8,7 @@ namespace Discord.Net.Rest { private JsonSerializer _serializer; - public JsonRestClient(DiscordConfig config, string baseUrl, Logger logger) + public JsonRestClient(DiscordConfig config, string baseUrl, ILogger logger = null) : base(config, baseUrl, logger) { _serializer = new JsonSerializer(); diff --git a/src/Discord.Net/Net/Rest/RestClient.cs b/src/Discord.Net/Net/Rest/RestClient.cs index 0b6ed5de5..cc525779b 100644 --- a/src/Discord.Net/Net/Rest/RestClient.cs +++ b/src/Discord.Net/Net/Rest/RestClient.cs @@ -38,10 +38,9 @@ namespace Discord.Net.Rest private readonly DiscordConfig _config; private readonly IRestEngine _engine; private readonly ETFWriter _serializer; + private readonly ILogger _logger; private string _token; - internal Logger Logger { get; } - public CancellationToken CancelToken { get; set; } public string Token @@ -54,10 +53,10 @@ namespace Discord.Net.Rest } } - protected RestClient(DiscordConfig config, string baseUrl, Logger logger) + protected RestClient(DiscordConfig config, string baseUrl, ILogger logger = null) { _config = config; - Logger = logger; + _logger = logger; #if !DOTNET5_4 _engine = new RestSharpEngine(config, baseUrl, logger); @@ -65,7 +64,7 @@ namespace Discord.Net.Rest _engine = new BuiltInEngine(config, baseUrl, logger); #endif - if (Logger.Level >= LogSeverity.Verbose) + if (_logger != null && _logger.Level >= LogSeverity.Verbose) { this.SentRequest += (s, e) => { @@ -82,7 +81,7 @@ namespace Discord.Net.Rest log += $" {e.ResponseJson}"; } } - Logger.Verbose(log); + _logger.Verbose(log); }; } } diff --git a/src/Discord.Net/Net/Rest/SharpRestEngine.cs b/src/Discord.Net/Net/Rest/SharpRestEngine.cs index 325808702..a4ae3d392 100644 --- a/src/Discord.Net/Net/Rest/SharpRestEngine.cs +++ b/src/Discord.Net/Net/Rest/SharpRestEngine.cs @@ -19,14 +19,13 @@ namespace Discord.Net.Rest private readonly RestSharpClient _client; private readonly AsyncLock _rateLimitLock; + private readonly ILogger _logger; private DateTime _rateLimitTime; - internal Logger Logger { get; } - - public RestSharpEngine(DiscordConfig config, string baseUrl, Logger logger) + public RestSharpEngine(DiscordConfig config, string baseUrl, ILogger logger) { _config = config; - Logger = logger; + _logger = logger; _rateLimitLock = new AsyncLock(); _client = new RestSharpClient(baseUrl) @@ -89,15 +88,18 @@ namespace Discord.Net.Rest int milliseconds; if (retryAfter != null && int.TryParse((string)retryAfter.Value, out milliseconds)) { - var now = DateTime.UtcNow; - if (now >= _rateLimitTime) + if (_logger != null) { - using (await _rateLimitLock.LockAsync().ConfigureAwait(false)) + var now = DateTime.UtcNow; + if (now >= _rateLimitTime) { - if (now >= _rateLimitTime) + using (await _rateLimitLock.LockAsync().ConfigureAwait(false)) { - _rateLimitTime = now.AddMilliseconds(milliseconds); - Logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds"); + if (now >= _rateLimitTime) + { + _rateLimitTime = now.AddMilliseconds(milliseconds); + _logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds"); + } } } }