IW4M-Admin/Application/Misc/Logger.cs

133 lines
3.3 KiB
C#
Raw Normal View History

using IW4MAdmin.Application.IO;
using SharedLibraryCore;
using SharedLibraryCore.Interfaces;
using System;
using System.Diagnostics;
2017-05-27 19:29:20 -04:00
using System.IO;
using System.Threading;
2017-05-27 19:29:20 -04:00
namespace IW4MAdmin.Application
2017-05-27 19:29:20 -04:00
{
public class Logger : ILogger
2017-05-27 19:29:20 -04:00
{
enum LogType
{
2017-05-27 19:29:20 -04:00
Verbose,
Info,
Debug,
Warning,
2017-11-13 16:58:23 -05:00
Error,
Assert
2017-05-27 19:29:20 -04:00
}
readonly string FileName;
readonly ReaderWriterLockSlim WritingLock;
static readonly short MAX_LOG_FILES = 10;
2017-05-27 19:29:20 -04:00
public Logger(string fn)
{
FileName = Path.Join(Utilities.OperatingDirectory, "Log", $"{fn}.log");
WritingLock = new ReaderWriterLockSlim();
RotateLogs();
}
~Logger()
{
WritingLock.Dispose();
}
/// <summary>
/// rotates logs when log is initialized
/// </summary>
private void RotateLogs()
{
string maxLog = FileName + MAX_LOG_FILES;
if (File.Exists(maxLog))
{
File.Delete(maxLog);
}
for (int i = MAX_LOG_FILES - 1; i >= 0; i--)
{
string logToMove = i == 0 ? FileName : FileName + i;
string movedLogName = FileName + (i + 1);
if (File.Exists(logToMove))
{
File.Move(logToMove, movedLogName);
}
}
2017-05-27 19:29:20 -04:00
}
void Write(string msg, LogType type)
2017-05-27 19:29:20 -04:00
{
WritingLock.EnterWriteLock();
string stringType = type.ToString();
msg = msg.StripColors();
try
{
stringType = Utilities.CurrentLocalization.LocalizationIndex[$"GLOBAL_{type.ToString().ToUpper()}"];
}
catch (Exception) { }
string LogLine = $"[{DateTime.Now.ToString("MM.dd.yyy HH:mm:ss.fff")}] - {stringType}: {msg}";
try
{
2017-05-27 19:29:20 -04:00
#if DEBUG
// lets keep it simple and dispose of everything quickly as logging wont be that much (relatively)
Console.WriteLine(msg);
2017-05-27 19:29:20 -04:00
#else
if (type == LogType.Error || type == LogType.Verbose)
{
Console.WriteLine(LogLine);
}
2019-09-27 16:53:52 -04:00
File.AppendAllText(FileName, $"{LogLine}{Environment.NewLine}");
2017-05-27 19:29:20 -04:00
#endif
}
catch (Exception ex)
{
Console.WriteLine("Well.. It looks like your machine can't event write to the log file. That's something else...");
Console.WriteLine(ex.GetExceptionInfo());
}
WritingLock.ExitWriteLock();
2017-05-27 19:29:20 -04:00
}
public void WriteVerbose(string msg)
{
Write(msg, LogType.Verbose);
}
public void WriteDebug(string msg)
{
Write(msg, LogType.Debug);
}
public void WriteError(string msg)
{
Write(msg, LogType.Error);
}
public void WriteInfo(string msg)
{
Write(msg, LogType.Info);
}
public void WriteWarning(string msg)
{
Write(msg, LogType.Warning);
}
2017-11-13 16:58:23 -05:00
public void WriteAssert(bool condition, string msg)
{
if (!condition)
Write(msg, LogType.Assert);
}
2017-05-27 19:29:20 -04:00
}
}