private static bool TranslateLogLevel(Microsoft.Extensions.Logging.LogLevel logLevel, out LogLevel vostokLogLevel)
            {
                switch (logLevel)
                {
                case Microsoft.Extensions.Logging.LogLevel.Trace:
                    vostokLogLevel = LogLevel.Trace;
                    return(true);

                case Microsoft.Extensions.Logging.LogLevel.Debug:
                    vostokLogLevel = LogLevel.Debug;
                    return(true);

                case Microsoft.Extensions.Logging.LogLevel.Information:
                    vostokLogLevel = LogLevel.Info;
                    return(true);

                case Microsoft.Extensions.Logging.LogLevel.Warning:
                    vostokLogLevel = LogLevel.Warn;
                    return(true);

                case Microsoft.Extensions.Logging.LogLevel.Error:
                    vostokLogLevel = LogLevel.Error;
                    return(true);

                case Microsoft.Extensions.Logging.LogLevel.Critical:
                    vostokLogLevel = LogLevel.Fatal;
                    return(true);

                default:
                    vostokLogLevel = default(LogLevel);
                    return(false);
                }
            }
            public void Log <TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
            {
                if (!TranslateLogLevel(logLevel, out var vostokLogLevel) || !log.IsEnabledFor(vostokLogLevel))
                {
                    return;
                }

                var messageTemplate = formatter != null
                    ? formatter(state, exception)
                    : ReferenceEquals(state, null)
                        ? typeof(TState).FullName
                        : Convert.ToString(state);

                var logEvent = new LogEvent(vostokLogLevel, exception, messageTemplate, Array.Empty <object>());

                if (state is IEnumerable <KeyValuePair <string, object> > kvps)
                {
                    foreach (var kvp in kvps)
                    {
                        if (kvp.Key == "{OriginalFormat}")
                        {
                            continue;
                        }
                        logEvent.AddPropertyIfAbsent(kvp.Key, kvp.Value);
                    }
                }
                log.Log(logEvent);
            }
 public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel)
 {
     return(TranslateLogLevel(logLevel, out var vostokLogLevel) && log.IsEnabledFor(vostokLogLevel));
 }