some logger changes

This commit is contained in:
Timerix22 2022-07-01 17:53:57 +03:00
parent d63d4eb7d8
commit 72142634a9
4 changed files with 37 additions and 49 deletions

View File

@ -17,7 +17,7 @@ namespace DTLib.Tests;
public static class Program public static class Program
{ {
public static readonly DefaultLogger Info = new(); public static readonly ConsoleLogger Info = new();
public static void Main() public static void Main()
{ {
Info.Enable(); Info.Enable();

View File

@ -1,36 +0,0 @@
using System.Globalization;
namespace DTLib.Loggers;
// вывод лога в консоль и файл
public class AsyncLogger : BaseLogger
{
public AsyncLogger(string logfile) : base(logfile) { }
public AsyncLogger(string dir, string programName) : base(dir, programName) { }
readonly object consolelocker = new();
public override void Log(params string[] msg)
{
lock (statelocker) if (!IsEnabled) return;
// добавление даты
if (msg.Length == 1) msg[0] = "[" + DateTime.Now.ToString(CultureInfo.InvariantCulture) + "]: " + msg[0];
else msg[1] = "[" + DateTime.Now.ToString(CultureInfo.InvariantCulture) + "]: " + msg[1];
// перенос строки
msg[msg.Length - 1] += '\n';
// вывод в консоль
lock (consolelocker)
ColoredConsole.Write(msg);
// вывод в файл
if (msg.Length == 1)
lock (Logfile) File.AppendAllText(Logfile, msg[0]);
else
{
StringBuilder strB = new();
for (ushort i = 0; i < msg.Length; i++)
strB.Append(msg[++i]);
lock (Logfile) File.AppendAllText(Logfile, strB.ToString());
}
}
public void LogAsync(params string[] msg) => Task.Run(() => Log(msg));
}

View File

@ -1,14 +1,24 @@
namespace DTLib.Loggers; using System.IO;
using File = DTLib.Filesystem.File;
public abstract class BaseLogger namespace DTLib.Loggers;
public abstract class BaseLogger : IDisposable
{ {
public BaseLogger() { } public BaseLogger() { }
public BaseLogger(string logfile) => (Logfile, WriteToFile) = (logfile,true); public BaseLogger(string logfile)
{
WriteToFile=true;
LogfileName = logfile;
LogfileStream = File.OpenWrite(logfile);
}
public BaseLogger(string dir, string programName) public BaseLogger(string dir, string programName)
: this($"{dir}\\{programName}_{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_')) { } : this($"{dir}\\{programName}_{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_')) { }
public string Logfile { get; init; } public string LogfileName;
public FileStream LogfileStream { get; init; }
public bool IsEnabled { get; private set; } = false; public bool IsEnabled { get; private set; } = false;
public bool WriteToFile { get; private set; } = false; public bool WriteToFile { get; private set; } = false;
protected readonly object statelocker = new(); protected readonly object statelocker = new();
@ -16,4 +26,12 @@ public abstract class BaseLogger
public void Enable() { lock (statelocker) IsEnabled = true; } public void Enable() { lock (statelocker) IsEnabled = true; }
public abstract void Log(params string[] msg); public abstract void Log(params string[] msg);
public virtual void Dispose()
{
LogfileStream?.Flush();
LogfileStream?.Close();
}
~BaseLogger() => Dispose();
} }

View File

@ -3,12 +3,12 @@
namespace DTLib.Loggers; namespace DTLib.Loggers;
// вывод лога в консоль и файл // вывод лога в консоль и файл
public class DefaultLogger : BaseLogger public class ConsoleLogger : BaseLogger
{ {
public DefaultLogger() => Logfile = ""; public ConsoleLogger() : base() {}
public DefaultLogger(string logfile) : base(logfile) { } public ConsoleLogger(string logfile) : base(logfile){}
public ConsoleLogger(string dir, string programName) : base(dir, programName) {}
public DefaultLogger(string dir, string programName) : base(dir, programName) { }
public override void Log(params string[] msg) public override void Log(params string[] msg)
{ {
@ -18,22 +18,28 @@ public class DefaultLogger : BaseLogger
LogNoTime(msg); LogNoTime(msg);
} }
readonly object consolelocker = new();
public void LogNoTime(params string[] msg) public void LogNoTime(params string[] msg)
{ {
lock (statelocker) if (!IsEnabled) return; lock (statelocker) if (!IsEnabled) return;
msg[msg.Length - 1] += '\n'; msg[msg.Length - 1] += '\n';
ColoredConsole.Write(msg); lock (consolelocker)
ColoredConsole.Write(msg);
if (WriteToFile) if (WriteToFile)
{ {
if (msg.Length == 1) if (msg.Length == 1)
lock (Logfile) File.AppendAllText(Logfile, msg[0]); lock (LogfileStream) LogfileStream.Write(msg[0].ToBytes());
else else
{ {
StringBuilder strB = new(); StringBuilder strB = new();
for (ushort i = 0; i < msg.Length; i++) for (ushort i = 0; i < msg.Length; i++)
strB.Append(msg[++i]); strB.Append(msg[++i]);
lock (Logfile) File.AppendAllText(Logfile, strB.ToString()); lock (LogfileStream) LogfileStream.Write(strB.ToString().ToBytes());
} }
} }
} }
public void LogAsync(params string[] msg) => Task.Run(() => Log(msg));
} }