diff --git a/DiscordRPC/DiscordRPC.csproj b/DiscordRPC/DiscordRPC.csproj index 1c96ae35..65771d7d 100644 --- a/DiscordRPC/DiscordRPC.csproj +++ b/DiscordRPC/DiscordRPC.csproj @@ -8,11 +8,15 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml true + + DISABLE_MSLOGGEREXTENSION + + diff --git a/DiscordRPC/DiscordRpcClient.cs b/DiscordRPC/DiscordRpcClient.cs index 1c58df9c..04c61d0b 100644 --- a/DiscordRPC/DiscordRpcClient.cs +++ b/DiscordRPC/DiscordRpcClient.cs @@ -7,6 +7,10 @@ using DiscordRPC.RPC; using DiscordRPC.RPC.Commands; using System; +#if !DISABLE_MSLOGGEREXTENSION +using Hi3Helper.SharpDiscordRPC.DiscordRPC.Logging; +using ILoggerMs = Microsoft.Extensions.Logging.ILogger; +#endif namespace DiscordRPC { @@ -206,6 +210,15 @@ public bool ShutdownOnly /// The ID of the application created at discord's developers portal. public DiscordRpcClient(string applicationID) : this(applicationID, -1) { } +#if !DISABLE_MSLOGGEREXTENSION + /// + /// Creates a new Discord RPC Client which can be used to send Rich Presence and receive Join / Spectate events. + /// + /// The ID of the application created at discord's developers portal. + /// The logger used to report messages. Uses Microsoft's implementation of logging extension + public DiscordRpcClient(string applicationID, ILoggerMs logger) : this(applicationID, -1, new MsILoggerWrapper(logger)) { } +#endif + /// /// Creates a new Discord RPC Client which can be used to send Rich Presence and receive Join / Spectate events. This constructor exposes more advance features such as custom NamedPipeClients and Loggers. /// @@ -249,7 +262,7 @@ public DiscordRpcClient(string applicationID, int pipe = -1, ILogger logger = nu }; } - #endregion +#endregion #region Message Handling /// diff --git a/DiscordRPC/Logging/MsILoggerWrapper.cs b/DiscordRPC/Logging/MsILoggerWrapper.cs new file mode 100644 index 00000000..2a5078d4 --- /dev/null +++ b/DiscordRPC/Logging/MsILoggerWrapper.cs @@ -0,0 +1,89 @@ +#if !DISABLE_MSLOGGEREXTENSION +using System; +using Microsoft.Extensions.Logging; +using ILogger = Microsoft.Extensions.Logging.ILogger; +using ILoggerRpc = DiscordRPC.Logging.ILogger; +using LogLevel = DiscordRPC.Logging.LogLevel; + +namespace Hi3Helper.SharpDiscordRPC.DiscordRPC.Logging +{ + /// + /// Wraps a to a + /// + public class MsILoggerWrapper : ILoggerRpc + { + private readonly ILogger _logger; + + /// + /// Creates a new instance of the MsILoggerWrapper + /// + /// + /// Logger interface to be wrapped + public MsILoggerWrapper(ILogger logger) + { + _logger = logger; + } + + private static string FormatMessage(string message, params object[] args) + { + return string.Format(message, args); + } + + /// + /// The level of logging to apply to this logger. + /// + public LogLevel Level { get; set; } + + /// + /// Formats and writes a trace log message. + /// + /// + /// + public void Trace(string message, params object[] args) + { + _logger.LogTrace(FormatMessage(message), args); + } + + /// + /// Informative log messages + /// + /// + /// + public void Info(string message, params object[] args) + { + _logger.LogInformation(FormatMessage(message), args); + } + + /// + /// Warning log messages + /// + /// + /// + public void Warning(string message, params object[] args) + { + _logger.LogWarning(FormatMessage(message), args); + } + + /// + /// Error log messages + /// + /// + /// + public void Error(string message, params object[] args) + { + _logger.LogError(FormatMessage(message), args); + } + + /// + /// Error log messages + /// + /// + /// + /// + public void Error(Exception ex, string message, params object[] args) + { + _logger.LogError(ex, FormatMessage(message), args); + } + } +} +#endif \ No newline at end of file