new logging system

This commit is contained in:
2022-11-17 18:27:43 +06:00
parent 20f2c7c7e7
commit a94dd76799
15 changed files with 281 additions and 5 deletions

View File

@@ -0,0 +1,38 @@
namespace DTLib.Logging.New;
/// <summary>
/// This class can be used for unite many loggers into one
/// </summary>
public class CompositeLogger : ILogger
{
public ILogFormat Format { get; }
protected ILogger[] _loggers;
public CompositeLogger(ILogFormat format, params ILogger[] loggers)
{
Format = format;
_loggers = loggers;
}
public CompositeLogger(params ILogger[] loggers) : this(new DefaultLogFormat(), loggers)
{}
public void Log(string context, LogSeverity severity, object message, ILogFormat format)
{
for (int i = 0; i < _loggers.Length; i++)
_loggers[i].Log(context, severity, message, format);
}
public void Log(string context, LogSeverity severity, object message)
=> Log(context, severity, message, Format);
public void Dispose()
{
for (int i = 0; i < _loggers.Length; i++)
{
_loggers[i].Dispose();
}
}
}

View File

@@ -0,0 +1,33 @@
namespace DTLib.Logging.New;
// вывод лога в консоль и файл
public class ConsoleLogger : ILogger
{
readonly object consolelocker = new();
public ILogFormat Format { get; }
public ConsoleLogger(ILogFormat format)
=> Format = format;
public ConsoleLogger() : this(new DefaultLogFormat())
{}
public void Log(string context, LogSeverity severity, object message, ILogFormat format)
{
var msg = format.CreateMessage(context, severity, message);
lock (consolelocker)
ColoredConsole.Write(msg);
}
public void Log(string context, LogSeverity severity, object message)
=> Log(context, severity, message, Format);
public void Dispose()
{
lock (consolelocker) {}
}
~ConsoleLogger() => Dispose();
}

View File

@@ -0,0 +1,52 @@
namespace DTLib.Logging.New;
public class FileLogger : ILogger
{
public ILogFormat Format { get; }
public string LogfileName { get; protected set; }
public System.IO.FileStream LogfileStream { get; protected set; }
public FileLogger(string logfile, ILogFormat format)
{
Format = format;
LogfileName = logfile;
LogfileStream = File.OpenAppend(logfile);
}
public FileLogger(string logfile) : this(logfile, new DefaultLogFormat())
{}
public FileLogger(string dir, string programName, ILogFormat format)
: this($"{dir}{Путь.Разд}{programName}_{DateTime.Now.ToString(MyTimeFormat.ForFileNames)}.log", format)
{}
public FileLogger(string dir, string programName) : this(dir, programName, new DefaultLogFormat())
{}
public void Log(string context, LogSeverity severity, object message, ILogFormat format)
{
var msg = format.CreateMessage(context, severity, format).ToBytes(StringConverter.UTF8);
lock (LogfileStream)
{
LogfileStream.Write(msg);
LogfileStream.Flush();
}
}
public void Log(string context, LogSeverity severity, object message)
=> Log(context, severity, message, Format);
public virtual void Dispose()
{
try
{
LogfileStream?.Flush();
LogfileStream?.Close();
LogfileStream?.Dispose();
}
catch (ObjectDisposedException) { }
}
~FileLogger() => Dispose();
}

View File

@@ -0,0 +1,9 @@
namespace DTLib.Logging.New;
public interface ILogger : IDisposable
{
ILogFormat Format { get; }
void Log(string context, LogSeverity severity, object message);
void Log(string context, LogSeverity severity, object message, ILogFormat format);
}