Skip to content

Commit 945289f

Browse files
committed
Integrate with LoggerProviderCollection
1 parent a2c1d9c commit 945289f

File tree

6 files changed

+73
-14
lines changed

6 files changed

+73
-14
lines changed

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "2.0.0"
3+
"version": "2.2.105"
44
}
55
}

samples/SimpleWebSample/SimpleWebSample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk.Web">
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
22
<PropertyGroup>
33
<TargetFramework>netcoreapp2.0</TargetFramework>
44
</PropertyGroup>

serilog-aspnetcore.sln.DotSettings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:Boolean x:Key="/Default/UserDictionary/Words/=Serilog/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

src/Serilog.AspNetCore/AspNetCore/SerilogLoggerFactory.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15+
using System;
1516
using Microsoft.Extensions.Logging;
1617
using Serilog.Debugging;
1718
using Serilog.Extensions.Logging;
@@ -21,6 +22,7 @@ namespace Serilog.AspNetCore
2122
/// <summary>
2223
/// Implements <see cref="ILoggerFactory"/> so that we can inject Serilog Logger.
2324
/// </summary>
25+
[Obsolete("Replaced with Serilog.Extensions.Logging.SerilogLoggerFactory")]
2426
public class SerilogLoggerFactory : ILoggerFactory
2527
{
2628
private readonly SerilogLoggerProvider _provider;

src/Serilog.AspNetCore/Serilog.AspNetCore.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Description>Serilog support for ASP.NET Core logging</Description>
5-
<VersionPrefix>2.1.2</VersionPrefix>
5+
<VersionPrefix>3.0.0</VersionPrefix>
66
<Authors>Microsoft;Serilog Contributors</Authors>
77
<TargetFrameworks>netstandard2.0</TargetFrameworks>
88
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
@@ -23,8 +23,8 @@
2323
</PropertyGroup>
2424

2525
<ItemGroup>
26-
<PackageReference Include="Serilog" Version="2.5.0" />
27-
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.0" />
26+
<PackageReference Include="Serilog" Version="2.8.0" />
27+
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.0-*" />
2828
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.0.0" />
2929
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
3030
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />

src/Serilog.AspNetCore/SerilogWebHostBuilderExtensions.cs

Lines changed: 64 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
using System;
1616
using Microsoft.AspNetCore.Hosting;
1717
using Microsoft.Extensions.Logging;
18-
using Serilog.AspNetCore;
18+
using Serilog.Extensions.Logging;
1919
using Microsoft.Extensions.DependencyInjection;
2020

2121
namespace Serilog
@@ -33,12 +33,38 @@ public static class SerilogWebHostBuilderExtensions
3333
/// <param name="dispose">When true, dispose <paramref name="logger"/> when the framework disposes the provider. If the
3434
/// logger is not specified but <paramref name="dispose"/> is true, the <see cref="Log.CloseAndFlush()"/> method will be
3535
/// called on the static <see cref="Log"/> class instead.</param>
36+
/// <param name="providers">A <see cref="LoggerProviderCollection"/> registered in the Serilog pipeline using the
37+
/// <c>WriteTo.Providers()</c> configuration method, enabling other <see cref="ILoggerProvider"/>s to receive events. By
38+
/// default, only Serilog sinks will receive events.</param>
3639
/// <returns>The web host builder.</returns>
37-
public static IWebHostBuilder UseSerilog(this IWebHostBuilder builder, Serilog.ILogger logger = null, bool dispose = false)
40+
public static IWebHostBuilder UseSerilog(
41+
this IWebHostBuilder builder,
42+
ILogger logger = null,
43+
bool dispose = false,
44+
LoggerProviderCollection providers = null)
3845
{
3946
if (builder == null) throw new ArgumentNullException(nameof(builder));
47+
4048
builder.ConfigureServices(collection =>
41-
collection.AddSingleton<ILoggerFactory>(services => new SerilogLoggerFactory(logger, dispose)));
49+
{
50+
if (providers != null)
51+
{
52+
collection.AddSingleton<ILoggerFactory>(services =>
53+
{
54+
var factory = new SerilogLoggerFactory(logger, dispose, providers);
55+
56+
foreach (var provider in services.GetServices<ILoggerProvider>())
57+
factory.AddProvider(provider);
58+
59+
return factory;
60+
});
61+
}
62+
else
63+
{
64+
collection.AddSingleton<ILoggerFactory>(services => new SerilogLoggerFactory(logger, dispose));
65+
}
66+
});
67+
4268
return builder;
4369
}
4470

@@ -50,27 +76,56 @@ public static IWebHostBuilder UseSerilog(this IWebHostBuilder builder, Serilog.I
5076
/// <param name="builder">The web host builder to configure.</param>
5177
/// <param name="configureLogger">The delegate for configuring the <see cref="LoggerConfiguration" /> that will be used to construct a <see cref="Logger" />.</param>
5278
/// <param name="preserveStaticLogger">Indicates whether to preserve the value of <see cref="Log.Logger"/>.</param>
79+
/// <param name="writeToProviders">By default, Serilog does not write events to <see cref="ILoggerProvider"/>s registered through
80+
/// the Microsoft.Extensions.Logging API. Normally, equivalent Serilog sinks are used in place of providers. Specify
81+
/// <c>true</c> to write events to all providers.</param>
5382
/// <returns>The web host builder.</returns>
54-
public static IWebHostBuilder UseSerilog(this IWebHostBuilder builder, Action<WebHostBuilderContext, LoggerConfiguration> configureLogger, bool preserveStaticLogger = false)
83+
public static IWebHostBuilder UseSerilog(
84+
this IWebHostBuilder builder,
85+
Action<WebHostBuilderContext, LoggerConfiguration> configureLogger,
86+
bool preserveStaticLogger = false,
87+
bool writeToProviders = false)
5588
{
5689
if (builder == null) throw new ArgumentNullException(nameof(builder));
5790
if (configureLogger == null) throw new ArgumentNullException(nameof(configureLogger));
5891
builder.ConfigureServices((context, collection) =>
5992
{
6093
var loggerConfiguration = new LoggerConfiguration();
94+
95+
LoggerProviderCollection loggerProviders = null;
96+
if (writeToProviders)
97+
{
98+
loggerProviders = new LoggerProviderCollection();
99+
loggerConfiguration.WriteTo.Providers(loggerProviders);
100+
}
101+
61102
configureLogger(context, loggerConfiguration);
62103
var logger = loggerConfiguration.CreateLogger();
104+
105+
ILogger registeredLogger = null;
63106
if (preserveStaticLogger)
64-
{
65-
collection.AddSingleton<ILoggerFactory>(services => new SerilogLoggerFactory(logger, true));
66-
}
67-
else
68107
{
69108
// Passing a `null` logger to `SerilogLoggerFactory` results in disposal via
70109
// `Log.CloseAndFlush()`, which additionally replaces the static logger with a no-op.
71110
Log.Logger = logger;
72-
collection.AddSingleton<ILoggerFactory>(services => new SerilogLoggerFactory(null, true));
73111
}
112+
else
113+
{
114+
registeredLogger = logger;
115+
}
116+
117+
collection.AddSingleton<ILoggerFactory>(services =>
118+
{
119+
var factory = new SerilogLoggerFactory(registeredLogger, true, loggerProviders);
120+
121+
if (writeToProviders)
122+
{
123+
foreach (var provider in services.GetServices<ILoggerProvider>())
124+
factory.AddProvider(provider);
125+
}
126+
127+
return factory;
128+
});
74129
});
75130
return builder;
76131
}

0 commit comments

Comments
 (0)