diff --git a/Geekbot.net/Commands/Overwatch.cs b/Geekbot.net/Commands/Overwatch.cs index 9007804..10dc459 100644 --- a/Geekbot.net/Commands/Overwatch.cs +++ b/Geekbot.net/Commands/Overwatch.cs @@ -14,13 +14,11 @@ namespace Geekbot.net.Commands public class Overwatch : ModuleBase { private readonly IErrorHandler _errorHandler; - private readonly ILogger _logger; private readonly IUserRepository _userRepository; - public Overwatch(IErrorHandler errorHandler, ILogger logger, IDatabase redis, IUserRepository userRepository) + public Overwatch(IErrorHandler errorHandler, IDatabase redis, IUserRepository userRepository) { _errorHandler = errorHandler; - _logger = logger; _userRepository = userRepository; } @@ -117,7 +115,6 @@ namespace Geekbot.net.Commands { var player = await owClient.GetPlayerAsync(battletag); if (player.Username == null) return null; - _logger.Debug($"[OW] Username = {player.Username}"); var eb = new EmbedBuilder(); eb.WithAuthor(new EmbedAuthorBuilder() .WithIconUrl(player.ProfilePortraitUrl) diff --git a/Geekbot.net/Commands/Owner.cs b/Geekbot.net/Commands/Owner.cs index c3c9cc0..c4adb25 100644 --- a/Geekbot.net/Commands/Owner.cs +++ b/Geekbot.net/Commands/Owner.cs @@ -15,11 +15,11 @@ namespace Geekbot.net.Commands { private readonly DiscordSocketClient _client; private readonly IErrorHandler _errorHandler; - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private readonly IDatabase _redis; private readonly IUserRepository _userRepository; - public Owner(IDatabase redis, DiscordSocketClient client, ILogger logger, IUserRepository userRepositry, + public Owner(IDatabase redis, DiscordSocketClient client, IGeekbotLogger logger, IUserRepository userRepositry, IErrorHandler errorHandler) { _redis = redis; @@ -61,7 +61,7 @@ namespace Geekbot.net.Commands _redis.StringSet("Game", key); await _client.SetGameAsync(key); - _logger.Information($"[Geekbot] Changed game to {key}"); + _logger.Information("Geekbot", $"Changed game to {key}"); await ReplyAsync($"Now Playing {key}"); } @@ -91,11 +91,11 @@ namespace Geekbot.net.Commands var failed = 0; try { - _logger.Warning("[UserRepository] Populating User Repositry"); + _logger.Warning("UserRepository", "Populating User Repositry"); await ReplyAsync("Starting Population of User Repository"); foreach (var guild in _client.Guilds) { - _logger.Information($"[UserRepository] Populating users from {guild.Name}"); + _logger.Information("UserRepository", $"Populating users from {guild.Name}"); foreach (var user in guild.Users) { var succeded = await _userRepository.Update(user); @@ -103,7 +103,7 @@ namespace Geekbot.net.Commands } } - _logger.Warning("[UserRepository] Finished Updating User Repositry"); + _logger.Warning("UserRepository", "Finished Updating User Repositry"); await ReplyAsync( $"Successfully Populated User Repository with {success} Users in {_client.Guilds.Count} Guilds (Failed: {failed})"); } diff --git a/Geekbot.net/Commands/Rank.cs b/Geekbot.net/Commands/Rank.cs index 349bd47..516c2aa 100644 --- a/Geekbot.net/Commands/Rank.cs +++ b/Geekbot.net/Commands/Rank.cs @@ -15,12 +15,12 @@ namespace Geekbot.net.Commands { private readonly IEmojiConverter _emojiConverter; private readonly IErrorHandler _errorHandler; - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private readonly IDatabase _redis; private readonly IUserRepository _userRepository; private readonly DiscordSocketClient _client; - public Rank(IDatabase redis, IErrorHandler errorHandler, ILogger logger, IUserRepository userRepository, + public Rank(IDatabase redis, IErrorHandler errorHandler, IGeekbotLogger logger, IUserRepository userRepository, IEmojiConverter emojiConverter, DiscordSocketClient client) { _redis = redis; @@ -91,7 +91,7 @@ namespace Geekbot.net.Commands } catch (Exception e) { - _logger.Warning(e, $"Could not retrieve user {user.Name}"); + _logger.Warning("Geekbot", $"Could not retrieve user {user.Name}", e); } } diff --git a/Geekbot.net/Geekbot.net.csproj b/Geekbot.net/Geekbot.net.csproj index 38e7f94..82b605a 100755 --- a/Geekbot.net/Geekbot.net.csproj +++ b/Geekbot.net/Geekbot.net.csproj @@ -25,10 +25,11 @@ - + + 1.2.6 diff --git a/Geekbot.net/Handlers.cs b/Geekbot.net/Handlers.cs index 89fb61e..13ce041 100644 --- a/Geekbot.net/Handlers.cs +++ b/Geekbot.net/Handlers.cs @@ -14,13 +14,13 @@ namespace Geekbot.net public class Handlers { private readonly IDiscordClient _client; - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private readonly IDatabase _redis; private readonly IServiceProvider _servicesProvider; private readonly CommandService _commands; private readonly IUserRepository _userRepository; - public Handlers(IDiscordClient client, ILogger logger, IDatabase redis, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository) + public Handlers(IDiscordClient client, IGeekbotLogger logger, IDatabase redis, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository) { _client = client; _logger = logger; @@ -60,7 +60,7 @@ namespace Geekbot.net } catch (Exception e) { - _logger.Error(e, "[Geekbot] Failed to run commands"); + _logger.Error("Geekbot", "Failed to run commands", e); return Task.CompletedTask; } } @@ -72,8 +72,7 @@ namespace Geekbot.net if (message == null) return Task.CompletedTask; if (message.Channel.Name.StartsWith('@')) { - _logger.Information( - $"[Message] DM-Channel - {message.Channel.Name} - {message.Content}"); + _logger.Information("Message", "DM-Channel - {message.Channel.Name} - {message.Content}"); return Task.CompletedTask; } var channel = (SocketGuildChannel) message.Channel; @@ -82,12 +81,12 @@ namespace Geekbot.net _redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", 0.ToString()); if (message.Author.IsBot) return Task.CompletedTask; - _logger.Information( - $"[Message] {channel.Guild.Name} ({channel.Guild.Id}) - {message.Channel} ({message.Channel.Id}) - {message.Author.Username}#{message.Author.Discriminator} ({message.Author.Id}) - {message.Content}"); + _logger.Information("Message", message.Content, SimpleConextConverter.ConvertSocketMessage(message)); +// _logger.Information($"[Message] {channel.Guild.Name} ({channel.Guild.Id}) - {message.Channel} ({message.Channel.Id}) - {message.Author.Username}#{message.Author.Discriminator} ({message.Author.Id}) - {message.Content}"); } catch (Exception e) { - _logger.Error(e, "Could not process message stats"); + _logger.Error("Message", "Could not process message stats", e); } return Task.CompletedTask; } @@ -110,12 +109,11 @@ namespace Geekbot.net } } _userRepository.Update(user); - _logger.Information( - $"[Geekbot] {user.Id} ({user.Username}) joined {user.Guild.Id} ({user.Guild.Name})"); + _logger.Information("Geekbot", $"{user.Username} ({user.Id}) joined {user.Guild.Name} ({user.Guild.Id})"); } catch (Exception e) { - _logger.Error(e, "[Geekbot] Failed to send welcome message"); + _logger.Error("Geekbot", "Failed to send welcome message", e); } return Task.CompletedTask; } @@ -143,9 +141,9 @@ namespace Geekbot.net } catch (Exception e) { - _logger.Error(e, "Failed to send leave message..."); + _logger.Error("Geekbot", "Failed to send leave message", e); } - _logger.Information($"[Geekbot] {user.Id} ({user.Username}) left {user.Guild.Id} ({user.Guild.Name})"); + _logger.Information("Geekbot", $"{user.Username} ({user.Id}) joined {user.Guild.Name} ({user.Guild.Id})"); } // @@ -181,7 +179,7 @@ namespace Geekbot.net } catch (Exception e) { - _logger.Error(e, "Failed to send delete message..."); + _logger.Error("Geekbot", "Failed to send delete message...", e); } } } diff --git a/Geekbot.net/Lib/ErrorHandler.cs b/Geekbot.net/Lib/ErrorHandler.cs index 1d6ffd8..6cc6644 100644 --- a/Geekbot.net/Lib/ErrorHandler.cs +++ b/Geekbot.net/Lib/ErrorHandler.cs @@ -15,11 +15,11 @@ namespace Geekbot.net.Lib { public class ErrorHandler : IErrorHandler { - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private readonly ITranslationHandler _translation; private readonly IRavenClient _raven; - public ErrorHandler(ILogger logger, ITranslationHandler translation) + public ErrorHandler(IGeekbotLogger logger, ITranslationHandler translation) { _logger = logger; _translation = translation; @@ -28,7 +28,7 @@ namespace Geekbot.net.Lib if (!string.IsNullOrEmpty(sentryDsn)) { _raven = new RavenClient(sentryDsn); - _logger.Information($"[Geekbot] Command Errors will be logged to Sentry: {sentryDsn}"); + _logger.Information("Geekbot", $"Command Errors will be logged to Sentry: {sentryDsn}"); } else { @@ -41,36 +41,8 @@ namespace Geekbot.net.Lib try { var errorString = errorMessage == "def" ? _translation.GetString(Context.Guild.Id, "errorHandler", "SomethingWentWrong") : errorMessage; - var errorObj = new ErrorObject() - { - Message = new ErrorMessage() - { - 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 IdAndName() - { - Id = Context.User.Id.ToString(), - Name = $"{Context.User.Username}#{Context.User.Discriminator}" - }, - Guild = new IdAndName() - { - Id = Context.Guild.Id.ToString(), - Name = Context.Guild.Name - }, - Channel = new IdAndName() - { - Id = Context.Channel.Id.ToString(), - Name = Context.Channel.Name - }, - TimeStamp = DateTime.Now.ToString() - }; - var errorJson = JsonSerializer.ToJsonString(errorObj); - _logger.Error(e, errorJson); + var errorObj = SimpleConextConverter.ConvertContext(Context); + _logger.Error("Geekbot", "An error ocured", e, errorObj); if (!string.IsNullOrEmpty(errorMessage)) { Context.Channel.SendMessageAsync(errorString); @@ -92,7 +64,7 @@ namespace Geekbot.net.Lib } catch (Exception ex) { - _logger.Error(ex, "Errorception"); + _logger.Error("Geekbot", "Errorception", ex); } } @@ -107,31 +79,7 @@ namespace Geekbot.net.Lib } } - - public class ErrorObject - { - public ErrorMessage Message { get; set; } - public IdAndName User { get; set; } - public IdAndName Guild { get; set; } - public IdAndName Channel { get; set; } - public string TimeStamp { get; set; } - } - public class ErrorMessage - { - 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; } - } } public interface IErrorHandler diff --git a/Geekbot.net/Lib/GeekbotLogger.cs b/Geekbot.net/Lib/GeekbotLogger.cs new file mode 100644 index 0000000..18e8c54 --- /dev/null +++ b/Geekbot.net/Lib/GeekbotLogger.cs @@ -0,0 +1,80 @@ +using System; +using System.Threading.Tasks; +using Serilog; +using Utf8Json; +using Utf8Json.Formatters; +using Utf8Json.Resolvers; + +namespace Geekbot.net.Lib +{ + public class GeekbotLogger : IGeekbotLogger + { + private readonly ILogger _serilog; + public GeekbotLogger() + { + _serilog = LoggerFactory.createLogger(); + //JsonSerializer.SetDefaultResolver(StandardResolver.AllowPrivateExcludeNullSnakeCase); + Information("Geekbot", "Using GeekbotLogger"); + } + + public void Debug(string source, string message, object extra = null) + { + HandleLogObject("Debug", source, message, null, extra); + } + + public void Information(string source, string message, object extra = null) + { + HandleLogObject("Information", source, message, null, extra); + } + + public void Warning(string source, string message, Exception stackTrace = null, object extra = null) + { + HandleLogObject("Warning", source, message, stackTrace, extra); + } + + public void Error(string source, string message, Exception stackTrace, object extra = null) + { + HandleLogObject("Error", source, message, stackTrace, extra); + } + + private Task HandleLogObject(string type, string source, string message, Exception stackTrace = null, object extra = null) + { + var logJson = CreateLogObject(type, source, message, null, extra); + // fuck serilog + _serilog.Information(logJson + "}"); + return Task.CompletedTask; + } + + private string CreateLogObject(string type, string source, string message, Exception stackTrace = null, object extra = null) + { + var logObject = new GeekbotLoggerObject() + { + Timestamp = DateTime.Now, + Type = type, + Source = source, + Message = message, + StackTrace = stackTrace, + Extra = extra + }; + return JsonSerializer.ToJsonString(logObject); + } + } + + 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; } + } + + public interface IGeekbotLogger + { + 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); + } +} \ No newline at end of file diff --git a/Geekbot.net/Lib/LoggerFactory.cs b/Geekbot.net/Lib/LoggerFactory.cs index d1fe698..789bdc6 100644 --- a/Geekbot.net/Lib/LoggerFactory.cs +++ b/Geekbot.net/Lib/LoggerFactory.cs @@ -1,26 +1,26 @@ using System; using Serilog; -using System.Linq; +using Serilog.Formatting.Json; +using Serilog.Sinks.SumoLogic; namespace Geekbot.net.Lib { public class LoggerFactory { - public static ILogger createLogger(string[] args) + public static ILogger createLogger() { - var loggerCreation = new LoggerConfiguration() - .WriteTo.RollingFile("Logs/geekbot-{Date}.txt", shared: true); - if (!Environment.CurrentDirectory.Contains("deploy")) + var loggerCreation = new LoggerConfiguration(); + var template = "{Message}{NewLine}"; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("GEEKBOT_SUMO"))) { - loggerCreation.WriteTo.LiterateConsole(); - } - if (args.Contains("--verbose")) - { - loggerCreation.MinimumLevel.Verbose(); + Console.WriteLine("Logging Geekbot Logs to Sumologic"); + loggerCreation.WriteTo.SumoLogic(Environment.GetEnvironmentVariable("GEEKBOT_SUMO"), + outputTemplate: template); } else { - loggerCreation.MinimumLevel.Information(); + loggerCreation.WriteTo.LiterateConsole(outputTemplate: template); + loggerCreation.WriteTo.RollingFile("Logs/geekbot-{Date}.txt", shared: true, outputTemplate: template); } return loggerCreation.CreateLogger(); } diff --git a/Geekbot.net/Lib/MalClient.cs b/Geekbot.net/Lib/MalClient.cs index 4827b13..bc09036 100644 --- a/Geekbot.net/Lib/MalClient.cs +++ b/Geekbot.net/Lib/MalClient.cs @@ -10,12 +10,12 @@ namespace Geekbot.net.Lib public class MalClient : IMalClient { private readonly IDatabase _redis; - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private ICredentialContext _credentials; private AnimeSearchMethodsAsync _animeSearch; private MangaSearchMethodsAsync _mangaSearch; - public MalClient(IDatabase redis, ILogger logger) + public MalClient(IDatabase redis, IGeekbotLogger logger) { _redis = redis; _logger = logger; @@ -42,10 +42,10 @@ namespace Geekbot.net.Lib } _animeSearch = new AnimeSearchMethodsAsync(_credentials); _mangaSearch = new MangaSearchMethodsAsync(_credentials); - _logger.Verbose($"[Geekbot] [MalClient] Logged in to Mal"); + _logger.Debug("Geekbot", "Logged in to MAL"); return true; } - _logger.Warning("[Geekbot] [MalClient] No Credentials Set!"); + _logger.Debug("Geekbot", "No MAL Credentials Set!"); return false; } diff --git a/Geekbot.net/Lib/Media/FortunesProvider.cs b/Geekbot.net/Lib/Media/FortunesProvider.cs index 43e456f..f536074 100644 --- a/Geekbot.net/Lib/Media/FortunesProvider.cs +++ b/Geekbot.net/Lib/Media/FortunesProvider.cs @@ -10,7 +10,7 @@ namespace Geekbot.net.Lib.Media private readonly Random rnd; private readonly int totalFortunes; - public FortunesProvider(Random rnd, ILogger logger) + public FortunesProvider(Random rnd, IGeekbotLogger logger) { var path = Path.GetFullPath("./Storage/fortunes"); if (File.Exists(path)) @@ -19,12 +19,11 @@ namespace Geekbot.net.Lib.Media fortuneArray = rawFortunes.Split("%"); totalFortunes = fortuneArray.Length; this.rnd = rnd; - logger.Verbose($"[Geekbot] [Fortunes] Loaded {totalFortunes} Fortunes"); + logger.Debug("Geekbot", "Loaded {totalFortunes} Fortunes"); } else { - logger.Error("Fortunes File not found"); - logger.Error($"Path should be {path}"); + logger.Information("Geekbot", $"Fortunes File not found at {path}"); } } diff --git a/Geekbot.net/Lib/Media/MediaProvider.cs b/Geekbot.net/Lib/Media/MediaProvider.cs index e67b9c9..ce5a0cd 100644 --- a/Geekbot.net/Lib/Media/MediaProvider.cs +++ b/Geekbot.net/Lib/Media/MediaProvider.cs @@ -9,7 +9,7 @@ namespace Geekbot.net.Lib.Media public class MediaProvider : IMediaProvider { private readonly Random _random; - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private string[] _checkemImages; private string[] _pandaImages; private string[] _croissantImages; @@ -17,61 +17,61 @@ namespace Geekbot.net.Lib.Media private string[] _pumpkinImages; private string[] _turtlesImages; - public MediaProvider(Random rnd, ILogger logger) + public MediaProvider(Random rnd, IGeekbotLogger logger) { _random = rnd; _logger = logger; - logger.Information("[Geekbot] Loading Media Files"); + logger.Information("Geekbot", "Loading Media Files"); - loadCheckem(); - loadPandas(); - bakeCroissants(); - loadSquirrels(); - loadPumpkins(); - loadTurtles(); + LoadCheckem(); + LoadPandas(); + BakeCroissants(); + LoadSquirrels(); + LoadPumpkins(); + LoadTurtles(); } - private void loadCheckem() + private void LoadCheckem() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/checkEmPics")); _checkemImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_checkemImages.Length} CheckEm Images"); + _logger.Debug("Geekbot", $"Loaded {_checkemImages.Length} CheckEm Images"); } - private void loadPandas() + private void LoadPandas() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/pandas")); _pandaImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_pandaImages.Length} Panda Images"); + _logger.Debug("Geekbot", $"Loaded {_pandaImages.Length} Panda Images"); } - private void bakeCroissants() + private void BakeCroissants() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/croissant")); _croissantImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_croissantImages.Length} Croissant Images"); + _logger.Debug("Geekbot", $"Loaded {_croissantImages.Length} Croissant Images"); } - private void loadSquirrels() + private void LoadSquirrels() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/squirrel")); _squirrelImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_squirrelImages.Length} Squirrel Images"); + _logger.Debug("Geekbot", $"Loaded {_squirrelImages.Length} Squirrel Images"); } - private void loadPumpkins() + private void LoadPumpkins() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/pumpkin")); _pumpkinImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_pumpkinImages.Length} Pumpkin Images"); + _logger.Debug("Geekbot", $"Loaded {_pumpkinImages.Length} Pumpkin Images"); } - private void loadTurtles() + private void LoadTurtles() { var rawLinks = File.ReadAllText(Path.GetFullPath("./Storage/turtles")); _turtlesImages = rawLinks.Split("\n"); - _logger.Verbose($"[Geekbot] [Media] Loaded {_turtlesImages.Length} Turtle Images"); + _logger.Debug("Geekbot", $"Loaded {_turtlesImages.Length} Turtle Images"); } public string getCheckem() diff --git a/Geekbot.net/Lib/SimpleConextConverter.cs b/Geekbot.net/Lib/SimpleConextConverter.cs new file mode 100644 index 0000000..3dbc58b --- /dev/null +++ b/Geekbot.net/Lib/SimpleConextConverter.cs @@ -0,0 +1,97 @@ +using System; +using Discord.Commands; +using Discord.WebSocket; + +namespace Geekbot.net.Lib +{ + 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 + }, + }; + } + + } + + + 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; } + } + } +} \ No newline at end of file diff --git a/Geekbot.net/Lib/TranslationHandler.cs b/Geekbot.net/Lib/TranslationHandler.cs index 7103574..cdacac8 100644 --- a/Geekbot.net/Lib/TranslationHandler.cs +++ b/Geekbot.net/Lib/TranslationHandler.cs @@ -11,17 +11,17 @@ namespace Geekbot.net.Lib { public class TranslationHandler : ITranslationHandler { - private readonly ILogger _logger; + private readonly IGeekbotLogger _logger; private readonly IDatabase _redis; private Dictionary>> _translations; private Dictionary _serverLanguages; private List _supportedLanguages; - public TranslationHandler(IReadOnlyCollection clientGuilds, IDatabase redis, ILogger logger) + public TranslationHandler(IReadOnlyCollection clientGuilds, IDatabase redis, IGeekbotLogger logger) { _logger = logger; _redis = redis; - _logger.Information("[Geekbot] Loading Translations"); + _logger.Information("Geekbot", "Loading Translations"); LoadTranslations(); LoadServerLanguages(clientGuilds); } @@ -70,7 +70,7 @@ namespace Geekbot.net.Lib } catch (Exception e) { - _logger.Fatal(e, "Failed to load Translations"); + _logger.Error("Geekbot", "Failed to load Translations", e); Environment.Exit(110); } } @@ -99,7 +99,7 @@ namespace Geekbot.net.Lib translation = _translations[command][stringName]["EN"]; if (string.IsNullOrWhiteSpace(translation)) { - _logger.Warning($"No translation found for {command} - {stringName}"); + _logger.Warning("Geekbot", $"No translation found for {command} - {stringName}"); } return translation; } @@ -113,7 +113,7 @@ namespace Geekbot.net.Lib } catch (Exception e) { - _logger.Error(e, "lol nope"); + _logger.Error("Geekbot", "lol nope", e); return new Dictionary(); } } @@ -126,7 +126,7 @@ namespace Geekbot.net.Lib } catch (Exception e) { - _logger.Error(e, "lol nope"); + _logger.Error("Geekbot", "lol nope", e); return new Dictionary(); } } @@ -142,7 +142,7 @@ namespace Geekbot.net.Lib } catch (Exception e) { - _logger.Error(e, "[Geekbot] Error while changing language"); + _logger.Error("Geekbot", "Error while changing language", e); return false; } } diff --git a/Geekbot.net/Lib/UserRepository.cs b/Geekbot.net/Lib/UserRepository.cs index 2982866..b180ef9 100644 --- a/Geekbot.net/Lib/UserRepository.cs +++ b/Geekbot.net/Lib/UserRepository.cs @@ -13,8 +13,8 @@ namespace Geekbot.net.Lib public class UserRepository : IUserRepository { private readonly IDatabase _redis; - private readonly ILogger _logger; - public UserRepository(IDatabase redis, ILogger logger) + private readonly IGeekbotLogger _logger; + public UserRepository(IDatabase redis, IGeekbotLogger logger) { _redis = redis; _logger = logger; @@ -38,12 +38,12 @@ namespace Geekbot.net.Lib } Store(savedUser); - _logger.Information($"[UserRepository] Updated User {user.Username}#{user.Discriminator} ({user.Id})"); + _logger.Information("UserRepository", "Updated User", savedUser); return Task.FromResult(true); } catch (Exception e) { - _logger.Warning(e, $"[UserRepository] Failed to update {user.Username}#{user.Discriminator} ({user.Id})"); + _logger.Warning("UserRepository", $"Failed to update user: {user.Username}#{user.Discriminator} ({user.Id})", e); return Task.FromResult(false); } } @@ -105,7 +105,7 @@ namespace Geekbot.net.Lib } catch (Exception e) { - _logger.Warning(e, $"[UserRepository] Failed to get {userId} from repository"); + _logger.Warning("UserRepository", "Failed to get {userId} from repository", e); return new UserRepositoryUser(); } } diff --git a/Geekbot.net/Program.cs b/Geekbot.net/Program.cs index 4382309..da74508 100755 --- a/Geekbot.net/Program.cs +++ b/Geekbot.net/Program.cs @@ -27,7 +27,7 @@ namespace Geekbot.net private IServiceCollection services; private IServiceProvider servicesProvider; private RedisValue token; - private ILogger logger; + private IGeekbotLogger logger; private IUserRepository userRepository; private string[] args; private bool firstStart = false; @@ -42,23 +42,23 @@ namespace Geekbot.net logo.AppendLine(@" \____|_____|_____|_|\_\____/ \___/ |_|"); logo.AppendLine("========================================="); Console.WriteLine(logo.ToString()); - var logger = LoggerFactory.createLogger(args); - logger.Information("[Geekbot] Starting..."); + var logger = new GeekbotLogger(); + logger.Information("Geekbot", "Starting..."); try { new Program().MainAsync(args, logger).GetAwaiter().GetResult(); } catch (Exception e) { - logger.Fatal(e, "[Geekbot] RIP"); + logger.Error("Geekbot", "RIP", e); } } - private async Task MainAsync(string[] args, ILogger logger) + private async Task MainAsync(string[] args, IGeekbotLogger logger) { this.logger = logger; this.args = args; - logger.Information("[Geekbot] Initing Stuff"); + logger.Information("Geekbot", "Initing Stuff"); client = new DiscordSocketClient(new DiscordSocketConfig { @@ -72,11 +72,11 @@ namespace Geekbot.net { var redisMultiplexer = ConnectionMultiplexer.Connect("127.0.0.1:6379"); redis = redisMultiplexer.GetDatabase(6); - logger.Information($"[Redis] Connected to db {redis.Database}"); + logger.Information("Redis", $"Connected to db {redis.Database}"); } catch (Exception e) { - logger.Fatal(e, "[Redis] Redis Connection Failed"); + logger.Error("Redis", "Redis Connection Failed", e); Environment.Exit(102); } @@ -103,7 +103,7 @@ namespace Geekbot.net var audioUtils = new AudioUtils(); services.AddSingleton(redis); - services.AddSingleton(logger); + services.AddSingleton(logger); services.AddSingleton(userRepository); services.AddSingleton(levelCalc); services.AddSingleton(emojiConverter); @@ -113,7 +113,7 @@ namespace Geekbot.net services.AddSingleton(mediaProvider); services.AddSingleton(malClient); - logger.Information("[Geekbot] Connecting to Discord"); + logger.Information("Geekbot", "Connecting to Discord"); await Login(); @@ -130,9 +130,9 @@ namespace Geekbot.net if (isConneted) { await client.SetGameAsync(redis.StringGet("Game")); - logger.Information($"[Geekbot] Now Connected as {client.CurrentUser.Username} to {client.Guilds.Count} Servers"); + logger.Information("Geekbot", $"Now Connected as {client.CurrentUser.Username} to {client.Guilds.Count} Servers"); - logger.Information("[Geekbot] Registering Stuff"); + logger.Information("Geekbot", "Registering Stuff"); var translationHandler = new TranslationHandler(client.Guilds, redis, logger); var errorHandler = new ErrorHandler(logger, translationHandler); await commands.AddModulesAsync(Assembly.GetEntryAssembly()); @@ -153,21 +153,21 @@ namespace Geekbot.net if (firstStart || args.Contains("--reset")) { - logger.Information("[Geekbot] Finishing setup"); + logger.Information("Geekbot", "Finishing setup"); await FinishSetup(); - logger.Information("[Geekbot] Setup finished"); + logger.Information("Geekbot", "Setup finished"); } if (!args.Contains("--disable-api")) { startWebApi(); } - logger.Information("[Geekbot] Done and ready for use\n"); + logger.Information("Geekbot", "Done and ready for use"); } } catch (Exception e) { - logger.Fatal(e, "Could not connect to discord..."); + logger.Error("Discord", "Could not connect...", e); Environment.Exit(103); } } @@ -181,16 +181,16 @@ namespace Geekbot.net private void startWebApi() { - logger.Information("[API] Starting Webserver"); + logger.Information("API", "Starting Webserver"); var webApiUrl = new Uri("http://localhost:12995"); new NancyHost(webApiUrl).Start(); - logger.Information($"[API] Webserver now running on {webApiUrl}"); + logger.Information("API", $"Webserver now running on {webApiUrl}"); } private async Task FinishSetup() { var appInfo = await client.GetApplicationInfoAsync(); - logger.Information($"[Setup] Just a moment while i setup everything {appInfo.Owner.Username}"); + logger.Information("Setup", $"Just a moment while i setup everything {appInfo.Owner.Username}"); try { redis.StringSet("botOwner", appInfo.Owner.Id); @@ -203,12 +203,11 @@ namespace Geekbot.net User.Username = appInfo.Name.ToString(); }); } - logger.Information($"[Setup] Everything done, enjoy!"); + logger.Information("Setup", "Everything done, enjoy!"); } catch (Exception e) { - logger.Warning(e, "[Setup] Oha, it seems like something went wrong while running the setup"); - logger.Warning("[Setup] Geekbot will work never the less, some features might be disabled though"); + logger.Warning("Setup", "Oha, it seems like something went wrong while running the setup, geekbot will work never the less though", e); } return Task.CompletedTask; } @@ -219,22 +218,20 @@ namespace Geekbot.net switch (message.Severity) { case LogSeverity.Verbose: - logger.Verbose(logMessage); - break; case LogSeverity.Debug: - logger.Debug(logMessage); + logger.Debug(message.Source, message.Message); break; case LogSeverity.Info: - logger.Information(logMessage); + 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.Exception, logMessage); + logger.Error(message.Source, message.Message, message.Exception); break; default: - logger.Information($"{logMessage} --- {message.Severity}"); + logger.Information(message.Source, $"{logMessage} --- {message.Severity}"); break; } return Task.CompletedTask;