Files
EpinelPS/nksrv/Utils/GreatLogger.cs
Mikhail Thompson 1229104086 refactoring
2024-06-28 21:13:21 +03:00

66 lines
1.9 KiB
C#

using Swan.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.Utils
{
public class GreatLogger : ILogger
{
public LogLevel LogLevel => LogLevel.Info;
static readonly object lockObject = new();
public void Log(LogMessageReceivedEventArgs logEvent)
{
var msg = logEvent.Message;
// strip out request id that embedio prints
if (msg.StartsWith('['))
{
msg = msg[(msg.IndexOf("]") + 2)..];
}
// ignore telemtry server errors
if (msg.StartsWith("POST /v2/dr/"))
{
return;
}
var newFG = GetColorForMsg(logEvent);
lock (lockObject)
{
var oldFG = Console.ForegroundColor;
Console.ForegroundColor = newFG;
Console.WriteLine(msg);
Console.ForegroundColor = oldFG;
}
}
private static ConsoleColor GetColorForMsg(LogMessageReceivedEventArgs logEvent)
{
if (logEvent.Message.Contains("404 Not Found"))
return ConsoleColor.Red;
else if (logEvent.Message.Contains("200 OK"))
return ConsoleColor.DarkGreen;
return logEvent.MessageType switch
{
LogLevel.None => ConsoleColor.White,
LogLevel.Trace => ConsoleColor.Gray,
LogLevel.Debug => ConsoleColor.Gray,
LogLevel.Info => ConsoleColor.Gray,
LogLevel.Warning => ConsoleColor.Yellow,
LogLevel.Error => ConsoleColor.Red,
LogLevel.Fatal => ConsoleColor.Red,
_ => ConsoleColor.White,
};
}
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
}