Skip to content

Commit b02968d

Browse files
committed
Observe Microsoft.Extensions.Logging.LogLevel.None
Before this commit: `LogLevel.None` is converted to `LogEventLevel.Fatal` and events with a `None` level are logged as fatal. After this commit: `LogLevel.None` is observed and logs and events with a `None` level are ignored. The `None` level is documented as such: > Not used for writing log messages. Specifies that a logging category should not write any messages. Note: this erroneous behaviour was seen in a real-world scenario: 1. `BuildOrgConnectUri CoreClass ()` is [logged as `TraceEventType.Start `][1] 2. `TraceEventType.Start` is [converted to `LogLevel.None`][2] 3. `LogLevel.None ` is [converted to `LogEventLevel.Fatal`][3] As a result, `BuildOrgConnectUri CoreClass ()` is logged as fatal whereas it should have been ignored. [1]: https://github.com/microsoft/PowerPlatform-DataverseServiceClient/blob/0.6.1/src/GeneralTools/DataverseClient/Client/ConnectionService.cs#L3207 [2]: https://github.com/microsoft/PowerPlatform-DataverseServiceClient/blob/0.6.1/src/GeneralTools/DataverseClient/Client/DataverseTraceLogger.cs#L675 [3]: https://github.com/serilog/serilog-extensions-logging/blob/dev/src/Serilog.Extensions.Logging/Extensions/Logging/LevelConvert.cs#L39
1 parent e25ed7d commit b02968d

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public SerilogLogger(
4444

4545
public bool IsEnabled(LogLevel logLevel)
4646
{
47-
return _logger.IsEnabled(LevelConvert.ToSerilogLevel(logLevel));
47+
return logLevel != LogLevel.None && _logger.IsEnabled(LevelConvert.ToSerilogLevel(logLevel));
4848
}
4949

5050
public IDisposable BeginScope<TState>(TState state)
@@ -54,6 +54,10 @@ public IDisposable BeginScope<TState>(TState state)
5454

5555
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
5656
{
57+
if (logLevel == LogLevel.None)
58+
{
59+
return;
60+
}
5761
var level = LevelConvert.ToSerilogLevel(logLevel);
5862
if (!_logger.IsEnabled(level))
5963
{

test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public void LogsCorrectLevel()
5555
logger.Log(LogLevel.Warning, 0, TestMessage, null, null);
5656
logger.Log(LogLevel.Error, 0, TestMessage, null, null);
5757
logger.Log(LogLevel.Critical, 0, TestMessage, null, null);
58+
logger.Log(LogLevel.None, 0, TestMessage, null, null);
5859

5960
Assert.Equal(6, sink.Writes.Count);
6061
Assert.Equal(LogEventLevel.Verbose, sink.Writes[0].Level);
@@ -65,43 +66,65 @@ public void LogsCorrectLevel()
6566
Assert.Equal(LogEventLevel.Fatal, sink.Writes[5].Level);
6667
}
6768

69+
70+
[Theory]
71+
[InlineData(LogLevel.Trace, true)]
72+
[InlineData(LogLevel.Debug, true)]
73+
[InlineData(LogLevel.Information, true)]
74+
[InlineData(LogLevel.Warning, true)]
75+
[InlineData(LogLevel.Error, true)]
76+
[InlineData(LogLevel.Critical, true)]
77+
[InlineData(LogLevel.None, false)]
78+
public void IsEnabledCorrect(LogLevel logLevel, bool isEnabled)
79+
{
80+
var (logger, _) = SetUp(LogLevel.Trace);
81+
82+
Assert.Equal(isEnabled, logger.IsEnabled(logLevel));
83+
}
84+
6885
[Theory]
6986
[InlineData(LogLevel.Trace, LogLevel.Trace, 1)]
7087
[InlineData(LogLevel.Trace, LogLevel.Debug, 1)]
7188
[InlineData(LogLevel.Trace, LogLevel.Information, 1)]
7289
[InlineData(LogLevel.Trace, LogLevel.Warning, 1)]
7390
[InlineData(LogLevel.Trace, LogLevel.Error, 1)]
7491
[InlineData(LogLevel.Trace, LogLevel.Critical, 1)]
92+
[InlineData(LogLevel.Trace, LogLevel.None, 0)]
7593
[InlineData(LogLevel.Debug, LogLevel.Trace, 0)]
7694
[InlineData(LogLevel.Debug, LogLevel.Debug, 1)]
7795
[InlineData(LogLevel.Debug, LogLevel.Information, 1)]
7896
[InlineData(LogLevel.Debug, LogLevel.Warning, 1)]
7997
[InlineData(LogLevel.Debug, LogLevel.Error, 1)]
8098
[InlineData(LogLevel.Debug, LogLevel.Critical, 1)]
99+
[InlineData(LogLevel.Debug, LogLevel.None, 0)]
81100
[InlineData(LogLevel.Information, LogLevel.Trace, 0)]
82101
[InlineData(LogLevel.Information, LogLevel.Debug, 0)]
83102
[InlineData(LogLevel.Information, LogLevel.Information, 1)]
84103
[InlineData(LogLevel.Information, LogLevel.Warning, 1)]
85104
[InlineData(LogLevel.Information, LogLevel.Error, 1)]
86105
[InlineData(LogLevel.Information, LogLevel.Critical, 1)]
106+
[InlineData(LogLevel.Information, LogLevel.None, 0)]
87107
[InlineData(LogLevel.Warning, LogLevel.Trace, 0)]
88108
[InlineData(LogLevel.Warning, LogLevel.Debug, 0)]
89109
[InlineData(LogLevel.Warning, LogLevel.Information, 0)]
90110
[InlineData(LogLevel.Warning, LogLevel.Warning, 1)]
91111
[InlineData(LogLevel.Warning, LogLevel.Error, 1)]
92112
[InlineData(LogLevel.Warning, LogLevel.Critical, 1)]
113+
[InlineData(LogLevel.Warning, LogLevel.None, 0)]
93114
[InlineData(LogLevel.Error, LogLevel.Trace, 0)]
94115
[InlineData(LogLevel.Error, LogLevel.Debug, 0)]
95116
[InlineData(LogLevel.Error, LogLevel.Information, 0)]
96117
[InlineData(LogLevel.Error, LogLevel.Warning, 0)]
97118
[InlineData(LogLevel.Error, LogLevel.Error, 1)]
98119
[InlineData(LogLevel.Error, LogLevel.Critical, 1)]
120+
[InlineData(LogLevel.Error, LogLevel.None, 0)]
99121
[InlineData(LogLevel.Critical, LogLevel.Trace, 0)]
100122
[InlineData(LogLevel.Critical, LogLevel.Debug, 0)]
101123
[InlineData(LogLevel.Critical, LogLevel.Information, 0)]
102124
[InlineData(LogLevel.Critical, LogLevel.Warning, 0)]
103125
[InlineData(LogLevel.Critical, LogLevel.Error, 0)]
104126
[InlineData(LogLevel.Critical, LogLevel.Critical, 1)]
127+
[InlineData(LogLevel.Critical, LogLevel.None, 0)]
105128
public void LogsWhenEnabled(LogLevel minLevel, LogLevel logLevel, int expected)
106129
{
107130
var (logger, sink) = SetUp(minLevel);

0 commit comments

Comments
 (0)