AyCode.Core/AyCode.Core/Logger/Logger.cs

86 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using AyCode.Core.Consts;
using AyCode.Core.Enums;
namespace AyCode.Core.Logger
{
public static class Logger
{
public static LogLevel LogLevel { get; set; } = LogLevel.Detail;
public static AppType AppType { get; set; } = AppType.Server;
public static void Detail(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Detail, GetDiagnosticText(LogLevel.Detail, text, memberName, null));
public static void Debug(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Debug, GetDiagnosticText(LogLevel.Debug, text, memberName, null));
public static void Info(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Info, GetDiagnosticText(LogLevel.Info, text, memberName, null));
public static void Warning(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Warning, GetDiagnosticText(LogLevel.Warning, text, memberName, null));
public static void Suggest(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Suggest, GetDiagnosticText(LogLevel.Suggest, text, memberName, null));
public static void Error(string text, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, null));
public static void Error(string text, Exception ex, [CallerMemberName] string? memberName = null)
=> WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, ex));
private static void WriteToConsole(LogLevel logLevel, string text)
{
if (logLevel < LogLevel) return;
//lock (ForWriterLock)
{
//if (logLevel > LogLevel.Trace && logLevel < LogLevel.Suggest)
{
Console.WriteLine(text);
return;
}
if (logLevel <= LogLevel.Trace)
{
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(text);
}
else if (logLevel == LogLevel.Suggest)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(text);
}
else
{
Console.ForegroundColor = logLevel == LogLevel.Warning ? ConsoleColor.Yellow : ConsoleColor.Red;
Console.WriteLine($"{AcEnv.NL}{text}{AcEnv.NL}");
}
Console.ForegroundColor = ConsoleColor.White;
}
}
private static string GetDiagnosticText(LogLevel logLevel, string logText, string? callerName, Exception? ex)
{
var threadId = Environment.CurrentManagedThreadId;
return $"[{DateTime.Now:HH:mm:ss.fff}] [{AppType.ToString()[0]}] {"[" + logLevel + "]",-9} {"[...->" + callerName + "]",-54} {"[" + threadId + "]",5} {logText}{ErrorText(ex)}";
}
private static string ErrorText(Exception? ex)
{
if (ex == null) return string.Empty;
var errorType = ex.GetType().Name;
return string.IsNullOrWhiteSpace(errorType) ? string.Empty : $"{Environment.NewLine}[{errorType.ToUpper()}]: {ex}";
}
}
}