Pass existing LoggerFactory into WebHostBuilder
This commit is contained in:
parent
22eab75005
commit
4b16e83a1f
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting.Server;
|
using Microsoft.AspNetCore.Hosting.Server;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Hosting
|
namespace Microsoft.AspNetCore.Hosting
|
||||||
{
|
{
|
||||||
|
|
@ -18,6 +19,13 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IWebHost Build();
|
IWebHost Build();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specify the <see cref="ILoggerFactory"/> to be used by the web host.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to be used.</param>
|
||||||
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
|
IWebHostBuilder UseLoggerFactory(ILoggerFactory loggerFactory);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specify the <see cref="IServerFactory"/> to be used by the web host.
|
/// Specify the <see cref="IServerFactory"/> to be used by the web host.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -46,6 +54,13 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
IWebHostBuilder Configure(Action<IApplicationBuilder> configureApplication);
|
IWebHostBuilder Configure(Action<IApplicationBuilder> configureApplication);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a delegate for configuring the provided <see cref="ILoggerFactory"/>. This may be called multiple times.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="configureLogging">The delegate that configures the <see cref="ILoggerFactory"/>.</param>
|
||||||
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
|
IWebHostBuilder ConfigureLogging(Action<ILoggerFactory> configureLogging);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add or replace a setting in the configuration.
|
/// Add or replace a setting in the configuration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@
|
||||||
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "1.0.0-*",
|
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",
|
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-*",
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.FileProviders.Abstractions": "1.0.0-*"
|
"Microsoft.Extensions.FileProviders.Abstractions": "1.0.0-*",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "1.0.0-*"
|
||||||
},
|
},
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
"net451": {},
|
"net451": {},
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,11 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
public class WebHostBuilder : IWebHostBuilder
|
public class WebHostBuilder : IWebHostBuilder
|
||||||
{
|
{
|
||||||
private readonly IHostingEnvironment _hostingEnvironment;
|
private readonly IHostingEnvironment _hostingEnvironment;
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
|
||||||
private readonly List<Action<IServiceCollection>> _configureServicesDelegates;
|
private readonly List<Action<IServiceCollection>> _configureServicesDelegates;
|
||||||
|
private readonly List<Action<ILoggerFactory>> _configureLoggingDelegates;
|
||||||
|
|
||||||
private IConfiguration _config = new ConfigurationBuilder().AddInMemoryCollection().Build();
|
private IConfiguration _config = new ConfigurationBuilder().AddInMemoryCollection().Build();
|
||||||
|
private ILoggerFactory _loggerFactory;
|
||||||
private WebHostOptions _options;
|
private WebHostOptions _options;
|
||||||
|
|
||||||
// Only one of these should be set
|
// Only one of these should be set
|
||||||
|
|
@ -41,11 +42,14 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
// Only one of these should be set
|
// Only one of these should be set
|
||||||
private IServerFactory _serverFactory;
|
private IServerFactory _serverFactory;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="WebHostBuilder"/> class.
|
||||||
|
/// </summary>
|
||||||
public WebHostBuilder()
|
public WebHostBuilder()
|
||||||
{
|
{
|
||||||
_hostingEnvironment = new HostingEnvironment();
|
_hostingEnvironment = new HostingEnvironment();
|
||||||
_loggerFactory = new LoggerFactory();
|
|
||||||
_configureServicesDelegates = new List<Action<IServiceCollection>>();
|
_configureServicesDelegates = new List<Action<IServiceCollection>>();
|
||||||
|
_configureLoggingDelegates = new List<Action<ILoggerFactory>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -70,6 +74,22 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
return _config[key];
|
return _config[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specify the <see cref="ILoggerFactory"/> to be used by the web host.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to be used.</param>
|
||||||
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
|
public IWebHostBuilder UseLoggerFactory(ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
|
if (loggerFactory == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(loggerFactory));
|
||||||
|
}
|
||||||
|
|
||||||
|
_loggerFactory = loggerFactory;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specify the <see cref="IServerFactory"/> to be used by the web host.
|
/// Specify the <see cref="IServerFactory"/> to be used by the web host.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -136,13 +156,18 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configure the provided <see cref="ILoggerFactory"/> which will be available as a hosting service.
|
/// Adds a delegate for configuring the provided <see cref="ILoggerFactory"/>. This may be called multiple times.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="configureLogging">The delegate that configures the <see cref="ILoggerFactory"/>.</param>
|
/// <param name="configureLogging">The delegate that configures the <see cref="ILoggerFactory"/>.</param>
|
||||||
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
public IWebHostBuilder ConfigureLogging(Action<ILoggerFactory> configureLogging)
|
public IWebHostBuilder ConfigureLogging(Action<ILoggerFactory> configureLogging)
|
||||||
{
|
{
|
||||||
configureLogging(_loggerFactory);
|
if (configureLogging == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(configureLogging));
|
||||||
|
}
|
||||||
|
|
||||||
|
_configureLoggingDelegates.Add(configureLogging);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,14 +210,25 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
|
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton(_hostingEnvironment);
|
services.AddSingleton(_hostingEnvironment);
|
||||||
|
|
||||||
|
if (_loggerFactory == null)
|
||||||
|
{
|
||||||
|
_loggerFactory = new LoggerFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var configureLogging in _configureLoggingDelegates)
|
||||||
|
{
|
||||||
|
configureLogging(_loggerFactory);
|
||||||
|
}
|
||||||
|
|
||||||
services.AddSingleton(_loggerFactory);
|
services.AddSingleton(_loggerFactory);
|
||||||
|
services.AddLogging();
|
||||||
|
|
||||||
services.AddTransient<IStartupLoader, StartupLoader>();
|
services.AddTransient<IStartupLoader, StartupLoader>();
|
||||||
|
|
||||||
services.AddTransient<IServerLoader, ServerLoader>();
|
services.AddTransient<IServerLoader, ServerLoader>();
|
||||||
services.AddTransient<IApplicationBuilderFactory, ApplicationBuilderFactory>();
|
services.AddTransient<IApplicationBuilderFactory, ApplicationBuilderFactory>();
|
||||||
services.AddTransient<IHttpContextFactory, HttpContextFactory>();
|
services.AddTransient<IHttpContextFactory, HttpContextFactory>();
|
||||||
services.AddLogging();
|
|
||||||
services.AddOptions();
|
services.AddOptions();
|
||||||
|
|
||||||
var diagnosticSource = new DiagnosticListener("Microsoft.AspNetCore");
|
var diagnosticSource = new DiagnosticListener("Microsoft.AspNetCore");
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.AspNetCore.Http.Internal;
|
using Microsoft.AspNetCore.Http.Internal;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.ObjectPool;
|
using Microsoft.Extensions.ObjectPool;
|
||||||
using Microsoft.Extensions.PlatformAbstractions;
|
using Microsoft.Extensions.PlatformAbstractions;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -141,6 +142,33 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void DefaultCreatesLoggerFactory()
|
||||||
|
{
|
||||||
|
var hostBuilder = new WebHostBuilder()
|
||||||
|
.UseServer(new TestServer())
|
||||||
|
.UseStartup<StartupNoServices>();
|
||||||
|
|
||||||
|
var host = (WebHost)hostBuilder.Build();
|
||||||
|
|
||||||
|
Assert.NotNull(host.Services.GetService<ILoggerFactory>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UseLoggerFactoryHonored()
|
||||||
|
{
|
||||||
|
var loggerFactory = new LoggerFactory();
|
||||||
|
|
||||||
|
var hostBuilder = new WebHostBuilder()
|
||||||
|
.UseLoggerFactory(loggerFactory)
|
||||||
|
.UseServer(new TestServer())
|
||||||
|
.UseStartup<StartupNoServices>();
|
||||||
|
|
||||||
|
var host = (WebHost)hostBuilder.Build();
|
||||||
|
|
||||||
|
Assert.Same(loggerFactory, host.Services.GetService<ILoggerFactory>());
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DefaultHostingConfigurationDoesNotCaptureStartupErrors()
|
public void DefaultHostingConfigurationDoesNotCaptureStartupErrors()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue