не установил LogLevel для LoggerProvider - PullRequest
0 голосов
/ 05 сентября 2018

Я использую собственный LoggerProvider для записи журнала в файл. Мой провайдер работает хорошо, но я не могу установить уровень журнала меньше, чем «информация».

Я использую loggerFactory.AddConsole(minLevel:LogLevel.Debug); для установки уровня логирования, но это не работает. Я вижу все события - «предупреждение», «информация» и т. Д., Но не «отладка» и «трассировка». MinLevel в моем ILogger - это «информация».

Как изменить уровень в LoggerProvider?

Мой ILogger:

public class FileLogger : ILogger
        {
            private string filePath;
            private object _lock = new object();

            private readonly Func<string, LogLevel, bool> _filter;

            public FileLogger(string path)
            {
                filePath = path;
            }
            public IDisposable BeginScope<TState>(TState state)
            {
                return null;
            }

            public bool IsEnabled(LogLevel logLevel)
            {
                return true;
            }

            public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
            {
                if (formatter != null)
                {
                    lock (_lock)
                    {
                        switch (logLevel)
                        {
                            case LogLevel.Debug:
                                {
                                    File.AppendAllText(filePath + System.DateTime.Now.ToShortDateString() + "_DEBUG.log", DateTime.Now.ToString("T") + "   " + formatter(state, exception) + Environment.NewLine);
                                    break;
                                }
                            case LogLevel.Critical:
                                {
                                    File.AppendAllText(filePath + System.DateTime.Now.ToShortDateString() + "_CRITICAL.log", DateTime.Now.ToString("T") + "   " + formatter(state, exception) + Environment.NewLine);
                                    break;
                                }
                            default:
                                {
                                    File.AppendAllText(filePath + System.DateTime.Now.ToShortDateString() + ".log", DateTime.Now.ToString("T") + "   " + formatter(state, exception) + Environment.NewLine);
                                    break;
                                }
                        }


                    }
                }
            }
        }

Мой ILoggerProvider:

 public class FileLoggerProvider : ILoggerProvider
        {
            private string path;

            public FileLoggerProvider(string _path)
            {
                path = _path;
            }

            public ILogger CreateLogger(string categoryName)
            {
                return new FileLogger(path);
            }

            public void Dispose()
            {
            }
        }

и LoggerExtensions:

public static class FileLoggerExtensions
    {
        public static ILoggerFactory AddFile(this ILoggerFactory factory,
                                        string filePath)
        {
            factory.AddProvider(new Values.FileLoggerProvider(filePath));
            return factory;
        }
    }

Мой код в configure.cs

    loggerFactory.AddFile("C:/log/");
    loggerFactory.AddConsole(minLevel:LogLevel.Debug);
    loggerFactory.AddDebug(minLevel: LogLevel.Debug);
    var _logger = loggerFactory.CreateLogger("FileLogger");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...