DTLib/DTLib.Logging/Loggers/ConsoleLogger.cs
2023-02-11 23:25:39 +06:00

55 lines
1.5 KiB
C#

using DTLib.Console;
namespace DTLib.Logging.New;
// вывод лога в консоль и файл
public class ConsoleLogger : ILogger
{
public bool DebugLogEnabled { get; set; } =
#if DEBUG
true;
#else
false;
#endif
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;
public ConsoleLogger() : this(new DefaultLogFormat())
{}
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);
}
private static ConsoleColor ColorFromSeverity(LogSeverity severity)
=> severity switch
{
LogSeverity.Debug => ConsoleColor.Gray,
LogSeverity.Info => ConsoleColor.White,
LogSeverity.Warn => ConsoleColor.Yellow,
LogSeverity.Error => ConsoleColor.Red,
_ => throw new ArgumentOutOfRangeException(nameof(severity), severity, null)
};
public void Dispose()
{
lock (consolelocker) {}
}
~ConsoleLogger() => Dispose();
}