diff --git a/src/Hosting.Services/HostBuilderExtensions.cs b/src/Hosting.Services/HostBuilderExtensions.cs
index 9990d5444..2e6521b27 100644
--- a/src/Hosting.Services/HostBuilderExtensions.cs
+++ b/src/Hosting.Services/HostBuilderExtensions.cs
@@ -41,7 +41,7 @@ public static IHost BuildStatefulService(
///
/// Registering Dependency Injection classes that will provide Service Fabric specific information for logging
///
- public static IServiceCollection AddOmexServiceFabricDependencies(this IServiceCollection collection)
+ public static IServiceCollection AddOmexServiceFabricDependencies(this IServiceCollection collection, HostBuilderContext? hostBuilderContext)
where TContext : ServiceContext
{
bool isStatefulService = typeof(StatefulServiceContext).IsAssignableFrom(typeof(TContext));
@@ -60,7 +60,7 @@ public static IServiceCollection AddOmexServiceFabricDependencies(this
collection.TryAddSingleton();
collection.TryAddSingleton();
- return collection.AddOmexServices();
+ return collection.AddOmexServices(hostBuilderContext);
}
private static IHost BuildServiceFabricService(
@@ -92,7 +92,7 @@ private static IHost BuildServiceFabricService(
{
options.ServiceTypeName = serviceName;
})
- .AddOmexServiceFabricDependencies()
+ .AddOmexServiceFabricDependencies(context)
.AddSingleton()
.AddHostedService();
})
diff --git a/src/Hosting/ServiceCollectionExtensions.cs b/src/Hosting/ServiceCollectionExtensions.cs
index 44e1d8cb2..5ec78878a 100644
--- a/src/Hosting/ServiceCollectionExtensions.cs
+++ b/src/Hosting/ServiceCollectionExtensions.cs
@@ -19,14 +19,14 @@ public static class ServiceCollectionExtensions
///
public static IHostBuilder AddOmexServices(this IHostBuilder builder) =>
builder
- .ConfigureServices((context, collection) => collection.AddOmexServices());
+ .ConfigureServices((context, collection) => collection.AddOmexServices(context));
///
/// Add Omex Logging and ActivitySource dependencies
///
- public static IServiceCollection AddOmexServices(this IServiceCollection collection) =>
+ public static IServiceCollection AddOmexServices(this IServiceCollection collection, HostBuilderContext? hostBuilderContext) =>
collection
- .AddOmexLogging()
+ .AddOmexLogging(hostBuilderContext)
.AddOmexActivitySource();
///
diff --git a/src/Logging/InitializationLogger.cs b/src/Logging/InitializationLogger.cs
index 5f82e8dc4..180487ad0 100644
--- a/src/Logging/InitializationLogger.cs
+++ b/src/Logging/InitializationLogger.cs
@@ -29,7 +29,7 @@ private static ILoggingBuilder LoadInitializationLogger(this ILoggingBuilder bui
builder.AddConsole();
}
- builder.AddOmexLogging();
+ builder.AddOmexLogging(null!); // Because this method cannot access HostBuilder's configuration.
return builder;
}
diff --git a/src/Logging/ServiceCollectionExtensions.cs b/src/Logging/ServiceCollectionExtensions.cs
index b9bdefbc9..bd56e7209 100644
--- a/src/Logging/ServiceCollectionExtensions.cs
+++ b/src/Logging/ServiceCollectionExtensions.cs
@@ -1,8 +1,10 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Omex.Extensions.Abstractions.Activities.Processing;
using Microsoft.Omex.Extensions.Abstractions.ExecutionContext;
@@ -29,9 +31,10 @@ public static IServiceCollection AddOmexServiceContext(this ISe
/// Adds Omex event logger to the factory
///
/// The extension method argument
- public static ILoggingBuilder AddOmexLogging(this ILoggingBuilder builder)
+ /// HostBuilderContext to access Configuration
+ public static ILoggingBuilder AddOmexLogging(this ILoggingBuilder builder, HostBuilderContext? context)
{
- builder.Services.AddOmexLogging();
+ builder.Services.AddOmexLogging(context);
return builder;
}
@@ -39,13 +42,21 @@ public static ILoggingBuilder AddOmexLogging(this ILoggingBuilder builder)
/// Adds Omex event logger to the factory
///
/// The extension method argument
+ /// HostBuilderContext to access Configuration
/// The so that additional calls can be chained
- public static IServiceCollection AddOmexLogging(this IServiceCollection serviceCollection)
+ public static IServiceCollection AddOmexLogging(this IServiceCollection serviceCollection, HostBuilderContext? context)
{
- serviceCollection.AddLogging();
-
serviceCollection.TryAddTransient();
serviceCollection.TryAddTransient();
+ serviceCollection.AddLogging();
+
+ const string settingName = "Monitoring:OmexLoggingEnabled";
+ bool isEventSourceLoggingEnabled = bool.Parse(context?.Configuration.GetSection(settingName).Get() ?? "true");
+ if (!isEventSourceLoggingEnabled)
+ {
+ return serviceCollection;
+ }
+
serviceCollection.TryAddTransient();
serviceCollection.TryAddSingleton(_ => OmexLogEventSource.Instance);
diff --git a/tests/Hosting.Services.UnitTests/HostBuilderExtensionsTests.cs b/tests/Hosting.Services.UnitTests/HostBuilderExtensionsTests.cs
index 3cc04aa94..40b81b2b1 100644
--- a/tests/Hosting.Services.UnitTests/HostBuilderExtensionsTests.cs
+++ b/tests/Hosting.Services.UnitTests/HostBuilderExtensionsTests.cs
@@ -30,7 +30,7 @@ public void AddOmexServiceFabricDependencies_TypesRegistered(Type typeToResolver
void CheckTypeRegistration() where TContext : ServiceContext
{
object? obj = new ServiceCollection()
- .AddOmexServiceFabricDependencies()
+ .AddOmexServiceFabricDependencies(null!)
.AddSingleton(new Mock().Object)
.BuildServiceProvider()
.GetService(typeToResolver);
diff --git a/tests/Hosting.UnitTests/HostBuilderExtensionsTests.cs b/tests/Hosting.UnitTests/HostBuilderExtensionsTests.cs
index 005af3e48..1af119ce9 100644
--- a/tests/Hosting.UnitTests/HostBuilderExtensionsTests.cs
+++ b/tests/Hosting.UnitTests/HostBuilderExtensionsTests.cs
@@ -24,7 +24,7 @@ public void AddOmexServices_TypesRegistered(Type type)
object? collectionObj = new ServiceCollection()
.AddSingleton(new ConfigurationBuilder().Build()) // Added IConfiguration because one of the dependency depends on IOptions which in turn depends on IConfiguration
.AddSingleton(new HostingEnvironment())
- .AddOmexServices()
+ .AddOmexServices(null!)
.BuildServiceProvider(new ServiceProviderOptions
{
ValidateOnBuild = true,
diff --git a/tests/Logging.UnitTests/Scrubbing/ServiceCollectionExtensionsTests.cs b/tests/Logging.UnitTests/Scrubbing/ServiceCollectionExtensionsTests.cs
index 0f622ef52..4908dda05 100644
--- a/tests/Logging.UnitTests/Scrubbing/ServiceCollectionExtensionsTests.cs
+++ b/tests/Logging.UnitTests/Scrubbing/ServiceCollectionExtensionsTests.cs
@@ -143,7 +143,7 @@ public void AddRegexLogScrubbingRule_Scrubs(string input, string expected)
private static ILogScrubbingRule[] GetTypeRegistrations(IServiceCollection collection)
{
IEnumerable objects = collection
- .AddOmexLogging()
+ .AddOmexLogging(null!)
.BuildServiceProvider(new ServiceProviderOptions
{
ValidateOnBuild = true,
diff --git a/tests/Logging.UnitTests/ServiceCollectionTests.cs b/tests/Logging.UnitTests/ServiceCollectionTests.cs
index d5cb96989..886ed20b4 100644
--- a/tests/Logging.UnitTests/ServiceCollectionTests.cs
+++ b/tests/Logging.UnitTests/ServiceCollectionTests.cs
@@ -2,8 +2,12 @@
// Licensed under the MIT license.
using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using Microsoft.Omex.Extensions.Logging.Scrubbing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.Omex.Extensions.Logging.UnitTests
@@ -25,7 +29,7 @@ public void AddOmexServiceContext_OverridesContextType()
{
IServiceCollection collection = new ServiceCollection()
.AddOmexServiceContext()
- .AddOmexLogging();
+ .AddOmexLogging(null!);
IServiceContext context = ValidateTypeRegistration(collection);
@@ -37,14 +41,14 @@ public void AddOmexServiceContext_OverridesContextType()
[TestMethod]
public void AddOmexLoggerOnServiceCollection_RegistersLogger()
{
- IServiceCollection collection = new ServiceCollection().AddOmexLogging();
+ IServiceCollection collection = new ServiceCollection().AddOmexLogging(null!);
ValidateTypeRegistration>(collection);
}
[TestMethod]
public void AddOmexLoggerOnLogBuilder_RegistersLogger()
{
- ILoggingBuilder builder = new MockLoggingBuilder().AddOmexLogging();
+ ILoggingBuilder builder = new MockLoggingBuilder().AddOmexLogging(null!);
ValidateTypeRegistration>(builder.Services);
}
@@ -52,7 +56,7 @@ private T ValidateTypeRegistration(IServiceCollection collection)
where T : class
{
T obj = collection
- .AddOmexLogging()
+ .AddOmexLogging(null!)
.BuildServiceProvider(new ServiceProviderOptions
{
ValidateOnBuild = true,
@@ -64,6 +68,80 @@ private T ValidateTypeRegistration(IServiceCollection collection)
return obj;
}
+ [TestMethod]
+ public void AddOmexLoggerOnLogBuilder_ContainHostBuilder_SettingOmexLoggingEnabled_False_OmexLoggerNotRegistered()
+ {
+ HostBuilderContext hostBuilderContext = new(new Dictionary