new logging system
This commit is contained in:
38
DTLib.Logging/Loggers/CompositeLogger.cs
Normal file
38
DTLib.Logging/Loggers/CompositeLogger.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
33
DTLib.Logging/Loggers/ConsoleLogger.cs
Normal file
33
DTLib.Logging/Loggers/ConsoleLogger.cs
Normal 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();
|
||||
}
|
||||
52
DTLib.Logging/Loggers/FileLogger.cs
Normal file
52
DTLib.Logging/Loggers/FileLogger.cs
Normal 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();
|
||||
}
|
||||
9
DTLib.Logging/Loggers/ILogger.cs
Normal file
9
DTLib.Logging/Loggers/ILogger.cs
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user