From 74acfc6e9eccc849853d795d3ce87cfd31fd000e Mon Sep 17 00:00:00 2001 From: Maryam Ariyan Date: Tue, 21 Jul 2020 10:03:02 -0700 Subject: [PATCH 1/2] Add Overloads for AddXConsole --- .../Microsoft.Extensions.Logging.Console.cs | 2 ++ ...tensions.cs => ConsoleLoggerExtensions.cs} | 19 +++++++++- .../tests/ConsoleLoggerExtensionsTests.cs | 35 +++++++++++++++++-- 3 files changed, 53 insertions(+), 3 deletions(-) rename src/libraries/Microsoft.Extensions.Logging.Console/src/{ConsoleLoggerFactoryExtensions.cs => ConsoleLoggerExtensions.cs} (88%) diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs b/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs index 13f7dfa6c3bdbc..0fa1cc64a108ae 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs @@ -12,8 +12,10 @@ public static partial class ConsoleLoggerExtensions public static Microsoft.Extensions.Logging.ILoggingBuilder AddConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddConsoleFormatter(this Microsoft.Extensions.Logging.ILoggingBuilder builder) where TFormatter : Microsoft.Extensions.Logging.Console.ConsoleFormatter where TOptions : Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddConsoleFormatter(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) where TFormatter : Microsoft.Extensions.Logging.Console.ConsoleFormatter where TOptions : Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions { throw null; } + public static Microsoft.Extensions.Logging.ILoggingBuilder AddJsonConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddJsonConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddSimpleConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } + public static Microsoft.Extensions.Logging.ILoggingBuilder AddSystemdConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddSystemdConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } } } diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerFactoryExtensions.cs b/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs similarity index 88% rename from src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerFactoryExtensions.cs rename to src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs index 9dbea88f9b253d..81ceba92888925 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerFactoryExtensions.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs @@ -59,6 +59,13 @@ public static ILoggingBuilder AddSimpleConsole(this ILoggingBuilder builder, Act return builder.AddConsoleWithFormatter(ConsoleFormatterNames.Simple, configure); } + /// + /// Add a console log formatter named 'json' to the factory with default properties. + /// + /// The to use. + public static ILoggingBuilder AddJsonConsole(this ILoggingBuilder builder) => + builder.AddFormatterWithName(ConsoleFormatterNames.Json); + /// /// Add and configure a console log formatter named 'json' to the factory. /// @@ -79,6 +86,13 @@ public static ILoggingBuilder AddSystemdConsole(this ILoggingBuilder builder, Ac return builder.AddConsoleWithFormatter(ConsoleFormatterNames.Systemd, configure); } + /// + /// Add a console log formatter named 'systemd' to the factory with default properties. + /// + /// The to use. + public static ILoggingBuilder AddSystemdConsole(this ILoggingBuilder builder) => + builder.AddFormatterWithName(ConsoleFormatterNames.Systemd); + internal static ILoggingBuilder AddConsoleWithFormatter(this ILoggingBuilder builder, string name, Action configure) where TOptions : ConsoleFormatterOptions { @@ -86,12 +100,15 @@ internal static ILoggingBuilder AddConsoleWithFormatter(this ILoggingB { throw new ArgumentNullException(nameof(configure)); } - builder.AddConsole((ConsoleLoggerOptions options) => options.FormatterName = name); + builder.AddFormatterWithName(name); builder.Services.Configure(configure); return builder; } + private static ILoggingBuilder AddFormatterWithName(this ILoggingBuilder builder, string name) => + builder.AddConsole((ConsoleLoggerOptions options) => options.FormatterName = name); + /// /// Adds a custom console logger formatter 'TFormatter' to be configured with options 'TOptions'. /// diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs b/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs index 85a643012c8298..a42eaf62cf176f 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs @@ -199,7 +199,7 @@ public void AddSystemdConsole_ChangeProperties_IsReadFromLoggingConfiguration() var loggerProvider = new ServiceCollection() .AddLogging(builder => builder .AddConfiguration(configuration) - .AddSystemdConsole(o => {}) + .AddSystemdConsole() ) .BuildServiceProvider() .GetRequiredService(); @@ -213,6 +213,37 @@ public void AddSystemdConsole_ChangeProperties_IsReadFromLoggingConfiguration() Assert.True(formatter.FormatterOptions.IncludeScopes); } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] + [ActiveIssue("https://github.com/dotnet/runtime/issues/38337", TestPlatforms.Browser)] + public void AddSystemdConsole_OutsideConfig_TakesProperty() + { + var configuration = new ConfigurationBuilder().AddInMemoryCollection(new[] { + new KeyValuePair("Console:FormatterOptions:TimestampFormat", "HH:mm "), + new KeyValuePair("Console:FormatterOptions:UseUtcTimestamp", "true"), + new KeyValuePair("Console:FormatterOptions:IncludeScopes", "true"), + }).Build(); + + var loggerProvider = new ServiceCollection() + .AddLogging(builder => builder + .AddConfiguration(configuration) + .AddSystemdConsole(o => { + o.TimestampFormat = "HH:mm:ss "; + o.IncludeScopes = false; + o.UseUtcTimestamp = false; + }) + ) + .BuildServiceProvider() + .GetRequiredService(); + + var consoleLoggerProvider = Assert.IsType(loggerProvider); + var logger = (ConsoleLogger)consoleLoggerProvider.CreateLogger("Category"); + Assert.Equal(ConsoleFormatterNames.Systemd, logger.Options.FormatterName); + var formatter = Assert.IsType(logger.Formatter); + Assert.Equal("HH:mm:ss ", formatter.FormatterOptions.TimestampFormat); + Assert.False(formatter.FormatterOptions.UseUtcTimestamp); + Assert.False(formatter.FormatterOptions.IncludeScopes); + } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [ActiveIssue("https://github.com/dotnet/runtime/issues/38337", TestPlatforms.Browser)] public void AddJsonConsole_ChangeProperties_IsReadFromLoggingConfiguration() @@ -227,7 +258,7 @@ public void AddJsonConsole_ChangeProperties_IsReadFromLoggingConfiguration() var loggerProvider = new ServiceCollection() .AddLogging(builder => builder .AddConfiguration(configuration) - .AddJsonConsole(o => {}) + .AddJsonConsole() ) .BuildServiceProvider() .GetRequiredService(); From d112091371f9a4cecc9a39f3840515c723442755 Mon Sep 17 00:00:00 2001 From: Maryam Ariyan Date: Tue, 21 Jul 2020 10:54:25 -0700 Subject: [PATCH 2/2] Feedback from API review --- .../Microsoft.Extensions.Logging.Console.cs | 1 + .../src/ConsoleLoggerExtensions.cs | 7 ++++ .../tests/ConsoleLoggerExtensionsTests.cs | 33 ++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs b/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs index 0fa1cc64a108ae..c7ed2ea8cd4f04 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/ref/Microsoft.Extensions.Logging.Console.cs @@ -14,6 +14,7 @@ public static partial class ConsoleLoggerExtensions public static Microsoft.Extensions.Logging.ILoggingBuilder AddConsoleFormatter(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) where TFormatter : Microsoft.Extensions.Logging.Console.ConsoleFormatter where TOptions : Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddJsonConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddJsonConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } + public static Microsoft.Extensions.Logging.ILoggingBuilder AddSimpleConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddSimpleConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddSystemdConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder) { throw null; } public static Microsoft.Extensions.Logging.ILoggingBuilder AddSystemdConsole(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure) { throw null; } diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs b/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs index 81ceba92888925..2e591ec819fcec 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs @@ -49,6 +49,13 @@ public static ILoggingBuilder AddConsole(this ILoggingBuilder builder, Action + /// Add the default console log formatter named 'simple' to the factory with default properties. + /// + /// The to use. + public static ILoggingBuilder AddSimpleConsole(this ILoggingBuilder builder) => + builder.AddFormatterWithName(ConsoleFormatterNames.Simple); + /// /// Add and configure a console log formatter named 'simple' to the factory. /// diff --git a/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs b/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs index a42eaf62cf176f..09388a106b5bdd 100644 --- a/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs +++ b/src/libraries/Microsoft.Extensions.Logging.Console/tests/ConsoleLoggerExtensionsTests.cs @@ -170,7 +170,7 @@ public void AddSimpleConsole_ChangeProperties_IsReadFromLoggingConfiguration() var loggerProvider = new ServiceCollection() .AddLogging(builder => builder .AddConfiguration(configuration) - .AddSimpleConsole(o => {}) + .AddSimpleConsole() ) .BuildServiceProvider() .GetRequiredService(); @@ -186,6 +186,37 @@ public void AddSimpleConsole_ChangeProperties_IsReadFromLoggingConfiguration() Assert.True(formatter.FormatterOptions.IncludeScopes); } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] + [ActiveIssue("https://github.com/dotnet/runtime/issues/38337", TestPlatforms.Browser)] + public void AddSimpleConsole_OutsideConfig_TakesProperty() + { + var configuration = new ConfigurationBuilder().AddInMemoryCollection(new[] { + new KeyValuePair("Console:FormatterOptions:TimestampFormat", "HH:mm "), + new KeyValuePair("Console:FormatterOptions:UseUtcTimestamp", "true"), + new KeyValuePair("Console:FormatterOptions:IncludeScopes", "false"), + }).Build(); + + var loggerProvider = new ServiceCollection() + .AddLogging(builder => builder + .AddConfiguration(configuration) + .AddSimpleConsole(o => { + o.TimestampFormat = "HH:mm:ss "; + o.IncludeScopes = false; + o.UseUtcTimestamp = true; + }) + ) + .BuildServiceProvider() + .GetRequiredService(); + + var consoleLoggerProvider = Assert.IsType(loggerProvider); + var logger = (ConsoleLogger)consoleLoggerProvider.CreateLogger("Category"); + Assert.Equal(ConsoleFormatterNames.Simple, logger.Options.FormatterName); + var formatter = Assert.IsType(logger.Formatter); + Assert.Equal("HH:mm:ss ", formatter.FormatterOptions.TimestampFormat); + Assert.False(formatter.FormatterOptions.IncludeScopes); + Assert.True(formatter.FormatterOptions.UseUtcTimestamp); + } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [ActiveIssue("https://github.com/dotnet/runtime/issues/38337", TestPlatforms.Browser)] public void AddSystemdConsole_ChangeProperties_IsReadFromLoggingConfiguration()