implemented CurrentMinimumLogLevel in ILogger and SerilogLogger

master
Jonas Arnold 3 years ago
parent 5ad927dc29
commit c01556ba8d
  1. 9
      Common/Logging/ILogger.cs
  2. 12
      Common/Logging/SerilogLogger.cs

@ -8,10 +8,17 @@
public interface ILogger public interface ILogger
{ {
/// <summary> /// <summary>
/// Event that is thrown whenever a new log entry was entered with any Log method. /// Event that is thrown for all new log entries that have higher or equal log level to the <see cref="CurrentMinimumLogLevel"/>.
/// </summary> /// </summary>
event EventHandler<NewLogEntryEventArgs>? NewLogEntry; event EventHandler<NewLogEntryEventArgs>? NewLogEntry;
/// <summary>
/// Currently configured minimum log level.
/// Log entries that are written with lower <see cref="LogLevel"/> than the configured <see cref="CurrentMinimumLogLevel"/> are not logged.
/// Also the <see cref="NewLogEntry"/> event is not thrown.
/// </summary>
LogLevel CurrentMinimumLogLevel { get; }
/// <summary> /// <summary>
/// Initialize the Logger once before using it. /// Initialize the Logger once before using it.
/// Sets the minimum<see cref="Logging.LogLevel"/> to <see cref="Logging.LogLevel.Trace"/>. Therefore all log entries will be logged. /// Sets the minimum<see cref="Logging.LogLevel"/> to <see cref="Logging.LogLevel.Trace"/>. Therefore all log entries will be logged.

@ -12,8 +12,12 @@ namespace Common.Logger;
public class SerilogLogger : Logging.ILogger public class SerilogLogger : Logging.ILogger
{ {
private readonly LoggingLevelSwitch loggingLevelSwitch; private readonly LoggingLevelSwitch loggingLevelSwitch;
public event EventHandler<NewLogEntryEventArgs>? NewLogEntry; public event EventHandler<NewLogEntryEventArgs>? NewLogEntry;
public LogLevel CurrentMinimumLogLevel { get; private set; } = LogLevel.Undefined;
/// <summary> /// <summary>
/// Constructor of a Logger that uses the Serilog package to create log entries and distributes them into different sinks. /// Constructor of a Logger that uses the Serilog package to create log entries and distributes them into different sinks.
/// </summary> /// </summary>
@ -67,6 +71,7 @@ public class SerilogLogger : Logging.ILogger
public void SetMinimumLogLevel(LogLevel newMinimumLogLevel) public void SetMinimumLogLevel(LogLevel newMinimumLogLevel)
{ {
this.loggingLevelSwitch.MinimumLevel = this.ConvertGenericToSerilogLogLevel(newMinimumLogLevel); this.loggingLevelSwitch.MinimumLevel = this.ConvertGenericToSerilogLogLevel(newMinimumLogLevel);
this.CurrentMinimumLogLevel = newMinimumLogLevel;
} }
private LogEventLevel ConvertGenericToSerilogLogLevel(LogLevel newMinimumLogLevel) => newMinimumLogLevel switch private LogEventLevel ConvertGenericToSerilogLogLevel(LogLevel newMinimumLogLevel) => newMinimumLogLevel switch
@ -88,6 +93,7 @@ public class SerilogLogger : Logging.ILogger
private void CreateLogEntry(LogEntry logEntry) private void CreateLogEntry(LogEntry logEntry)
{ {
var serilogEventLevel = this.ConvertGenericToSerilogLogLevel(logEntry.LogLevel); var serilogEventLevel = this.ConvertGenericToSerilogLogLevel(logEntry.LogLevel);
// formatting is done inside logEntry.ToString() method => therefore log plain message text with right category // formatting is done inside logEntry.ToString() method => therefore log plain message text with right category
switch (serilogEventLevel) switch (serilogEventLevel)
{ {
@ -118,6 +124,12 @@ public class SerilogLogger : Logging.ILogger
default: default:
throw new NotImplementedException($"'{nameof(CreateLogEntry)}()' does not contain an implementation for {nameof(LogEventLevel)} {serilogEventLevel}."); throw new NotImplementedException($"'{nameof(CreateLogEntry)}()' does not contain an implementation for {nameof(LogEventLevel)} {serilogEventLevel}.");
} }
// Raise event (only if the log is wanted due to the configured log level)
if (logEntry.LogLevel <= this.CurrentMinimumLogLevel)
{
this.NewLogEntry?.Invoke(this, new NewLogEntryEventArgs(logEntry));
}
} }

Loading…
Cancel
Save