From 0b5ba1a6e7b9130e115e634f5fae183e38a5cdd3 Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Thu, 17 Nov 2022 22:07:15 +0600 Subject: [PATCH] Severity checking --- .../DependencyInjection/MyLoggerWrapper.cs | 6 +++--- DTLib.Logging/LogSeverity.cs | 21 +++++++++++++++---- DTLib.Logging/Loggers/CompositeLogger.cs | 8 +++++++ DTLib.Logging/Loggers/ConsoleLogger.cs | 10 ++++++++- DTLib.Logging/Loggers/FileLogger.cs | 7 +++++++ DTLib.Logging/Loggers/ILogger.cs | 6 ++++++ 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/DTLib.Logging/DependencyInjection/MyLoggerWrapper.cs b/DTLib.Logging/DependencyInjection/MyLoggerWrapper.cs index b685344..98bbbef 100644 --- a/DTLib.Logging/DependencyInjection/MyLoggerWrapper.cs +++ b/DTLib.Logging/DependencyInjection/MyLoggerWrapper.cs @@ -5,14 +5,14 @@ namespace DTLib.Logging.DependencyInjection; public class MyLoggerWrapper : Microsoft.Extensions.Logging.ILogger { - private DTLib.Logging.New.ILogger _logger; + public DTLib.Logging.New.ILogger Logger; public MyLoggerWrapper(DTLib.Logging.New.ILogger logger)=> - _logger = logger; + Logger = logger; public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) { string message = formatter(state, exception); - _logger.Log(typeof(TCaller).Name, LogSeverity_FromLogLevel(logLevel), message); + Logger.Log(typeof(TCaller).Name, LogSeverity_FromLogLevel(logLevel), message); } private bool _isEnabled=true; diff --git a/DTLib.Logging/LogSeverity.cs b/DTLib.Logging/LogSeverity.cs index dd8ddec..81d3d67 100644 --- a/DTLib.Logging/LogSeverity.cs +++ b/DTLib.Logging/LogSeverity.cs @@ -2,8 +2,21 @@ namespace DTLib.Logging.New; public enum LogSeverity { - Debug=1, - Info=2, - Warn=4, - Error=8 + Debug, + Info, + Warn, + Error +} + +internal static class LogSeverityHelper +{ + public static bool CheckSeverity(this ILogger logger, LogSeverity severity) + => severity switch + { + LogSeverity.Debug => logger.DebugLogEnabled, + LogSeverity.Info => logger.InfoLogEnabled, + LogSeverity.Warn => logger.WarnLogEnabled, + LogSeverity.Error => logger.ErrorLogenabled, + _ => throw new ArgumentOutOfRangeException(nameof(severity), severity, "unknown severity") + }; } \ No newline at end of file diff --git a/DTLib.Logging/Loggers/CompositeLogger.cs b/DTLib.Logging/Loggers/CompositeLogger.cs index d6a0c0c..2b3a3e2 100644 --- a/DTLib.Logging/Loggers/CompositeLogger.cs +++ b/DTLib.Logging/Loggers/CompositeLogger.cs @@ -5,7 +5,12 @@ namespace DTLib.Logging.New; /// public class CompositeLogger : ILogger { + public bool DebugLogEnabled { get; set; } = true; + public bool InfoLogEnabled { get; set; } = true; + public bool WarnLogEnabled { get; set; } = true; + public bool ErrorLogenabled { get; set; } = true; public ILogFormat Format { get; } + protected ILogger[] _loggers; public CompositeLogger(ILogFormat format, params ILogger[] loggers) @@ -20,6 +25,9 @@ public class CompositeLogger : ILogger public void Log(string context, LogSeverity severity, object message, ILogFormat format) { + if(!this.CheckSeverity(severity)) + return; + for (int i = 0; i < _loggers.Length; i++) _loggers[i].Log(context, severity, message, format); } diff --git a/DTLib.Logging/Loggers/ConsoleLogger.cs b/DTLib.Logging/Loggers/ConsoleLogger.cs index 1674f7a..7a249cf 100644 --- a/DTLib.Logging/Loggers/ConsoleLogger.cs +++ b/DTLib.Logging/Loggers/ConsoleLogger.cs @@ -3,8 +3,13 @@ // вывод лога в консоль и файл public class ConsoleLogger : ILogger { - readonly object consolelocker = new(); + public bool DebugLogEnabled { get; set; } = true; + public bool InfoLogEnabled { get; set; } = true; + public bool WarnLogEnabled { get; set; } = true; + public bool ErrorLogenabled { get; set; } = true; public ILogFormat Format { get; } + + readonly object consolelocker = new(); public ConsoleLogger(ILogFormat format) => Format = format; @@ -15,6 +20,9 @@ public class ConsoleLogger : ILogger public void Log(string context, LogSeverity severity, object message, ILogFormat format) { + if(!this.CheckSeverity(severity)) + return; + var msg = format.CreateMessage(context, severity, message); lock (consolelocker) ColoredConsole.Write(ColorFromSeverity(severity),msg); diff --git a/DTLib.Logging/Loggers/FileLogger.cs b/DTLib.Logging/Loggers/FileLogger.cs index bfd1de7..ae5cfff 100644 --- a/DTLib.Logging/Loggers/FileLogger.cs +++ b/DTLib.Logging/Loggers/FileLogger.cs @@ -2,6 +2,10 @@ public class FileLogger : ILogger { + public bool DebugLogEnabled { get; set; } = true; + public bool InfoLogEnabled { get; set; } = true; + public bool WarnLogEnabled { get; set; } = true; + public bool ErrorLogenabled { get; set; } = true; public ILogFormat Format { get; } public string LogfileName { get; protected set; } @@ -26,6 +30,9 @@ public class FileLogger : ILogger public void Log(string context, LogSeverity severity, object message, ILogFormat format) { + if(!this.CheckSeverity(severity)) + return; + var msg = format.CreateMessage(context, severity, format).ToBytes(StringConverter.UTF8); lock (LogfileStream) { diff --git a/DTLib.Logging/Loggers/ILogger.cs b/DTLib.Logging/Loggers/ILogger.cs index 3fbbdfb..e2643d9 100644 --- a/DTLib.Logging/Loggers/ILogger.cs +++ b/DTLib.Logging/Loggers/ILogger.cs @@ -4,6 +4,12 @@ public interface ILogger : IDisposable { ILogFormat Format { get; } + bool DebugLogEnabled { get; set; } + bool InfoLogEnabled { get; set; } + bool WarnLogEnabled { get; set; } + bool ErrorLogenabled { get; set; } + void Log(string context, LogSeverity severity, object message); void Log(string context, LogSeverity severity, object message, ILogFormat format); + } \ No newline at end of file