Skip to content

Commit c971259

Browse files
TimHessTim Hess
authored andcommitted
Don't AddDynamicConsole if IDynamicLoggerProvider has already been added
1 parent 9faf25b commit c971259

5 files changed

Lines changed: 98 additions & 16 deletions

File tree

src/Management/Management.sln

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Steeltoe.Management.OpenCen
9595
EndProject
9696
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Steeltoe.Extensions.Configuration.PlaceholderBase", "..\Configuration\src\PlaceholderBase\Steeltoe.Extensions.Configuration.PlaceholderBase.csproj", "{BF78F310-5016-4380-BC3E-06F475C65BAA}"
9797
EndProject
98+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Steeltoe.Extensions.Logging.SerilogDynamicLoggerCore", "..\Logging\src\SerilogDynamicLoggerCore\Steeltoe.Extensions.Logging.SerilogDynamicLoggerCore.csproj", "{DCBE106E-42A4-431C-BF27-56CAD3169E38}"
99+
EndProject
98100
Global
99101
GlobalSection(SolutionConfigurationPlatforms) = preSolution
100102
Debug|Any CPU = Debug|Any CPU
@@ -229,10 +231,6 @@ Global
229231
{092BADE5-4E56-4EB4-BA0F-3EA6ECA08943}.Debug|Any CPU.Build.0 = Debug|Any CPU
230232
{092BADE5-4E56-4EB4-BA0F-3EA6ECA08943}.Release|Any CPU.ActiveCfg = Release|Any CPU
231233
{092BADE5-4E56-4EB4-BA0F-3EA6ECA08943}.Release|Any CPU.Build.0 = Release|Any CPU
232-
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
233-
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
234-
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
235-
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Release|Any CPU.Build.0 = Release|Any CPU
236234
{019FB8A8-8FFB-433D-AFA3-46AC797ABE63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
237235
{019FB8A8-8FFB-433D-AFA3-46AC797ABE63}.Debug|Any CPU.Build.0 = Debug|Any CPU
238236
{019FB8A8-8FFB-433D-AFA3-46AC797ABE63}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -241,6 +239,14 @@ Global
241239
{A681F1FC-EA6F-49D8-A358-41886DFAF8B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
242240
{A681F1FC-EA6F-49D8-A358-41886DFAF8B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
243241
{A681F1FC-EA6F-49D8-A358-41886DFAF8B9}.Release|Any CPU.Build.0 = Release|Any CPU
242+
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
243+
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
244+
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
245+
{BF78F310-5016-4380-BC3E-06F475C65BAA}.Release|Any CPU.Build.0 = Release|Any CPU
246+
{DCBE106E-42A4-431C-BF27-56CAD3169E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
247+
{DCBE106E-42A4-431C-BF27-56CAD3169E38}.Debug|Any CPU.Build.0 = Debug|Any CPU
248+
{DCBE106E-42A4-431C-BF27-56CAD3169E38}.Release|Any CPU.ActiveCfg = Release|Any CPU
249+
{DCBE106E-42A4-431C-BF27-56CAD3169E38}.Release|Any CPU.Build.0 = Release|Any CPU
244250
EndGlobalSection
245251
GlobalSection(SolutionProperties) = preSolution
246252
HideSolutionNode = FALSE
@@ -281,6 +287,7 @@ Global
281287
{019FB8A8-8FFB-433D-AFA3-46AC797ABE63} = {B86A4082-6F42-4BFC-A1F2-83CC422AD493}
282288
{A681F1FC-EA6F-49D8-A358-41886DFAF8B9} = {B86A4082-6F42-4BFC-A1F2-83CC422AD493}
283289
{BF78F310-5016-4380-BC3E-06F475C65BAA} = {402D8CB5-C3C3-47E0-BEB3-63D0975E5109}
290+
{DCBE106E-42A4-431C-BF27-56CAD3169E38} = {402D8CB5-C3C3-47E0-BEB3-63D0975E5109}
284291
EndGlobalSection
285292
GlobalSection(ExtensibilityGlobals) = postSolution
286293
SolutionGuid = {7949396C-4BFF-4834-9BC2-F3A345E9CCE5}

src/Management/src/CloudFoundryCore/CloudFoundryHostBuilderExtensions.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,24 @@ public static IHostBuilder AddCloudFoundryActuators(this IHostBuilder hostBuilde
8080

8181
private static readonly Action<ILoggingBuilder> ConfigureDynamicLogging = (logbuilder) =>
8282
{
83-
// remove the original ConsoleLoggerProvider to prevent duplicate logging
84-
var serviceDescriptor = logbuilder.Services.FirstOrDefault(descriptor => descriptor.ImplementationType == typeof(ConsoleLoggerProvider));
85-
if (serviceDescriptor != null)
83+
var dynamicDescriptor = logbuilder.Services.FirstOrDefault(descriptor => descriptor.ServiceType == typeof(IDynamicLoggerProvider));
84+
if (dynamicDescriptor == null)
8685
{
87-
logbuilder.Services.Remove(serviceDescriptor);
88-
}
86+
// remove the original ConsoleLoggerProvider to prevent duplicate logging
87+
var serviceDescriptor = logbuilder.Services.FirstOrDefault(descriptor => descriptor.ImplementationType == typeof(ConsoleLoggerProvider));
88+
if (serviceDescriptor != null)
89+
{
90+
logbuilder.Services.Remove(serviceDescriptor);
91+
}
8992

90-
// make sure logger provider configurations are available
91-
if (!logbuilder.Services.Any(descriptor => descriptor.ServiceType == typeof(ILoggerProviderConfiguration<ConsoleLoggerProvider>)))
92-
{
93-
logbuilder.AddConfiguration();
94-
}
93+
// make sure logger provider configurations are available
94+
if (!logbuilder.Services.Any(descriptor => descriptor.ServiceType == typeof(ILoggerProviderConfiguration<ConsoleLoggerProvider>)))
95+
{
96+
logbuilder.AddConfiguration();
97+
}
9598

96-
logbuilder.AddDynamicConsole();
99+
logbuilder.AddDynamicConsole();
100+
}
97101
};
98102

99103
private static void ConfigureServices(IServiceCollection collection, IConfiguration configuration, MediaTypeVersion mediaTypeVersion, ActuatorContext actuatorContext, Action<CorsPolicyBuilder> buildCorsPolicy)

src/Management/src/EndpointCore/ManagementHostBuilderExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public static IHostBuilder AddInfoActuator(this IHostBuilder hostBuilder, IInfoC
172172
public static IHostBuilder AddLoggersActuator(this IHostBuilder hostBuilder)
173173
{
174174
return hostBuilder
175-
.ConfigureLogging((context, configureLogging) => Extensions.Logging.DynamicLoggingBuilder.AddDynamicConsole(configureLogging, true))
175+
.AddDynamicLogging()
176176
.ConfigureServices((context, collection) =>
177177
{
178178
collection.AddLoggersActuator(context.Configuration);

src/Management/test/CloudFoundryCore.Test/CloudFoundryHostBuilderExtensionsTest.cs

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

15+
using Microsoft.AspNetCore;
1516
using Microsoft.AspNetCore.Hosting;
1617
using Microsoft.AspNetCore.TestHost;
1718
using Microsoft.Extensions.Configuration;
1819
using Microsoft.Extensions.DependencyInjection;
1920
using Microsoft.Extensions.Hosting;
21+
using Steeltoe.Extensions.Logging.SerilogDynamicLogger;
2022
using Steeltoe.Management.Endpoint;
2123
using Steeltoe.Management.Endpoint.CloudFoundry;
2224
using Steeltoe.Management.Endpoint.HeapDump;
@@ -66,6 +68,38 @@ public void AddCloudFoundryActuators_IWebHostBuilder()
6668
Assert.Single(filters.OfType<CloudFoundryActuatorsStartupFilter>());
6769
}
6870

71+
[Fact]
72+
public void AddCloudFoundryActuators_IWebHostBuilder_Serilog()
73+
{
74+
// Arrange
75+
var hostBuilder = WebHost.CreateDefaultBuilder()
76+
.ConfigureAppConfiguration(cbuilder => cbuilder.AddInMemoryCollection(managementSettings))
77+
.Configure(configureApp => { })
78+
.ConfigureLogging(logging => logging.AddSerilogDynamicConsole());
79+
80+
// Act
81+
var host = hostBuilder.AddCloudFoundryActuators().Build();
82+
var managementOptions = host.Services.GetServices<IManagementOptions>();
83+
84+
var filters = host.Services.GetServices<IStartupFilter>();
85+
86+
// Assert
87+
Assert.Contains(managementOptions, t => t.GetType() == typeof(CloudFoundryManagementOptions));
88+
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
89+
{
90+
Assert.Single(host.Services.GetServices<ThreadDumpEndpoint>());
91+
Assert.Single(host.Services.GetServices<HeapDumpEndpoint>());
92+
}
93+
else
94+
{
95+
Assert.Empty(host.Services.GetServices<ThreadDumpEndpoint>());
96+
Assert.Empty(host.Services.GetServices<HeapDumpEndpoint>());
97+
}
98+
99+
Assert.NotNull(filters);
100+
Assert.Single(filters.OfType<CloudFoundryActuatorsStartupFilter>());
101+
}
102+
69103
[Fact]
70104
public void AddCloudFoundryActuators_IHostBuilder()
71105
{
@@ -112,6 +146,39 @@ public async Task AddCloudFoundryActuators_IHostBuilder_IStartupFilterFires()
112146
// but debug through and you'll see it. Also the code coverage report should provide validation
113147
Assert.True(true);
114148
}
149+
150+
[Fact]
151+
public void AddCloudFoundryActuators_IHostBuilder_Serilog()
152+
{
153+
// Arrange
154+
var hostBuilder = Host.CreateDefaultBuilder()
155+
.AddCloudFoundryActuators()
156+
.ConfigureLogging(logging => logging.AddSerilogDynamicConsole())
157+
.ConfigureAppConfiguration(cbuilder => cbuilder.AddInMemoryCollection(managementSettings))
158+
.ConfigureWebHost(configureApp => configureApp.UseTestServer());
159+
160+
// Act
161+
var host = hostBuilder.Build();
162+
var managementOptions = host.Services.GetServices<IManagementOptions>();
163+
164+
var filters = host.Services.GetServices<IStartupFilter>();
165+
166+
// Assert
167+
Assert.Contains(managementOptions, t => t.GetType() == typeof(CloudFoundryManagementOptions));
168+
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
169+
{
170+
Assert.Single(host.Services.GetServices<ThreadDumpEndpoint>());
171+
Assert.Single(host.Services.GetServices<HeapDumpEndpoint>());
172+
}
173+
else
174+
{
175+
Assert.Empty(host.Services.GetServices<ThreadDumpEndpoint>());
176+
Assert.Empty(host.Services.GetServices<HeapDumpEndpoint>());
177+
}
178+
179+
Assert.NotNull(filters);
180+
Assert.Single(filters.OfType<CloudFoundryActuatorsStartupFilter>());
181+
}
115182
#endif
116183
}
117184
}

src/Management/test/CloudFoundryCore.Test/Steeltoe.Management.CloudFoundryCore.Test.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,14 @@
1414
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
1515
</None>
1616
</ItemGroup>
17+
<ItemGroup Condition="'$(TargetFramework)' != 'netcoreapp3.0'">
18+
<PackageReference Include="Microsoft.AspNetCore" Version="$(AspNetCoreVersion)" />
19+
</ItemGroup>
1720
<ItemGroup>
1821
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="$(AspNetCoreVersion)" />
1922
</ItemGroup>
2023
<ItemGroup>
24+
<ProjectReference Include="..\..\..\Logging\src\SerilogDynamicLoggerCore\Steeltoe.Extensions.Logging.SerilogDynamicLoggerCore.csproj" />
2125
<ProjectReference Include="..\..\src\CloudFoundryCore\Steeltoe.Management.CloudFoundryCore.csproj" />
2226
</ItemGroup>
2327
</Project>

0 commit comments

Comments
 (0)