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