[REFACTOR] Refactored logging & added support for Microsoft.Extensions.Logging. Added test WebApi project
This commit is contained in:
63
DotBased.Logging.MEL/BasedLogger.cs
Normal file
63
DotBased.Logging.MEL/BasedLogger.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace DotBased.Logging.MEL;
|
||||
|
||||
public class BasedLogger : Microsoft.Extensions.Logging.ILogger
|
||||
{
|
||||
public BasedLogger(ILogger logger)
|
||||
{
|
||||
basedLogger = logger;
|
||||
}
|
||||
|
||||
private readonly ILogger basedLogger;
|
||||
|
||||
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
|
||||
{
|
||||
if (!IsEnabled(logLevel))
|
||||
return;
|
||||
var severity = ConvertLogLevelToSeverity(logLevel);
|
||||
var capsule = ConstructCapsule(severity, eventId, state, exception, formatter);
|
||||
basedLogger.Log(capsule);
|
||||
}
|
||||
|
||||
private LogCapsule ConstructCapsule<TState>(LogSeverity severity, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
|
||||
{
|
||||
//TODO: Extract parameters & format
|
||||
if (state is IEnumerable<KeyValuePair<string, object>> stateEnum)
|
||||
{
|
||||
foreach (var prop in stateEnum)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return new LogCapsule()
|
||||
{
|
||||
Exception = exception,
|
||||
Message = formatter.Invoke(state, exception),
|
||||
Parameters = [],
|
||||
Severity = severity,
|
||||
TimeStamp = DateTime.Now,
|
||||
Logger = basedLogger as LoggerBase ?? throw new NullReferenceException(nameof(basedLogger))
|
||||
};
|
||||
}
|
||||
|
||||
private LogSeverity ConvertLogLevelToSeverity(LogLevel level)
|
||||
{
|
||||
return level switch
|
||||
{
|
||||
LogLevel.Trace => LogSeverity.Trace,
|
||||
LogLevel.Debug => LogSeverity.Debug,
|
||||
LogLevel.Information => LogSeverity.Info,
|
||||
LogLevel.Warning => LogSeverity.Warning,
|
||||
LogLevel.Error => LogSeverity.Error,
|
||||
LogLevel.Critical => LogSeverity.Fatal,
|
||||
LogLevel.None => LogSeverity.Ignore,
|
||||
_ => LogSeverity.Verbose
|
||||
};
|
||||
}
|
||||
|
||||
public bool IsEnabled(LogLevel logLevel) => logLevel != LogLevel.None;
|
||||
|
||||
public IDisposable? BeginScope<TState>(TState state) where TState : notnull => default;
|
||||
}
|
23
DotBased.Logging.MEL/BasedLoggerProvider.cs
Normal file
23
DotBased.Logging.MEL/BasedLoggerProvider.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace DotBased.Logging.MEL;
|
||||
|
||||
public class BasedLoggerProvider : ILoggerProvider
|
||||
{
|
||||
public BasedLoggerProvider(LogOptions options)
|
||||
{
|
||||
Options = options;
|
||||
}
|
||||
|
||||
private readonly LogOptions Options;
|
||||
|
||||
public Microsoft.Extensions.Logging.ILogger CreateLogger(string categoryName)
|
||||
{
|
||||
return new BasedLogger(Options.LoggerBuilder.Invoke(new LoggerInformation(typeof(BasedLoggerProvider)), categoryName));
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
18
DotBased.Logging.MEL/DotBased.Logging.MEL.csproj
Normal file
18
DotBased.Logging.MEL/DotBased.Logging.MEL.csproj
Normal file
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>12</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DotBased\DotBased.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
14
DotBased.Logging.MEL/LoggerBuilderExtensions.cs
Normal file
14
DotBased.Logging.MEL/LoggerBuilderExtensions.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace DotBased.Logging.MEL;
|
||||
|
||||
public static class LoggerBuilderExtensions
|
||||
{
|
||||
public static ILoggingBuilder AddDotBased(this ILoggingBuilder builder, LogOptions options)
|
||||
{
|
||||
if (builder == null)
|
||||
throw new ArgumentNullException(nameof(builder));
|
||||
builder.AddProvider(new BasedLoggerProvider(options));
|
||||
return builder;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user