Removed logger module from main project
This commit is contained in:
@@ -1,22 +0,0 @@
|
|||||||
using DiscordBotCore;
|
|
||||||
using DiscordBotCore.Interfaces.Logger;
|
|
||||||
using DiscordBotCore.Interfaces.Modules;
|
|
||||||
|
|
||||||
namespace LoggerModule
|
|
||||||
{
|
|
||||||
public class Entry : IModule<ILogger>
|
|
||||||
{
|
|
||||||
public string Name => "Logger Module";
|
|
||||||
const string _LogFolder = "./Data/Logs/";
|
|
||||||
const string _LogFormat = "{ThrowTime} {SenderName} {Message}";
|
|
||||||
|
|
||||||
public ILogger Module { get; private set; }
|
|
||||||
|
|
||||||
public Task Initialize()
|
|
||||||
{
|
|
||||||
ILogger logger = new Logger(_LogFolder, _LogFormat);
|
|
||||||
Module = logger;
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
using DiscordBotCore.Interfaces.Logger;
|
|
||||||
using DiscordBotCore.Others;
|
|
||||||
|
|
||||||
namespace LoggerModule
|
|
||||||
{
|
|
||||||
internal sealed class LogMessage : ILogMessage
|
|
||||||
{
|
|
||||||
private static readonly string _DefaultLogMessageSender = "\b";
|
|
||||||
public string Message { get; set; }
|
|
||||||
public DateTime ThrowTime { get; set; }
|
|
||||||
public string SenderName { get; set; }
|
|
||||||
public LogType LogMessageType { get; set; }
|
|
||||||
|
|
||||||
public LogMessage(string message, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
SenderName = string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
LogMessageType = LogType.INFO;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender, DateTime throwTime)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = throwTime;
|
|
||||||
LogMessageType = LogType.INFO;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, object sender, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
ThrowTime = DateTime.Now;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage(string message, DateTime throwTime, object sender, LogType logMessageType)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
ThrowTime = throwTime;
|
|
||||||
SenderName = sender is string && sender as string == string.Empty ? _DefaultLogMessageSender : sender.GetType().FullName ?? sender.GetType().Name;
|
|
||||||
LogMessageType = logMessageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithMessage(string message)
|
|
||||||
{
|
|
||||||
this.Message = message;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithCurrentThrowTime()
|
|
||||||
{
|
|
||||||
this.ThrowTime = DateTime.Now;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogMessage WithMessageType(LogType logType)
|
|
||||||
{
|
|
||||||
this.LogMessageType = logType;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LogMessage CreateFromException(Exception exception, object Sender, bool logFullStack)
|
|
||||||
{
|
|
||||||
LogMessage message = new LogMessage(logFullStack? exception.ToString() : exception.Message, Sender, LogType.ERROR);
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
using DiscordBotCore.Interfaces.Logger;
|
|
||||||
using DiscordBotCore.Others;
|
|
||||||
|
|
||||||
namespace LoggerModule;
|
|
||||||
|
|
||||||
public sealed class Logger : ILogger
|
|
||||||
{
|
|
||||||
private readonly FileStream _LogFileStream;
|
|
||||||
|
|
||||||
public List<string> LogMessageProperties = typeof(ILogMessage).GetProperties().Select(p => p.Name).ToList();
|
|
||||||
private Action<string>? _OutFunction;
|
|
||||||
public string LogMessageFormat { get ; set; }
|
|
||||||
|
|
||||||
public Logger(string logFolder, string logMessageFormat, Action<string>? outFunction = null)
|
|
||||||
{
|
|
||||||
this.LogMessageFormat = logMessageFormat;
|
|
||||||
this._OutFunction = outFunction;
|
|
||||||
var logFile = logFolder + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
|
|
||||||
_LogFileStream = File.Open(logFile, FileMode.Append, FileAccess.Write, FileShare.Read);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Generate a formatted string based on the default parameters of the ILogMessage and a string defined as model
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="message">The message</param>
|
|
||||||
/// <returns>A formatted string with the message values</returns>
|
|
||||||
private string GenerateLogMessage(ILogMessage message)
|
|
||||||
{
|
|
||||||
string messageAsString = new string(LogMessageFormat);
|
|
||||||
foreach (var prop in LogMessageProperties)
|
|
||||||
{
|
|
||||||
Type messageType = typeof(ILogMessage);
|
|
||||||
messageAsString = messageAsString.Replace("{" + prop + "}", messageType?.GetProperty(prop)?.GetValue(message)?.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (message.LogMessageType)
|
|
||||||
{
|
|
||||||
case LogType.INFO:
|
|
||||||
messageAsString = $"[green]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.WARNING:
|
|
||||||
messageAsString = $"[yellow]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.ERROR:
|
|
||||||
messageAsString = $"[red]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.CRITICAL:
|
|
||||||
messageAsString = $"[red] [bold]{messageAsString} [/][/]";
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return messageAsString;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void LogToFile(string message)
|
|
||||||
{
|
|
||||||
byte[] messageAsBytes = System.Text.Encoding.ASCII.GetBytes(message);
|
|
||||||
await _LogFileStream.WriteAsync(messageAsBytes, 0, messageAsBytes.Length);
|
|
||||||
|
|
||||||
byte[] newLine = System.Text.Encoding.ASCII.GetBytes(Environment.NewLine);
|
|
||||||
await _LogFileStream.WriteAsync(newLine, 0, newLine.Length);
|
|
||||||
|
|
||||||
await _LogFileStream.FlushAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GenerateLogMessage(ILogMessage message, string customFormat)
|
|
||||||
{
|
|
||||||
string messageAsString = customFormat;
|
|
||||||
foreach (var prop in LogMessageProperties)
|
|
||||||
{
|
|
||||||
Type messageType = typeof(ILogMessage);
|
|
||||||
messageAsString = messageAsString.Replace("{" + prop + "}", messageType?.GetProperty(prop)?.GetValue(message)?.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (message.LogMessageType)
|
|
||||||
{
|
|
||||||
case LogType.INFO:
|
|
||||||
messageAsString = $"[green]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.WARNING:
|
|
||||||
messageAsString = $"[yellow]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.ERROR:
|
|
||||||
messageAsString = $"[red]{messageAsString} [/]";
|
|
||||||
break;
|
|
||||||
case LogType.CRITICAL:
|
|
||||||
messageAsString = $"[red][bold]{messageAsString} [/][/]";
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return messageAsString;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Log(ILogMessage message, string format)
|
|
||||||
{
|
|
||||||
string messageAsString = GenerateLogMessage(message, format);
|
|
||||||
_OutFunction?.Invoke(messageAsString);
|
|
||||||
LogToFile(messageAsString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Log(ILogMessage message)
|
|
||||||
{
|
|
||||||
string messageAsString = GenerateLogMessage(message);
|
|
||||||
_OutFunction?.Invoke(messageAsString);
|
|
||||||
LogToFile(messageAsString);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Log(string message) => Log(new LogMessage(message, string.Empty, LogType.INFO));
|
|
||||||
public void Log(string message, LogType logType, string format) => Log(new LogMessage(message, logType), format);
|
|
||||||
public void Log(string message, LogType logType) => Log(new LogMessage(message, logType));
|
|
||||||
public void Log(string message, object Sender) => Log(new LogMessage(message, Sender));
|
|
||||||
public void Log(string message, object Sender, LogType type) => Log(new LogMessage(message, Sender, type));
|
|
||||||
public void LogException(Exception exception, object Sender, bool logFullStack = false) => Log(LogMessage.CreateFromException(exception, Sender, logFullStack));
|
|
||||||
|
|
||||||
public void SetOutFunction(Action<string> outFunction)
|
|
||||||
{
|
|
||||||
this._OutFunction = outFunction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\DiscordBotCore\DiscordBotCore.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -6,8 +6,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBot", "DiscordBot\Di
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBotCore", "DiscordBotCore\DiscordBotCore.csproj", "{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBotCore", "DiscordBotCore\DiscordBotCore.csproj", "{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoggerModule", "LoggerModule\LoggerModule.csproj", "{B7FC821B-031E-4656-9B8B-AC5D678E047A}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -22,10 +20,6 @@ Global
|
|||||||
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5A99BFC3-EB39-4AEF-8D61-3CE22D013B02}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{B7FC821B-031E-4656-9B8B-AC5D678E047A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{B7FC821B-031E-4656-9B8B-AC5D678E047A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{B7FC821B-031E-4656-9B8B-AC5D678E047A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{B7FC821B-031E-4656-9B8B-AC5D678E047A}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Reference in New Issue
Block a user