private async Task DatabaseLog(LogLevel level, Exception exception, string message)
        {
            try
            {
                if (_logDb)
                {
                    await _context.SystemLog.AddAsync(new SystemLog()
                    {
                        LogLevel       = level.ToString(),
                        Message        = string.IsNullOrWhiteSpace(message) ? exception.Message : message,
                        InnerException = exception?.InnerException?.Message,
                    });

                    await _context.SaveChangesAsync(CancellationToken.None);
                }
            }
            catch (Exception e)
            {
                _logger.LogCritical(e, $"Could not log message to database - {e.Message}");
            }
        }
        private void FileLog(LogLevel level, Exception exception, string message)
        {
            try
            {
                var className = exception.GetLastCalledClassName();

                if (!string.IsNullOrWhiteSpace(className))
                {
                    var fileLogger = LogManager.GetLogger(className);
                    switch (level)
                    {
                    case LogLevel.Trace:
                        fileLogger.Trace(exception, message);
                        return;

                    case LogLevel.Debug:
                        fileLogger.Debug(exception, message);
                        return;

                    case LogLevel.Info:
                        fileLogger.Info(exception, message);
                        return;

                    case LogLevel.Warn:
                        fileLogger.Warn(exception, message);
                        return;

                    case LogLevel.Error:
                        fileLogger.Error(exception, message);
                        return;
                    }
                }
                else
                {
                    switch (level)
                    {
                    case LogLevel.Trace:
                        _logger.LogTrace(exception, message);
                        return;

                    case LogLevel.Debug:
                        _logger.LogDebug(exception, message);
                        return;

                    case LogLevel.Info:
                        _logger.LogInformation(exception, message);
                        return;

                    case LogLevel.Warn:
                        _logger.LogWarning(exception, message);
                        return;

                    case LogLevel.Error:
                        _logger.LogError(exception, message);
                        return;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
 public LoggingService(IApplicationDbContext context, ILogger <LoggingService> logger, LogLevelSettings settings)
 {
     _context  = context;
     _logger   = logger;
     _logLevel = (LogLevel)Enum.Parse(typeof(LogLevel), settings.Default, true);
 }