使用责任链编写Logger

Signed-off-by: Eicy <im@crash.work>
This commit is contained in:
2024-12-21 01:02:31 +08:00
parent f05dce81a0
commit 7bacff5e24
8 changed files with 229 additions and 0 deletions

33
Logger/AbstractLogger.cs Normal file
View File

@@ -0,0 +1,33 @@
using Debugger;
using Shrink.Config;
namespace Shrink.Logger;
public abstract class AbstractLogger
{
private AbstractLogger? _nextLogger;
protected LogLevel LogLevel;
public void SetNextLogger(AbstractLogger? nextLogger)
{
_nextLogger = nextLogger;
}
public void LogMessage(string data, string eventName, LogLevel level, MsgType msgType, uint uin, string message)
{
//LogLevel = Info
//Config设置为Only Fatal
if (LogLevel == level)
{
//Info 3
//Fatal 0
if (LogLevel > Configuration.Instance.Config.LogLevel) return;
Log(data, eventName, msgType, uin, message);
LogManager.Instance.IsSent = true;
}
else
_nextLogger?.LogMessage(data, eventName, level, msgType, uin, message);
}
protected abstract void Log(string data, string eventName, MsgType msgType, uint uin, string message);
}

28
Logger/DebugLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class DebugLogger : AbstractLogger
{
public DebugLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Debug] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Debug] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}

28
Logger/ErrorLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class ErrorLogger : AbstractLogger
{
public ErrorLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Error] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Error] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}

28
Logger/FatalLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class FatalLogger : AbstractLogger
{
public FatalLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Fatal] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Fatal] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}

28
Logger/InfoLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class InfoLogger : AbstractLogger
{
public InfoLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Info] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Info] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}

28
Logger/LogManager.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
namespace Shrink.Logger;
public class LogManager
{
private static readonly Lazy<LogManager> _instance = new(() => new LogManager());
public static LogManager Instance => _instance.Value;
public AbstractLogger LogChain { get; }
public bool IsSent;
public LogManager()
{
AbstractLogger fatalLogger = new FatalLogger(LogLevel.Fatal);
AbstractLogger errorLogger = new ErrorLogger(LogLevel.Error);
AbstractLogger warnLogger = new WarnLogger(LogLevel.Warn);
AbstractLogger infoLogger = new InfoLogger(LogLevel.Info);
AbstractLogger verboseLogger = new VerboseLogger(LogLevel.Verbose);
AbstractLogger debugLogger = new DebugLogger(LogLevel.Debug);
fatalLogger.SetNextLogger(errorLogger);
errorLogger.SetNextLogger(warnLogger);
warnLogger.SetNextLogger(infoLogger);
infoLogger.SetNextLogger(verboseLogger);
verboseLogger.SetNextLogger(debugLogger);
LogChain = fatalLogger;
}
}

28
Logger/VerboseLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class VerboseLogger : AbstractLogger
{
public VerboseLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Verbose] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Verbose] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}

28
Logger/WarnLogger.cs Normal file
View File

@@ -0,0 +1,28 @@
using Debugger;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Message;
using Shrink.Service;
namespace Shrink.Logger;
public class WarnLogger : AbstractLogger
{
public WarnLogger(LogLevel level)
{
LogLevel = level;
}
protected override void Log(string data, string eventName, MsgType msgType, uint uin, string message)
{
if (msgType == MsgType.Public)
{
var chain = MessageBuilder.Group(uin).Text($"[{data}] [{eventName}] [Warn] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
else
{
var chain = MessageBuilder.Friend(uin).Text($"[{data}] [{eventName}] [Warn] {message}");
BotService.Instance.Client!.SendMessage(chain.Build());
}
}
}