Files
DanhengServer-OpenSource/Common/Util/Logger.cs
2024-03-03 14:13:48 +08:00

129 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Util
{
public class Logger
{
private readonly string ModuleName;
private static FileInfo LogFile;
public Logger(string moduleName)
{
ModuleName = moduleName;
}
public void Log(string message, LoggerLevel level)
{
Console.Write("[");
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.Write(DateTime.Now.ToString("HH:mm:ss"));
Console.ResetColor();
Console.Write("] ");
Console.Write("[");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.Write(ModuleName);
Console.ResetColor();
Console.Write("] ");
Console.Write("[");
Console.ForegroundColor = (ConsoleColor)level;
Console.Write(level);
Console.ResetColor();
Console.WriteLine("] " + message);
var logMessage = $"[{DateTime.Now:HH:mm:ss}] [{ModuleName}] [{level}] {message}";
WriteToFile(logMessage);
}
public void Info(string message, Exception e = null)
{
Log(message, LoggerLevel.INFO);
if (e != null)
{
Log(e.Message, LoggerLevel.INFO);
Log(e.StackTrace, LoggerLevel.INFO);
}
}
public void Warn(string message, Exception e = null)
{
Log(message, LoggerLevel.WARN);
if (e != null)
{
Log(e.Message, LoggerLevel.WARN);
Log(e.StackTrace, LoggerLevel.WARN);
}
}
public void Error(string message, Exception e = null)
{
Log(message, LoggerLevel.ERROR);
if (e != null)
{
Log(e.Message, LoggerLevel.ERROR);
Log(e.StackTrace, LoggerLevel.ERROR);
}
}
public void Fatal(string message, Exception e = null)
{
Log(message, LoggerLevel.FATAL);
if (e != null)
{
Log(e.Message, LoggerLevel.FATAL);
Log(e.StackTrace, LoggerLevel.FATAL);
}
}
public void Debug(string message, Exception e = null)
{
Log(message, LoggerLevel.DEBUG);
if (e != null)
{
Log(e.Message, LoggerLevel.DEBUG);
Log(e.StackTrace, LoggerLevel.DEBUG);
}
}
public static void SetLogFile(FileInfo file)
{
LogFile = file;
}
public static void WriteToFile(string message)
{
if (LogFile == null)
{
throw new Exception("LogFile is not set");
}
using (StreamWriter sw = LogFile.AppendText())
{
sw.WriteLine(message);
}
}
#pragma warning disable CS8602
public static Logger GetByClassName() => new(new StackTrace().GetFrame(1).GetMethod().ReflectedType.Name);
#pragma warning restore CS8602
}
public enum LoggerLevel
{
INFO = ConsoleColor.Cyan,
WARN = ConsoleColor.Yellow,
ERROR = ConsoleColor.Red,
FATAL = ConsoleColor.DarkRed,
DEBUG = ConsoleColor.Blue
}
public class LoggerLevelHelper
{
}
}