Refaction all files into component based folders
This commit is contained in:
parent
55e152f4aa
commit
e3adf55742
102 changed files with 816 additions and 709 deletions
42
Geekbot.net/Lib/Logger/DiscordLogger.cs
Normal file
42
Geekbot.net/Lib/Logger/DiscordLogger.cs
Normal file
|
@ -0,0 +1,42 @@
|
|||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class DiscordLogger : IDiscordLogger
|
||||
{
|
||||
private readonly GeekbotLogger _logger;
|
||||
|
||||
public DiscordLogger(GeekbotLogger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public Task Log(LogMessage message)
|
||||
{
|
||||
var logMessage = $"[{message.Source}] {message.Message}";
|
||||
switch (message.Severity)
|
||||
{
|
||||
case LogSeverity.Verbose:
|
||||
_logger.Trace(message.Source, message.Message);
|
||||
break;
|
||||
case LogSeverity.Debug:
|
||||
_logger.Debug(message.Source, message.Message);
|
||||
break;
|
||||
case LogSeverity.Info:
|
||||
_logger.Information(message.Source, message.Message);
|
||||
break;
|
||||
case LogSeverity.Critical:
|
||||
case LogSeverity.Error:
|
||||
case LogSeverity.Warning:
|
||||
if (logMessage.Contains("VOICE_STATE_UPDATE")) break;
|
||||
_logger.Error(message.Source, message.Message, message.Exception);
|
||||
break;
|
||||
default:
|
||||
_logger.Information(message.Source, $"{logMessage} --- {message.Severity}");
|
||||
break;
|
||||
}
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
71
Geekbot.net/Lib/Logger/GeekbotLogger.cs
Normal file
71
Geekbot.net/Lib/Logger/GeekbotLogger.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class GeekbotLogger : IGeekbotLogger
|
||||
{
|
||||
private readonly bool _logAsJson;
|
||||
private readonly NLog.Logger _logger;
|
||||
private readonly JsonSerializerSettings _serializerSettings;
|
||||
|
||||
public GeekbotLogger(RunParameters runParameters, bool sumologicActive)
|
||||
{
|
||||
_logAsJson = sumologicActive || runParameters.LogJson;
|
||||
_logger = LoggerFactory.CreateNLog(runParameters, sumologicActive);
|
||||
_serializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
|
||||
NullValueHandling = NullValueHandling.Include
|
||||
};
|
||||
Information("Geekbot", "Using GeekbotLogger");
|
||||
}
|
||||
|
||||
public void Trace(string source, string message, object extra = null)
|
||||
{
|
||||
_logger.Trace(CreateLogString("Debug", source, message, null, extra));
|
||||
}
|
||||
|
||||
public void Debug(string source, string message, object extra = null)
|
||||
{
|
||||
_logger.Debug(CreateLogString("Debug", source, message, null, extra));
|
||||
}
|
||||
|
||||
public void Information(string source, string message, object extra = null)
|
||||
{
|
||||
_logger.Info(CreateLogString("Information", source, message, null, extra));
|
||||
}
|
||||
|
||||
public void Warning(string source, string message, Exception stackTrace = null, object extra = null)
|
||||
{
|
||||
_logger.Warn(CreateLogString("Warning", source, message, stackTrace, extra));
|
||||
}
|
||||
|
||||
public void Error(string source, string message, Exception stackTrace, object extra = null)
|
||||
{
|
||||
_logger.Error(stackTrace, CreateLogString("Error", source, message, stackTrace, extra));
|
||||
}
|
||||
|
||||
private string CreateLogString(string type, string source, string message, Exception stackTrace = null, object extra = null)
|
||||
{
|
||||
if (_logAsJson)
|
||||
{
|
||||
var logObject = new GeekbotLoggerObject
|
||||
{
|
||||
Timestamp = DateTime.Now,
|
||||
Type = type,
|
||||
Source = source,
|
||||
Message = message,
|
||||
StackTrace = stackTrace,
|
||||
Extra = extra
|
||||
};
|
||||
return JsonConvert.SerializeObject(logObject, Formatting.None, _serializerSettings);
|
||||
}
|
||||
|
||||
if (source != "Message") return $"[{source}] - {message}";
|
||||
|
||||
var m = (MessageDto) extra;
|
||||
return $"[{source}] - [{m.Guild.Name} - {m.Channel.Name}] {m.User.Name}: {m.Message.Content}";
|
||||
}
|
||||
}
|
||||
}
|
10
Geekbot.net/Lib/Logger/IDiscordLogger.cs
Normal file
10
Geekbot.net/Lib/Logger/IDiscordLogger.cs
Normal file
|
@ -0,0 +1,10 @@
|
|||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public interface IDiscordLogger
|
||||
{
|
||||
Task Log(LogMessage message);
|
||||
}
|
||||
}
|
13
Geekbot.net/Lib/Logger/IGeekbotLogger.cs
Normal file
13
Geekbot.net/Lib/Logger/IGeekbotLogger.cs
Normal file
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public interface IGeekbotLogger
|
||||
{
|
||||
void Trace(string source, string message, object extra = null);
|
||||
void Debug(string source, string message, object extra = null);
|
||||
void Information(string source, string message, object extra = null);
|
||||
void Warning(string source, string message, Exception stackTrace = null, object extra = null);
|
||||
void Error(string source, string message, Exception stackTrace, object extra = null);
|
||||
}
|
||||
}
|
14
Geekbot.net/Lib/Logger/LogDto.cs
Normal file
14
Geekbot.net/Lib/Logger/LogDto.cs
Normal file
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class GeekbotLoggerObject
|
||||
{
|
||||
public DateTime Timestamp { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Source { get; set; }
|
||||
public string Message { get; set; }
|
||||
public Exception StackTrace { get; set; }
|
||||
public object Extra { get; set; }
|
||||
}
|
||||
}
|
71
Geekbot.net/Lib/Logger/LoggerFactory.cs
Normal file
71
Geekbot.net/Lib/Logger/LoggerFactory.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using NLog.Targets;
|
||||
using SumoLogic.Logging.NLog;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class LoggerFactory
|
||||
{
|
||||
public static NLog.Logger CreateNLog(RunParameters runParameters, bool sumologicActive)
|
||||
{
|
||||
var config = new LoggingConfiguration();
|
||||
|
||||
if (sumologicActive)
|
||||
{
|
||||
Console.WriteLine("Logging Geekbot Logs to Sumologic");
|
||||
config.LoggingRules.Add(
|
||||
new LoggingRule("*", LogLevel.Info, LogLevel.Fatal,
|
||||
new BufferedSumoLogicTarget()
|
||||
{
|
||||
Url = Environment.GetEnvironmentVariable("GEEKBOT_SUMO"),
|
||||
SourceName = "GeekbotLogger",
|
||||
Layout = "${message}",
|
||||
UseConsoleLog = false,
|
||||
MaxQueueSizeBytes = 500000,
|
||||
FlushingAccuracy = 250,
|
||||
MaxFlushInterval = 10000,
|
||||
OptimizeBufferReuse = true,
|
||||
MessagesPerRequest = 10,
|
||||
RetryInterval = 5000,
|
||||
Name = "Geekbot"
|
||||
})
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
var minLevel = runParameters.Verbose ? LogLevel.Trace : LogLevel.Info;
|
||||
config.LoggingRules.Add(
|
||||
new LoggingRule("*", minLevel, LogLevel.Fatal,
|
||||
new ColoredConsoleTarget
|
||||
{
|
||||
Name = "Console",
|
||||
Encoding = Encoding.Unicode,
|
||||
Layout = "[${longdate} ${level:format=FirstCharacter}] ${message} ${exception:format=toString}"
|
||||
})
|
||||
);
|
||||
|
||||
config.LoggingRules.Add(
|
||||
new LoggingRule("*", minLevel, LogLevel.Fatal,
|
||||
new FileTarget
|
||||
{
|
||||
Name = "File",
|
||||
Layout = "[${longdate} ${level}] ${message}",
|
||||
Encoding = Encoding.Unicode,
|
||||
LineEnding = LineEndingMode.Default,
|
||||
MaxArchiveFiles = 30,
|
||||
ArchiveNumbering = ArchiveNumberingMode.Date,
|
||||
ArchiveEvery = FileArchivePeriod.Day,
|
||||
ArchiveFileName = "./Logs/Archive/{#####}.log",
|
||||
FileName = "./Logs/Geekbot.log"
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
var loggerConfig = new LogFactory { Configuration = config };
|
||||
return loggerConfig.GetCurrentClassLogger();
|
||||
}
|
||||
}
|
||||
}
|
26
Geekbot.net/Lib/Logger/MessageDto.cs
Normal file
26
Geekbot.net/Lib/Logger/MessageDto.cs
Normal file
|
@ -0,0 +1,26 @@
|
|||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class MessageDto
|
||||
{
|
||||
public MessageContent Message { get; set; }
|
||||
public IdAndName User { get; set; }
|
||||
public IdAndName Guild { get; set; }
|
||||
public IdAndName Channel { get; set; }
|
||||
|
||||
public class MessageContent
|
||||
{
|
||||
public string Content { get; set; }
|
||||
public string Id { get; set; }
|
||||
public int Attachments { get; set; }
|
||||
public int ChannelMentions { get; set; }
|
||||
public int UserMentions { get; set; }
|
||||
public int RoleMentions { get; set; }
|
||||
}
|
||||
|
||||
public class IdAndName
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
71
Geekbot.net/Lib/Logger/SimpleConextConverter.cs
Normal file
71
Geekbot.net/Lib/Logger/SimpleConextConverter.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
namespace Geekbot.net.Lib.Logger
|
||||
{
|
||||
public class SimpleConextConverter
|
||||
{
|
||||
public static MessageDto ConvertContext(ICommandContext context)
|
||||
{
|
||||
return new MessageDto
|
||||
{
|
||||
Message = new MessageDto.MessageContent
|
||||
{
|
||||
Content = context.Message.Content,
|
||||
Id = context.Message.Id.ToString(),
|
||||
Attachments = context.Message.Attachments.Count,
|
||||
ChannelMentions = context.Message.MentionedChannelIds.Count,
|
||||
UserMentions = context.Message.MentionedUserIds.Count,
|
||||
RoleMentions = context.Message.MentionedRoleIds.Count
|
||||
},
|
||||
User = new MessageDto.IdAndName
|
||||
{
|
||||
Id = context.User.Id.ToString(),
|
||||
Name = $"{context.User.Username}#{context.User.Discriminator}"
|
||||
},
|
||||
Guild = new MessageDto.IdAndName
|
||||
{
|
||||
Id = context.Guild.Id.ToString(),
|
||||
Name = context.Guild.Name
|
||||
},
|
||||
Channel = new MessageDto.IdAndName
|
||||
{
|
||||
Id = context.Channel.Id.ToString(),
|
||||
Name = context.Channel.Name
|
||||
}
|
||||
};
|
||||
}
|
||||
public static MessageDto ConvertSocketMessage(SocketMessage message)
|
||||
{
|
||||
var channel = (SocketGuildChannel) message.Channel;
|
||||
return new MessageDto
|
||||
{
|
||||
Message = new MessageDto.MessageContent
|
||||
{
|
||||
Content = message.Content,
|
||||
Id = message.Id.ToString(),
|
||||
Attachments = message.Attachments.Count,
|
||||
ChannelMentions = message.MentionedChannels.Count,
|
||||
UserMentions = message.MentionedUsers.Count,
|
||||
RoleMentions = message.MentionedRoles.Count
|
||||
},
|
||||
User = new MessageDto.IdAndName
|
||||
{
|
||||
Id = message.Author.Id.ToString(),
|
||||
Name = $"{message.Author.Username}#{message.Author.Discriminator}"
|
||||
},
|
||||
Guild = new MessageDto.IdAndName
|
||||
{
|
||||
Id = channel.Guild.Id.ToString(),
|
||||
Name = channel.Guild.Name
|
||||
},
|
||||
Channel = new MessageDto.IdAndName
|
||||
{
|
||||
Id = channel.Id.ToString(),
|
||||
Name = channel.Name
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue