From de29905324887fc546196c59b83f2c79de08d507 Mon Sep 17 00:00:00 2001 From: Basique Evangelist Date: Wed, 24 Apr 2019 18:10:34 +0300 Subject: [PATCH] Add SqlDebug to config Signed-off-by: Basique Evangelist --- JetKarmaBot/Config.cs | 1 + JetKarmaBot/Program.cs | 5 +- JetKarmaBot/Services/LoggerVirtualizer.cs | 103 ++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 JetKarmaBot/Services/LoggerVirtualizer.cs diff --git a/JetKarmaBot/Config.cs b/JetKarmaBot/Config.cs index 2ca639f..aceec07 100644 --- a/JetKarmaBot/Config.cs +++ b/JetKarmaBot/Config.cs @@ -21,6 +21,7 @@ namespace JetKarmaBot } public ProxySettings Proxy { get; private set; } + public bool SqlDebug { get; private set; } } public abstract class ConfigBase diff --git a/JetKarmaBot/Program.cs b/JetKarmaBot/Program.cs index 5605a52..0839332 100644 --- a/JetKarmaBot/Program.cs +++ b/JetKarmaBot/Program.cs @@ -28,8 +28,11 @@ namespace JetKarmaBot var dbOptions = new DbContextOptionsBuilder() .UseMySql(cfg.ConnectionString); - c.AddInfo(new LogInfo()); + if (cfg.SqlDebug) + { + dbOptions = dbOptions.UseLoggerFactory(c.GetInstance()); + } c.AddTransient(() => new KarmaContext(dbOptions.Options)); c.Add(); diff --git a/JetKarmaBot/Services/LoggerVirtualizer.cs b/JetKarmaBot/Services/LoggerVirtualizer.cs new file mode 100644 index 0000000..85fb301 --- /dev/null +++ b/JetKarmaBot/Services/LoggerVirtualizer.cs @@ -0,0 +1,103 @@ +using System; +using Microsoft.Extensions.Logging; +using NLog; +using Perfusion; + +namespace JetKarmaBot +{ + public class NLoggerFactory : ILoggerFactory + { + [Inject] + private NLoggerProvider c; + public void AddProvider(ILoggerProvider provider) + { + } + + public Microsoft.Extensions.Logging.ILogger CreateLogger(string categoryName) => c.CreateLogger(categoryName); + + public void Dispose() + { + } + } + public class NLoggerProvider : ILoggerProvider + { + [Inject] + private Container c; + + public Microsoft.Extensions.Logging.ILogger CreateLogger(string categoryName) => new LoggerVirtualizer(LogManager.GetLogger(categoryName)); + + public void Dispose() + { + } + } + + public class LoggerVirtualizer : Microsoft.Extensions.Logging.ILogger + { + private Logger logger; + + public LoggerVirtualizer(Logger logger) + { + this.logger = logger; + } + + private Microsoft.Extensions.Logging.LogLevel getAppropriate(NLog.LogLevel level) + { + if (level == NLog.LogLevel.Trace) + return Microsoft.Extensions.Logging.LogLevel.Trace; + else if (level == NLog.LogLevel.Debug) + return Microsoft.Extensions.Logging.LogLevel.Debug; + else if (level == NLog.LogLevel.Info) + return Microsoft.Extensions.Logging.LogLevel.Information; + else if (level == NLog.LogLevel.Warn) + return Microsoft.Extensions.Logging.LogLevel.Warning; + else if (level == NLog.LogLevel.Error) + return Microsoft.Extensions.Logging.LogLevel.Error; + else if (level == NLog.LogLevel.Fatal) + return Microsoft.Extensions.Logging.LogLevel.Critical; + else if (level == NLog.LogLevel.Off) + return Microsoft.Extensions.Logging.LogLevel.None; + else + return Microsoft.Extensions.Logging.LogLevel.None; + } + private NLog.LogLevel getAppropriate(Microsoft.Extensions.Logging.LogLevel level) + { + switch (level) + { + case Microsoft.Extensions.Logging.LogLevel.Trace: + return NLog.LogLevel.Trace; + case Microsoft.Extensions.Logging.LogLevel.Debug: + return NLog.LogLevel.Debug; + case Microsoft.Extensions.Logging.LogLevel.Information: + return NLog.LogLevel.Info; + case Microsoft.Extensions.Logging.LogLevel.Warning: + return NLog.LogLevel.Warn; + case Microsoft.Extensions.Logging.LogLevel.Error: + return NLog.LogLevel.Error; + case Microsoft.Extensions.Logging.LogLevel.Critical: + return NLog.LogLevel.Fatal; + default: + return NLog.LogLevel.Off; + } + } + + public IDisposable BeginScope(TState state) => new SomeDisposable(); + + public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel) + { + return logger.IsEnabled(getAppropriate(logLevel)); + } + + public void Log(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) + { + string message = state.ToString(); + if (exception != null) logger.Log(getAppropriate(logLevel), exception, formatter(state, exception)); + else logger.Log(getAppropriate(logLevel), state); + } + } + public class SomeDisposable : IDisposable + { + public void Dispose() + { + } + } +} \ No newline at end of file