diff --git a/src/libraries/Microsoft.Extensions.Logging/tests/Common/LoggerMessageTest.cs b/src/libraries/Microsoft.Extensions.Logging/tests/Common/LoggerMessageTest.cs index 49e2a17c54fd83..d71b27f093505e 100644 --- a/src/libraries/Microsoft.Extensions.Logging/tests/Common/LoggerMessageTest.cs +++ b/src/libraries/Microsoft.Extensions.Logging/tests/Common/LoggerMessageTest.cs @@ -191,6 +191,38 @@ public void LogMessages(Delegate messageDelegate, int argumentCount) var actualLogValues = Assert.IsAssignableFrom>>(write.State); AssertLogValues(expectedValues, actualLogValues.ToList()); Assert.Equal(expectedToString, actualLogValues.ToString()); + Assert.Equal(2, testLogger.IsEnabledCallCount); + } + + [Theory] + [MemberData(nameof(LogMessagesDataSkipEnabledCheck))] + public void LogMessagesSkipEnabledCheck(Delegate messageDelegate, int argumentCount) + { + // Arrange + var testSink = new TestSink(); + var testLogger = new TestLogger("testlogger", testSink, enabled: true); + var exception = new Exception("TestException"); + var parameterNames = Enumerable.Range(0, argumentCount).Select(i => "P" + i).ToArray(); + var parameters = new List(); + parameters.Add(testLogger); + parameters.AddRange(parameterNames); + parameters.Add(exception); + + var expectedFormat = "Log " + string.Join(" ", parameterNames.Select(p => "{" + p + "}")); + var expectedToString = "Log " + string.Join(" ", parameterNames); + var expectedValues = parameterNames.Select(p => new KeyValuePair(p, p)).ToList(); + expectedValues.Add(new KeyValuePair("{OriginalFormat}", expectedFormat)); + + // Act + messageDelegate.DynamicInvoke(parameters.ToArray()); + + // Assert + Assert.Single(testSink.Writes); + var write = testSink.Writes.First(); + var actualLogValues = Assert.IsAssignableFrom>>(write.State); + AssertLogValues(expectedValues, actualLogValues.ToList()); + Assert.Equal(expectedToString, actualLogValues.ToString()); + Assert.Equal(1, testLogger.IsEnabledCallCount); } [Fact] @@ -392,6 +424,17 @@ public void DefineAndDefineScope_ThrowsException_WhenFormatString_IsNull(Delegat new object[] { LoggerMessage.Define(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}"), 6 }, }; + public static IEnumerable LogMessagesDataSkipEnabledCheck => new[] + { + new object[] { LoggerMessage.Define(LogLevel.Error, 0, "Log ", skipEnabledCheck: true), 0 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 1, "Log {P0}", skipEnabledCheck: true), 1 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 2, "Log {P0} {P1}", skipEnabledCheck: true), 2 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 3, "Log {P0} {P1} {P2}", skipEnabledCheck: true), 3 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 4, "Log {P0} {P1} {P2} {P3}", skipEnabledCheck: true), 4 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 5, "Log {P0} {P1} {P2} {P3} {P4}", skipEnabledCheck: true), 5 }, + new object[] { LoggerMessage.Define(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}", skipEnabledCheck: true), 6 }, + }; + private delegate Delegate Define(LogLevel logLevel, EventId eventId, string formatString); private delegate Delegate DefineScope(string formatString); private static object[] DefineInvalidParameters => new object[] { LogLevel.Error, new EventId(0), null }; diff --git a/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/TestLogger.cs b/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/TestLogger.cs index bf625b178ccc65..4774e963d80403 100644 --- a/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/TestLogger.cs +++ b/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/TestLogger.cs @@ -25,6 +25,7 @@ public TestLogger(string name, ITestSink sink, Func filter) } public string Name { get; set; } + public int IsEnabledCallCount { get; private set; } public IDisposable BeginScope(TState state) { @@ -60,6 +61,7 @@ public void Log(LogLevel logLevel, EventId eventId, TState state, Except public bool IsEnabled(LogLevel logLevel) { + IsEnabledCallCount++; return logLevel != LogLevel.None && _filter(logLevel); }