some logger changes
This commit is contained in:
parent
d63d4eb7d8
commit
72142634a9
@ -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();
|
||||||
|
|||||||
@ -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));
|
|
||||||
}
|
|
||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,13 +3,13 @@
|
|||||||
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)
|
||||||
{
|
{
|
||||||
lock (statelocker) if (!IsEnabled) return;
|
lock (statelocker) if (!IsEnabled) return;
|
||||||
@ -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));
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user