Skip to content

Commit c26df53

Browse files
authored
Merge pull request #72 from serilog/dev
7.0.0 Release
2 parents b8f2e70 + 52f29a6 commit c26df53

12 files changed

+343
-175
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ Serilog logging for _Microsoft.Extensions.Hosting_. This package routes framewor
99
**First**, install the _Serilog.Extensions.Hosting_ [NuGet package](https://www.nuget.org/packages/Serilog.Extensions.Hosting) into your app. You will need a way to view the log messages - _Serilog.Sinks.Console_ writes these to the console; there are [many more sinks available](https://www.nuget.org/packages?q=Tags%3A%22serilog%22) on NuGet.
1010

1111
```powershell
12-
Install-Package Serilog.Extensions.Hosting -DependencyVersion Highest
13-
Install-Package Serilog.Sinks.Console
12+
dotnet add package Serilog.Extensions.Hosting
13+
dotnet add package Serilog.Sinks.Console
1414
```
1515

1616
**Next**, in your application's _Program.cs_ file, configure Serilog first. A `try`/`catch` block will ensure any configuration issues are appropriately logged:
@@ -88,3 +88,7 @@ You can alternatively configure Serilog using a delegate as shown below:
8888
This has the advantage of making the `hostingContext`'s `Configuration` object available for configuration of the logger, but at the expense of ignoring `Exception`s raised earlier in program startup.
8989

9090
If this method is used, `Log.Logger` is assigned implicitly, and closed when the app is shut down.
91+
92+
### Versioning
93+
94+
This package tracks the versioning and target framework support of its [_Microsoft.Extensions.Hosting_](https://nuget.org/packages/Microsoft.Extensions.Hosting) dependency.

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ deploy:
1313
- provider: NuGet
1414
skip_symbols: true
1515
api_key:
16-
secure: Q65rY+zaFWOhs8a9IVSaX4Go5HNcIlEXjEFWMB83Y325WE9aXzi0xzDDc0/fJDzk
16+
secure: EN9f+XXE3fW+ebL4wxrIbafdtbNvRfddBN8UUixvctYh4qMBHzr1JdnM83QsM1zo
1717
on:
1818
branch: /^(main|dev)$/
1919
- provider: GitHub

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"sdk": {
33
"allowPrerelease": false,
4-
"version": "6.0.300",
4+
"version": "7.0.100",
55
"rollForward": "latestFeature"
66
}
77
}

samples/SimpleServiceSample/SimpleServiceSample.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
<Project Sdk="Microsoft.NET.Sdk.Worker">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
4+
<TargetFramework>net7.0</TargetFramework>
55
</PropertyGroup>
66

77
<ItemGroup>
88
<ProjectReference Include="..\..\src\Serilog.Extensions.Hosting\Serilog.Extensions.Hosting.csproj" />
99
</ItemGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.4" />
13-
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
12+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
13+
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
1414
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
1515
</ItemGroup>
1616

samples/WebApplicationSample/WebApplicationSample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
4+
<TargetFramework>net7.0</TargetFramework>
55
</PropertyGroup>
66

77
<ItemGroup>

src/Serilog.Extensions.Hosting/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Reflection;
22
using System.Runtime.CompilerServices;
33

4-
[assembly: AssemblyVersion("2.0.0.0")]
4+
[assembly: AssemblyVersion("7.0.0.0")]
55

66
[assembly: InternalsVisibleTo("Serilog.Extensions.Hosting.Tests, PublicKey=" +
77
"0024000004800000940000000602000000240000525341310004000001000100fb8d13fd344a1c" +

src/Serilog.Extensions.Hosting/Serilog.Extensions.Hosting.csproj

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22

33
<PropertyGroup>
44
<Description>Serilog support for .NET Core logging in hosted services</Description>
5-
<VersionPrefix>5.0.1</VersionPrefix>
5+
<!-- This must match the major and minor components of the referenced Microsoft.Extensions.Logging package. -->
6+
<VersionPrefix>7.0.0</VersionPrefix>
67
<Authors>Microsoft;Serilog Contributors</Authors>
7-
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
8+
<!-- These must match the Dependencies tab in https://www.nuget.org/packages/microsoft.extensions.hosting at
9+
the target version. -->
10+
<TargetFrameworks>net462;netstandard2.0;netstandard2.1;net6.0;net7.0</TargetFrameworks>
811
<LangVersion>8</LangVersion>
912
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1013
<GenerateDocumentationFile>true</GenerateDocumentationFile>
11-
<AssemblyName>Serilog.Extensions.Hosting</AssemblyName>
1214
<AssemblyOriginatorKeyFile>../../assets/Serilog.snk</AssemblyOriginatorKeyFile>
1315
<SignAssembly>true</SignAssembly>
1416
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
15-
<PackageId>Serilog.Extensions.Hosting</PackageId>
1617
<PackageTags>serilog;aspnet;aspnetcore;hosting</PackageTags>
1718
<PackageIcon>icon.png</PackageIcon>
1819
<PackageProjectUrl>https://github.com/serilog/serilog-extensions-hosting</PackageProjectUrl>
@@ -23,20 +24,21 @@
2324
<RootNamespace>Serilog</RootNamespace>
2425
</PropertyGroup>
2526

26-
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
27+
<PropertyGroup Condition=" '$(TargetFramework)' == 'net462' or '$(TargetFramework)' == 'netstandard2.0' ">
2728
<DefineConstants>$(DefineConstants);NO_RELOADABLE_LOGGER</DefineConstants>
2829
</PropertyGroup>
2930

3031
<ItemGroup>
31-
<PackageReference Include="Serilog" Version="2.10.0" />
32-
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
33-
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.8" />
34-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.8" />
35-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.8" />
32+
<None Include="..\..\assets\icon.png" Pack="true" Visible="false" PackagePath="" />
33+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
34+
<PackageReference Include="Serilog" Version="2.12.0" />
3635
</ItemGroup>
3736

3837
<ItemGroup>
39-
<None Include="..\..\assets\icon.png" Pack="true" Visible="false" PackagePath="" />
40-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
38+
<!-- The versions of all references in this group must match the major and minor components of the package version prefix. -->
39+
<PackageReference Include="Serilog.Extensions.Logging" Version="7.0.0" />
40+
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />
41+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
42+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
4143
</ItemGroup>
4244
</Project>

src/Serilog.Extensions.Hosting/SerilogHostBuilderExtensions.cs

Lines changed: 6 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@
1313
// limitations under the License.
1414

1515
using System;
16-
using Microsoft.Extensions.DependencyInjection;
1716
using Microsoft.Extensions.Hosting;
1817
using Microsoft.Extensions.Logging;
19-
using Serilog.Extensions.Hosting;
2018
using Serilog.Extensions.Logging;
2119
// ReSharper disable MemberCanBePrivate.Global
2220

@@ -27,20 +25,6 @@ namespace Serilog
2725
/// </summary>
2826
public static class SerilogHostBuilderExtensions
2927
{
30-
// Used internally to pass information through the container. We need to do this because if `logger` is the
31-
// root logger, registering it as a singleton may lead to disposal along with the container by MEDI. This isn't
32-
// always desirable, i.e. we may be handed a logger and `dispose: false`, so wrapping it keeps us in control
33-
// of when the logger is disposed.
34-
class RegisteredLogger
35-
{
36-
public RegisteredLogger(ILogger logger)
37-
{
38-
Logger = logger;
39-
}
40-
41-
public ILogger Logger { get; }
42-
}
43-
4428
/// <summary>
4529
/// Sets Serilog as the logging provider.
4630
/// </summary>
@@ -63,33 +47,7 @@ public static IHostBuilder UseSerilog(
6347

6448
builder.ConfigureServices((_, collection) =>
6549
{
66-
if (providers != null)
67-
{
68-
collection.AddSingleton<ILoggerFactory>(services =>
69-
{
70-
var factory = new SerilogLoggerFactory(logger, dispose, providers);
71-
72-
foreach (var provider in services.GetServices<ILoggerProvider>())
73-
factory.AddProvider(provider);
74-
75-
return factory;
76-
});
77-
}
78-
else
79-
{
80-
collection.AddSingleton<ILoggerFactory>(services => new SerilogLoggerFactory(logger, dispose));
81-
}
82-
83-
if (logger != null)
84-
{
85-
// This won't (and shouldn't) take ownership of the logger.
86-
collection.AddSingleton(logger);
87-
88-
// Still need to use RegisteredLogger as it is used by ConfigureDiagnosticContext.
89-
collection.AddSingleton(new RegisteredLogger(logger));
90-
}
91-
bool useRegisteredLogger = logger != null;
92-
ConfigureDiagnosticContext(collection, useRegisteredLogger);
50+
collection.AddSerilog(logger, dispose, providers);
9351
});
9452

9553
return builder;
@@ -148,108 +106,16 @@ public static IHostBuilder UseSerilog(
148106
if (builder == null) throw new ArgumentNullException(nameof(builder));
149107
if (configureLogger == null) throw new ArgumentNullException(nameof(configureLogger));
150108

151-
// This check is eager; replacing the bootstrap logger after calling this method is not supported.
152-
#if !NO_RELOADABLE_LOGGER
153-
var reloadable = Log.Logger as ReloadableLogger;
154-
var useReload = reloadable != null && !preserveStaticLogger;
155-
#else
156-
const bool useReload = false;
157-
#endif
158-
159109
builder.ConfigureServices((context, collection) =>
160110
{
161-
LoggerProviderCollection loggerProviders = null;
162-
if (writeToProviders)
163-
{
164-
loggerProviders = new LoggerProviderCollection();
165-
}
166-
167-
collection.AddSingleton(services =>
168-
{
169-
ILogger logger;
170-
#if !NO_RELOADABLE_LOGGER
171-
if (useReload)
172-
{
173-
reloadable!.Reload(cfg =>
174-
{
175-
if (loggerProviders != null)
176-
cfg.WriteTo.Providers(loggerProviders);
177-
178-
configureLogger(context, services, cfg);
179-
return cfg;
180-
});
181-
182-
logger = reloadable.Freeze();
183-
}
184-
else
185-
#endif
186-
{
187-
var loggerConfiguration = new LoggerConfiguration();
188-
189-
if (loggerProviders != null)
190-
loggerConfiguration.WriteTo.Providers(loggerProviders);
191-
192-
configureLogger(context, services, loggerConfiguration);
193-
logger = loggerConfiguration.CreateLogger();
194-
}
195-
196-
return new RegisteredLogger(logger);
197-
});
198-
199-
collection.AddSingleton(services =>
200-
{
201-
// How can we register the logger, here, but not have MEDI dispose it?
202-
// Using the `NullEnricher` hack to prevent disposal.
203-
var logger = services.GetRequiredService<RegisteredLogger>().Logger;
204-
return logger.ForContext(new NullEnricher());
205-
});
206-
207-
collection.AddSingleton<ILoggerFactory>(services =>
208-
{
209-
var logger = services.GetRequiredService<RegisteredLogger>().Logger;
210-
211-
ILogger registeredLogger = null;
212-
if (preserveStaticLogger)
213-
{
214-
registeredLogger = logger;
215-
}
216-
else
217-
{
218-
// Passing a `null` logger to `SerilogLoggerFactory` results in disposal via
219-
// `Log.CloseAndFlush()`, which additionally replaces the static logger with a no-op.
220-
Log.Logger = logger;
221-
}
222-
223-
var factory = new SerilogLoggerFactory(registeredLogger, !useReload, loggerProviders);
224-
225-
if (writeToProviders)
226-
{
227-
foreach (var provider in services.GetServices<ILoggerProvider>())
228-
factory.AddProvider(provider);
229-
}
230-
231-
return factory;
232-
});
233-
234-
ConfigureDiagnosticContext(collection, preserveStaticLogger);
111+
collection.AddSerilog(
112+
(services, loggerConfiguration) =>
113+
configureLogger(context, services, loggerConfiguration),
114+
preserveStaticLogger: preserveStaticLogger,
115+
writeToProviders: writeToProviders);
235116
});
236117

237118
return builder;
238119
}
239-
240-
static void ConfigureDiagnosticContext(IServiceCollection collection, bool useRegisteredLogger)
241-
{
242-
if (collection == null) throw new ArgumentNullException(nameof(collection));
243-
244-
// Registered to provide two services...
245-
// Consumed by e.g. middleware
246-
collection.AddSingleton(services =>
247-
{
248-
ILogger logger = useRegisteredLogger ? services.GetRequiredService<RegisteredLogger>().Logger : null;
249-
return new DiagnosticContext(logger);
250-
});
251-
// Consumed by user code
252-
collection.AddSingleton<IDiagnosticContext>(services => services.GetRequiredService<DiagnosticContext>());
253-
}
254120
}
255121
}

0 commit comments

Comments
 (0)