Skip to content

Commit 1327a8f

Browse files
committed
configSetting - Stripped down dependencies to only Microsoft.Extensions.Configuration.Abstractions
1 parent 8f2a7c4 commit 1327a8f

File tree

13 files changed

+278
-271
lines changed

13 files changed

+278
-271
lines changed

examples/NetCore2/ConsoleExample/ConsoleExample.csproj

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
1213
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
13-
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.1" />
1414
</ItemGroup>
1515

1616
<ItemGroup>
17-
<ProjectReference Include="..\..\..\src\NLog.Extensions.Logging\NLog.Extensions.Logging.csproj" />
17+
<ProjectReference Include="..\..\..\src\NLog.Extensions.Configuration\NLog.Extensions.Configuration.csproj" />
1818
</ItemGroup>
1919

2020
<ItemGroup>
21+
<None Update="appsettings.json">
22+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
23+
</None>
2124
<None Update="nlog.config">
2225
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
2326
</None>

examples/NetCore2/ConsoleExample/Program.cs

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.Configuration;
2+
using Microsoft.Extensions.DependencyInjection;
23
using Microsoft.Extensions.Logging;
34
using NLog;
45
using NLog.Extensions.Logging;
56
using System;
6-
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
77

88
namespace ConsoleExample
99
{
@@ -46,19 +46,21 @@ private static IServiceProvider BuildDi()
4646

4747
services.AddSingleton<ILoggerFactory, LoggerFactory>();
4848
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
49-
services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Trace));
5049

51-
var serviceProvider = services.BuildServiceProvider();
52-
53-
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
50+
var config = new ConfigurationBuilder()
51+
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
52+
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
53+
.Build();
5454

5555
// configure NLog
56-
loggerFactory.AddNLog(new NLogProviderOptions
56+
services.AddLogging(loggingBuilder =>
5757
{
58-
CaptureMessageTemplates = true,
59-
CaptureMessageProperties = true
58+
loggingBuilder.ClearProviders();
59+
loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
60+
loggingBuilder.AddNLog(config);
6061
});
6162

63+
var serviceProvider = services.BuildServiceProvider();
6264
return serviceProvider;
6365
}
6466
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"NLog": {
4+
"IncludeScopes": false,
5+
"ParseMessageTemplates": false,
6+
"CaptureMessageProperties": true
7+
}
8+
}
9+
}

src/NLog.Extensions.Configuration/ConfigSettingLayoutRenderer.cs

-184
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using System;
2+
using System.Linq;
3+
using System.Reflection;
4+
using Microsoft.Extensions.Logging;
5+
using Microsoft.Extensions.Configuration;
6+
using NLog.Common;
7+
using NLog.Config;
8+
9+
namespace NLog.Extensions.Logging
10+
{
11+
/// <summary>
12+
/// Helpers for .NET Core
13+
/// </summary>
14+
public static class ConfigureExtensions
15+
{
16+
/// <summary>
17+
/// Enable NLog as logging provider in .NET Core.
18+
/// </summary>
19+
/// <param name="factory"></param>
20+
/// <param name="configuration"></param>
21+
/// <returns>ILoggerFactory for chaining</returns>
22+
public static ILoggerFactory AddNLog(this ILoggerFactory factory, IConfiguration configuration)
23+
{
24+
return AddNLog(factory, configuration, null);
25+
}
26+
27+
/// <summary>
28+
/// Enable NLog as logging provider in .NET Core.
29+
/// </summary>
30+
/// <param name="factory"></param>
31+
/// <param name="configuration">Configuration</param>
32+
/// <param name="options">NLog options</param>
33+
/// <returns>ILoggerFactory for chaining</returns>
34+
public static ILoggerFactory AddNLog(this ILoggerFactory factory, IConfiguration configuration, NLogProviderOptions options)
35+
{
36+
ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(Configuration.ConfigSettingLayoutRenderer).GetTypeInfo().Assembly);
37+
var provider = new NLogLoggerProvider(options);
38+
if (configuration != null)
39+
{
40+
ConfigureLoggerPovider(configuration, provider);
41+
}
42+
factory.AddProvider(provider);
43+
return factory;
44+
}
45+
46+
/// <summary>
47+
///
48+
/// </summary>
49+
/// <param name="configuration"></param>
50+
/// <param name="provider"></param>
51+
public static void ConfigureLoggerPovider(IConfiguration configuration, NLogLoggerProvider provider)
52+
{
53+
Configuration.ConfigSettingLayoutRenderer.DefaultConfiguration = configuration;
54+
var configValues = configuration?.GetSection("Logging:NLog")?.GetChildren()?.ToList();
55+
if (configValues == null || configValues.Count == 0)
56+
configValues = configuration?.GetSection("NLog")?.GetChildren()?.ToList();
57+
58+
if (configValues?.Count > 0)
59+
{
60+
var options = provider.Options;
61+
System.Collections.Generic.Dictionary<string, PropertyInfo> configProps = null;
62+
foreach (var configValue in configValues)
63+
{
64+
configProps = configProps ?? options.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.SetMethod?.IsPublic == true).ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);
65+
66+
if (configProps.TryGetValue(configValue.Key, out var propertyInfo))
67+
{
68+
try
69+
{
70+
var result = Convert.ChangeType(configValue.Value, propertyInfo.PropertyType);
71+
propertyInfo.SetMethod.Invoke(options, new[] { result });
72+
}
73+
catch (Exception ex)
74+
{
75+
InternalLogger.Warn(ex, "NLogProviderOptions: Property {0} could not be assigned value: {1}", configValue.Key, configValue.Value);
76+
}
77+
}
78+
}
79+
}
80+
}
81+
82+
#if !NETCORE1_0
83+
/// <summary>
84+
/// Enable NLog as logging provider in .NET Core.
85+
/// </summary>
86+
/// <param name="factory"></param>
87+
/// <param name="configuration">Configuration</param>
88+
/// <returns>ILoggerFactory for chaining</returns>
89+
public static ILoggingBuilder AddNLog(this ILoggingBuilder factory, IConfiguration configuration)
90+
{
91+
return AddNLog(factory, configuration, null);
92+
}
93+
94+
/// <summary>
95+
/// Enable NLog as logging provider in .NET Core.
96+
/// </summary>
97+
/// <param name="factory"></param>
98+
/// <param name="configuration">Configuration</param>
99+
/// <param name="options">NLog options</param>
100+
/// <returns>ILoggerFactory for chaining</returns>
101+
public static ILoggingBuilder AddNLog(this ILoggingBuilder factory, IConfiguration configuration, NLogProviderOptions options)
102+
{
103+
ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(Configuration.ConfigSettingLayoutRenderer).GetTypeInfo().Assembly);
104+
var loggerProvider = new NLogLoggerProvider(options);
105+
if (configuration != null)
106+
{
107+
ConfigureLoggerPovider(configuration, loggerProvider);
108+
}
109+
factory.AddProvider(loggerProvider);
110+
return factory;
111+
}
112+
#endif
113+
}
114+
}

0 commit comments

Comments
 (0)