mirror of
https://github.com/AlexMacocian/SystemExtensions.git
synced 2026-07-15 14:19:29 +00:00
ScopedLogger with implicit member name
Include NetStandard in NetCore
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Logging;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace System.Extensions.Core;
|
||||
public static class LoggingExtensions
|
||||
{
|
||||
public static ScopedLogger<T> CreateScopedLogger<T>(this ILogger<T> logger, string flowIdentifier, [CallerMemberName] string? methodName = default)
|
||||
{
|
||||
return ScopedLogger<T>.Create(logger, methodName ?? string.Empty, flowIdentifier);
|
||||
}
|
||||
|
||||
public static ScopedLogger<T> CreateScopedLogger<T>(this ILogger<T> logger, [CallerMemberName] string? methodName = default)
|
||||
{
|
||||
return ScopedLogger<T>.Create(logger, methodName ?? string.Empty, string.Empty);
|
||||
}
|
||||
}
|
||||
@@ -3,15 +3,15 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
<Version>1.0.1</Version>
|
||||
<Authors>Alexandru Macocian</Authors>
|
||||
<RepositoryUrl>https://github.com/AlexMacocian/SystemExtensions</RepositoryUrl>
|
||||
<Description>Extensions for the System namespace</Description>
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
<Version>1.6.5</Version>
|
||||
<Authors>Alexandru Macocian</Authors>
|
||||
<RepositoryUrl>https://github.com/AlexMacocian/SystemExtensions</RepositoryUrl>
|
||||
<Description>Extensions for the System namespace</Description>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -21,4 +21,7 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,260 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using SystemExtensions.NetStandard.Tests.Logging.Models;
|
||||
using System.Extensions.Core;
|
||||
using FluentAssertions;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Logging.Core.Tests;
|
||||
|
||||
[TestClass]
|
||||
public class CoreScopedLoggerTests
|
||||
{
|
||||
private const string Flow = "Flow";
|
||||
private const string Message = "Some message";
|
||||
private readonly CachingLogger<CoreScopedLoggerTests> cachingLogger = new();
|
||||
|
||||
[TestMethod]
|
||||
public void CreateLogger_CreatesNewLogger()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
scopedLogger.Should().BeOfType<ScopedLogger<CoreScopedLoggerTests>>();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CreateLogger_NullFlow_ReturnsScopedLogger()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: null);
|
||||
scopedLogger.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogInformation_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogInformation_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogInformation(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogInformation_EmptyFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: string.Empty);
|
||||
var expectedMessage = $"{nameof(this.LogInformation_EmptyFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogInformation(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogInformation_WhitespaceFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: " ");
|
||||
var expectedMessage = $"{nameof(this.LogInformation_WhitespaceFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogInformation(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogDebug_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogDebug_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogDebug(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogDebug_EmptyFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: string.Empty);
|
||||
var expectedMessage = $"{nameof(this.LogDebug_EmptyFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogDebug(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogDebug_WhitespaceFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: " ");
|
||||
var expectedMessage = $"{nameof(this.LogDebug_WhitespaceFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogDebug(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogWarning_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogWarning_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogWarning(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogWarning_EmptyFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: string.Empty);
|
||||
var expectedMessage = $"{nameof(this.LogWarning_EmptyFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogWarning(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogWarning_WhitespaceFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: " ");
|
||||
var expectedMessage = $"{nameof(this.LogWarning_WhitespaceFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogWarning(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogError_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogError_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogError(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogError_EmptyFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: string.Empty);
|
||||
var expectedMessage = $"{nameof(this.LogError_EmptyFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogError(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogError_WhitespaceFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: " ");
|
||||
var expectedMessage = $"{nameof(this.LogError_WhitespaceFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogError(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogCritical_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogCritical_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogCritical(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogCritical_EmptyFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: string.Empty);
|
||||
var expectedMessage = $"{nameof(this.LogCritical_EmptyFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogCritical(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogCritical_WhitespaceFlow_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: " ");
|
||||
var expectedMessage = $"{nameof(this.LogCritical_WhitespaceFlow_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogCritical(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogWarning_WithException_LogsExpected()
|
||||
{
|
||||
var exception = new Exception();
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogWarning_WithException_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogWarning(exception, Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogError_WithException_LogsExpected()
|
||||
{
|
||||
var exception = new Exception();
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogError_WithException_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogError(exception, Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void LogCritical_WithException_LogsExpected()
|
||||
{
|
||||
var exception = new Exception();
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger(flowIdentifier: Flow);
|
||||
var expectedMessage = $"[{Flow}] {nameof(this.LogCritical_WithException_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogCritical(exception, Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Log_WithImplicitMethodName_LogsExpected()
|
||||
{
|
||||
var scopedLogger = this.cachingLogger.CreateScopedLogger();
|
||||
var expectedMessage = $"{nameof(this.Log_WithImplicitMethodName_LogsExpected)}: {Message}";
|
||||
|
||||
scopedLogger.LogInformation(Message);
|
||||
|
||||
this.cachingLogger.LogCache.Should().HaveCount(1);
|
||||
this.cachingLogger.LogCache.First().Should().Be(expectedMessage);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
@@ -6,6 +6,10 @@
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Logging\CoreScopedLoggerTests.cs~RF2747aada.TMP" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="6.12.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
||||
|
||||
Reference in New Issue
Block a user