Skip to content

Commit

Permalink
CallSite should recognize all Microsoft.Extensions.Logging.ILogger
Browse files Browse the repository at this point in the history
  • Loading branch information
snakefoot committed Mar 8, 2018
1 parent 5bba8c6 commit 000b4ba
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 43 deletions.
2 changes: 1 addition & 1 deletion src/NLog.Extensions.Logging/Logging/NLogLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId
CaptureMessageProperties(eventInfo, state);
}

_logger.Log(eventInfo);
_logger.Log(typeof(Microsoft.Extensions.Logging.ILogger), eventInfo);
}


Expand Down
23 changes: 8 additions & 15 deletions src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

<TargetFrameworks>net451;net461;netstandard1.5;netstandard2.0</TargetFrameworks>
<TargetFrameworks>net451;net461;netstandard1.3;netstandard1.5;netstandard2.0</TargetFrameworks>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>

Expand Down Expand Up @@ -43,6 +43,11 @@ rc3: Support for .NET 4.6.1, support for message templates .NET standard 1.5+ an
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<DefineConstants>$(DefineConstants);NETCORE1_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<Title>NLog.Extensions.Logging for NetStandard 1.3</Title>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
<DefineConstants>$(DefineConstants);NETCORE1_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.5' ">
<Title>NLog.Extensions.Logging for NetStandard 1.5</Title>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
Expand All @@ -51,20 +56,8 @@ rc3: Support for .NET 4.6.1, support for message templates .NET standard 1.5+ an
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<Title>NLog.Extensions.Logging for NetStandard 2.0</Title>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'uap10.0' ">
<Title>NLog.Extensions.Logging for UWP</Title>
<NugetTargetMoniker>UAP,Version=v10.0</NugetTargetMoniker>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
<TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.15083.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
<DefineConstants>$(DefineConstants);NETCORE1_0</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="[4.5.0-rc06,5)" />
<PackageReference Include="NLog" Version="[4.5.0-rc07,5)" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net451' ">
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.0.2" />
Expand All @@ -76,7 +69,7 @@ rc3: Support for .NET 4.6.1, support for message templates .NET standard 1.5+ an
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'uap10.0' ">
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.0.2" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.5' ">
Expand Down
73 changes: 73 additions & 0 deletions test/CustomLoggerCallSiteTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit;

namespace NLog.Extensions.Logging.Tests
{
public class CustomLoggerCallSiteTest : NLogTestBase
{
[Fact]
public void TestCallSite()
{
ConfigureServiceProvider<CustomLoggerCallSiteTestRunner>((s) => s.AddSingleton(typeof(ILogger<>), typeof(SameAssemblyLogger<>)));
var runner = GetRunner<CustomLoggerCallSiteTestRunner>();

var target = new NLog.Targets.MemoryTarget() { Layout = "${callsite}|${message}" };
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target);
runner.SayHello();
Assert.Single(target.Logs);
Assert.Contains("SayHello", target.Logs[0]);
Assert.Contains("stuff", target.Logs[0]);
}

public class SameAssemblyLogger<T> : ILogger<T>
{
private readonly Microsoft.Extensions.Logging.ILogger _logger;

public SameAssemblyLogger(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<T>();
}

public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception exception,
Func<TState, Exception, string> formatter)
{
string Formatter(TState innserState, Exception innerException)
{
// additional logic for all providers goes here
var message = formatter(innserState, innerException) ?? string.Empty;
return message + " additional stuff in here";
}

_logger.Log(logLevel, eventId, state, exception, Formatter);
}

public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel)
{
return _logger.IsEnabled(logLevel);
}

public IDisposable BeginScope<TState>(TState state)
{
return _logger.BeginScope(state);
}
}

public class CustomLoggerCallSiteTestRunner
{
private readonly ILogger<CustomLoggerCallSiteTestRunner> _logger;

public CustomLoggerCallSiteTestRunner(ILogger<CustomLoggerCallSiteTestRunner> logger)
{
_logger = logger;
}

public void SayHello()
{
_logger.LogInformation("Hello");
}
}

}
}
34 changes: 7 additions & 27 deletions test/LoggerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@

namespace NLog.Extensions.Logging.Tests
{
public class LoggerTests
public class LoggerTests : NLogTestBase
{
private static Lazy<IServiceProvider> ServiceProvider = new Lazy<IServiceProvider>(BuildDi);

public LoggerTests()
{
var target = GetTarget();
Expand Down Expand Up @@ -144,7 +142,7 @@ public void TestExceptionWithNullMessage(Microsoft.Extensions.Logging.LogLevel l
[InlineData(Microsoft.Extensions.Logging.LogLevel.Warning, "NLog.Extensions.Logging.Tests.LoggerTests.Runner|WARN|message |20")]
public void TestMessageWithNullException(Microsoft.Extensions.Logging.LogLevel logLevel, string expectedLogMessage)
{
GetRunner().Log(logLevel, 20, null, "message");
GetRunner<Runner>().Log(logLevel, 20, null, "message");

var target = GetTarget();
Assert.Equal(expectedLogMessage, target.Logs.FirstOrDefault());
Expand Down Expand Up @@ -180,43 +178,25 @@ public void TestWithEmptyMessageAndNullException(Microsoft.Extensions.Logging.Lo
Assert.Equal(expectedLogMessage, target.Logs.FirstOrDefault());
}

private static Runner GetRunner()
{
var serviceProvider = ServiceProvider.Value;

// Start program
var runner = serviceProvider.GetRequiredService<Runner>();
return runner;
}

private static MemoryTarget GetTarget()
{
var target = LogManager.Configuration.FindTargetByName<MemoryTarget>("target1");
return target;
}

private static IServiceProvider BuildDi()
private Runner GetRunner()
{
var services = new ServiceCollection();

services.AddTransient<Runner>();
services.AddSingleton<ILoggerFactory, LoggerFactory>();

var serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

loggerFactory.AddNLog(new NLogProviderOptions() { CaptureMessageTemplates = true, CaptureMessageProperties = true });
loggerFactory.ConfigureNLog("nlog.config");
return serviceProvider;
base.ConfigureServiceProvider<Runner>((s) => LogManager.LoadConfiguration("nlog.config"));
return base.GetRunner<Runner>();
}

public class Runner
{
private readonly ILogger<Runner> _logger;

public Runner(ILoggerFactory fac)
public Runner(ILogger<Runner> logger)
{
_logger = fac.CreateLogger<Runner>();
_logger = logger;
}

public void LogDebugWithId()
Expand Down
39 changes: 39 additions & 0 deletions test/NLogTestBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace NLog.Extensions.Logging.Tests
{
public class NLogTestBase
{
IServiceProvider _serviceProvider;

protected IServiceProvider ConfigureServiceProvider<T>(Action<ServiceCollection> configureServices = null, NLogProviderOptions options = null) where T : class
{
if (_serviceProvider == null)
{
var services = new ServiceCollection();

services.AddTransient<T>();
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
configureServices?.Invoke(services);

_serviceProvider = services.BuildServiceProvider();

var loggerFactory = _serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog(options ?? new NLogProviderOptions() { CaptureMessageTemplates = true, CaptureMessageProperties = true });
}
return _serviceProvider;
}

protected T GetRunner<T>(NLogProviderOptions options = null) where T : class
{
// Start program
var runner = ConfigureServiceProvider<T>(null, options).GetRequiredService<T>();
return runner;
}
}
}
14 changes: 14 additions & 0 deletions test/Properties/AssemblyInfo-test.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

[assembly: Xunit.CollectionBehavior(DisableTestParallelization = true)]

0 comments on commit 000b4ba

Please sign in to comment.