Skip to content

Commit

Permalink
Merge pull request #610 from mbbsemu/microsoft-logging-compat
Browse files Browse the repository at this point in the history
Add Microsoft Logger Support
  • Loading branch information
paladine authored Dec 10, 2023
2 parents 01b8652 + 2c21eee commit 22d11c3
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 3 deletions.
2 changes: 1 addition & 1 deletion MBBSEmu/Logging/IMessageLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace MBBSEmu.Logging
{
public interface IMessageLogger
public interface IMessageLogger : ILogger
{
void Log(LogLevel logLevel, string message, Exception exception = null);
void Debug(string message);
Expand Down
54 changes: 52 additions & 2 deletions MBBSEmu/Logging/MessageLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,18 @@ namespace MBBSEmu.Logging
/// </summary>
public class MessageLogger : LoggerBase, IMessageLogger
{
public MessageLogger() { }
/// <summary>
/// Default Constructor (Console Target)
/// </summary>
public MessageLogger()
{
AddTarget(new ConsoleTarget());
}

/// <summary>
/// Constructor with specified Logging Target
/// </summary>
/// <param name="target"></param>
public MessageLogger(ILoggingTarget target)
{
AddTarget(target);
Expand All @@ -27,7 +37,7 @@ public MessageLogger(ILoggingTarget target)
public void Log(LogLevel logLevel, string message, Exception exception = null)
{
//Ignore Message if it's below the configured log level
if((int)logLevel < (int)ConfiguredLogLevel)
if(!IsEnabled(logLevel))
return;

//Write to all Logging Targets
Expand Down Expand Up @@ -57,5 +67,45 @@ public void Log(LogLevel logLevel, string message, Exception exception = null)
public void Error(Exception exception, string message) => Log(LogLevel.Error, $"{message} - {exception.Message}");

public void Error(Exception exception) => Log(LogLevel.Error, exception.Message);

/// <summary>
/// ILogger implementation for Microsoft.Extensions.Logging to log a message
/// </summary>
/// <typeparam name="TState"></typeparam>
/// <param name="logLevel"></param>
/// <param name="eventId"></param>
/// <param name="state"></param>
/// <param name="exception"></param>
/// <param name="formatter"></param>
/// <exception cref="ArgumentNullException"></exception>
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
ArgumentNullException.ThrowIfNull(formatter);

if (!IsEnabled(logLevel))
return;

var message = formatter(state, exception);

Log(logLevel, message, exception);
}

/// <summary>
/// ILogger implementation for Microsoft.Extensions.Logging to determine if the message can be logged based on the log level
/// </summary>
/// <param name="logLevel"></param>
/// <returns></returns>
public bool IsEnabled(LogLevel logLevel) => (int)logLevel >= (int)ConfiguredLogLevel;

/// <summary>
/// ILogger implementation for Microsoft.Extensions.Logging to begin a new scope
/// </summary>
/// <typeparam name="TState"></typeparam>
/// <param name="state"></param>
/// <returns></returns>
public IDisposable BeginScope<TState>(TState state) where TState : notnull
{
return null;
}
}
}
20 changes: 20 additions & 0 deletions MBBSEmu/Logging/Providers/MessageLoggerProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Microsoft.Extensions.Logging;

namespace MBBSEmu.Logging.Providers
{
/// <summary>
/// Provides a MessageLogger for Microsoft.Extensions.Logging
/// </summary>
public class MessageLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName)
{
return new MessageLogger();
}

public void Dispose()
{
// Dispose any resources if needed
}
}
}

0 comments on commit 22d11c3

Please sign in to comment.