#serilog
#serilog
Вопрос:
Итак, у меня есть простой метод создания экземпляров logger для меня.
Это выглядит следующим образом
protected ILogger GetIndividualLogger(ILogger parentLogger, LogEventLevel minimumLevel, string RootDir, string Type, string Name, bool shouldBuffer, bool shouldBeShared, TimeSpan flushToDiskInterval)
{
var LogAllFile = $"{RootDir}{Path.DirectorySeparatorChar}{Name}{Path.DirectorySeparatorChar}RAL-{Type}-{Name}-.log";
var LogWarningFile = $"{RootDir}{Path.DirectorySeparatorChar}{Name}{Path.DirectorySeparatorChar}Warnings{Path.DirectorySeparatorChar}RAL-{Type}-{Name}-.log";
ILogger logger = new LoggerConfiguration()
.MinimumLevel.Is(minimumLevel)
.Enrich.WithDemystifiedStackTraces()
.WriteTo.Async(a => a.Logger(parentLogger))
.WriteTo.Async(a => a.File(LogAllFile, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared))
.WriteTo.Async(a => a.File(LogWarningFile, restrictedToMinimumLevel: LogEventLevel.Warning, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared, flushToDiskInterval: flushToDiskInterval))
.CreateLogger();
return logger;
}
Вот пример вызова GetIndividualLogger
GetIndividualLogger(parentLogger: mainLogger, minimumLevel: LogEventLevel.Information, RootDir: _stackLightLogPath, Type: "Stack Light", Name: "Stack Light 1", shouldBuffer: true, shouldBeShared: false, flushToDiskInterval: TimeSpan.FromSecond(2))
Приемник уровня предупреждения запишет, но затем другой приемник, который обычно настроен на debug или information, создаст пустой файл, но никогда не добавит в него никаких записей.
Я ожидал бы, что оба файла будут иметь все записи уровня предупреждения или выше. Я ожидал бы, что в «LogAllFile» все записи будут на минимальном уровне или выше, но он пустой.
Что-то не так с моей конфигурацией регистратора? или моя проблема в другом месте?
Ответ №1:
Итак, ответ на проблему был глупым. Журнал предупреждений сбрасывался на диск каждые 2 секунды, но основной файл журнала не был, поэтому все, что мне нужно было сделать, это просто передать значение для flushToDiskInterval
.WriteTo.Async(a => a.File(LogAllFile, outputTemplate: SerilogHereHelper.TemplateForHere, rollingInterval: RollingInterval.Day, buffered: shouldBuffer, shared: shouldBeShared, flushToDiskInterval: flushToDiskInterval))