Я использую собственный 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");