Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ private IEnumerable<ILoggingConfigurationElement> GetChildren(IEnumerable<IConfi
}
}

private IEnumerable<IConfigurationSection> GetVariablesChildren(IConfigurationSection variables)
private static IEnumerable<IConfigurationSection> GetVariablesChildren(IConfigurationSection variables)
{
List<KeyValuePair<string, IConfigurationSection>> sortVariables = null;
foreach (var variable in variables.GetChildren())
Expand Down
47 changes: 46 additions & 1 deletion src/NLog.Extensions.Logging/Extensions/ConfigureExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Microsoft.Extensions.Configuration;
#if !NETCORE1_0
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
#endif
using Microsoft.Extensions.Logging;
using NLog.Common;
Expand Down Expand Up @@ -197,6 +196,52 @@ public static ILoggingBuilder AddNLog(this ILoggingBuilder builder, NLogProvider
return builder;
}

/// <summary>
/// Enable NLog as logging provider for Microsoft Extension Logging
/// </summary>
/// <param name="collection"></param>
/// <returns>IServiceCollection for chaining</returns>
public static IServiceCollection AddNLog(this IServiceCollection collection)
{
return AddNLog(collection, NLogProviderOptions.Default);
}

/// <summary>
/// Enable NLog as logging provider for Microsoft Extension Logging
/// </summary>
/// <param name="collection"></param>
/// <param name="options">NLog Logging Provider options</param>
/// <returns>IServiceCollection for chaining</returns>
public static IServiceCollection AddNLog(this IServiceCollection collection, NLogProviderOptions options)
{
Guard.ThrowIfNull(collection);
collection.TryAddNLogLoggingProvider((svc, addlogging) => svc.AddLogging(addlogging), null, options, CreateNLogLoggerProvider);
return collection;
}

/// <summary>
/// Enable NLog as logging provider for Microsoft Extension Logging
/// </summary>
/// <param name="collection"></param>
/// <param name="options">NLog Logging Provider options</param>
/// <param name="factoryBuilder">Initialize NLog LogFactory with NLog LoggingConfiguration.</param>
/// <returns>IServiceCollection for chaining</returns>
public static IServiceCollection AddNLog(this IServiceCollection collection, NLogProviderOptions options, Func<IServiceProvider, LogFactory> factoryBuilder)
{
Guard.ThrowIfNull(collection);
Guard.ThrowIfNull(factoryBuilder);
collection.TryAddNLogLoggingProvider((svc, addlogging) => svc.AddLogging(addlogging), null, options, (serviceProvider, config, opt) =>
{
config = serviceProvider.SetupNLogConfigSettings(config, LogManager.LogFactory);

// Delay initialization of targets until we have loaded config-settings
var logFactory = factoryBuilder(serviceProvider);
var provider = CreateNLogLoggerProvider(serviceProvider, config, opt, logFactory);
return provider;
});
return collection;
}

private static void AddNLogLoggerProvider(ILoggingBuilder builder, IConfiguration hostConfiguration, NLogProviderOptions options, Func<IServiceProvider, IConfiguration, NLogProviderOptions, NLogLoggerProvider> factory)
{
builder.Services.TryAddNLogLoggingProvider((svc, addlogging) => addlogging(builder), hostConfiguration, options, factory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
{
using System;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Configuration;
#if !NETCORE1_0
using Microsoft.Extensions.DependencyInjection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,46 @@ public void AddNLog_ReplaceLoggerFactory()
Assert.Equal(typeof(NLogLoggerProvider), loggerProvider.GetType());
}

[Fact]
public void AddNLog_ServiceCollection_ReplaceLoggerFactory()
{
// Arrange
var collection = new ServiceCollection();

// Act
collection.AddNLog(new NLogProviderOptions() { ReplaceLoggerFactory = true });

// Assert
using var provider = collection.BuildServiceProvider();
var loggerFactory = provider.GetService<ILoggerFactory>();
Assert.NotNull(loggerFactory);
Assert.Equal(typeof(NLogLoggerFactory), loggerFactory.GetType());
}

[Fact]
public void AddNLog_ServiceCollection_ShouldLog()
{
// Arrange
var collection = new ServiceCollection();

// Act
var nlogTarget = new Targets.MemoryTarget() { Name = "Output" };
collection.AddNLog(new NLogProviderOptions(), (ServiceProvider) =>
{
var nLogFactory = new LogFactory().Setup().LoadConfiguration(c => c.ForLogger().WriteTo(nlogTarget)).LogFactory;
return nLogFactory;
});

// Assert
using var provider = collection.BuildServiceProvider();
var loggerFactory = provider.GetService<ILoggerFactory>();
Assert.NotNull(loggerFactory);

var logger = loggerFactory.CreateLogger("Hello");
logger.LogCritical("World");
Assert.Single(nlogTarget.Logs);
}

[Fact]
public void AddNLog_ArgumentNullException()
{
Expand Down