Serilog - не удается закрыть и повторно открыть сопоставленные приемники в многопоточном приложении
Я оцениваю замену существующего регистратора в существующем тестовом приложении. Один из моих потенциальных кандидатов - Serilog. Приложение может запускать до 16 потоков, и каждый поток передается в имени используемого файла журнала. Потоки во время тестового приложения запускаются с 3 разными именами журналов. Я использую расширения Microsoft, чтобы заменить Serilog другим регистратором для оценки.
Мне нужно закрыть, удалить и перезапустить отдельные файлы журнала. Проблема, с которой я сталкиваюсь, заключается в том, что после вызова метода CloseAndFlush все журналы закрываются. Есть ли способ индивидуально закрыть файл журнала в потоке?
Моя конфигурация ниже. RunInLogger - это свойство ILogger, которое я передаю каждому потоку. Если я использую Microsoft Extensions, это Microsoft ILogger, или если я использую Serilog ILogger, это serilog ILogger.
var serilogLogger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Map("Name", "Other", (name, wt) => wt.File($"{name}", outputTemplate: outTML))
.CreateLogger();
Log.Logger = serilogLogger;
ILoggerFactory loggerFactory = new LoggerFactory()
.AddSerilog(serilogLogger);
RunInLogger = loggerFactory.CreateLogger("Program");
Каждому потоку передается RunInLogger (ILogger) и имя файла (RunInLogFile) для начала ведения журнала с помощью метода BeginScope.
using (RunInLogger.BeginScope(new Dictionary<String, object> { { "Name", RunInLogFile } }))
{
RunInLogger.LogInformation(logEntry);
}
Я экспериментировал с использованием Serilog ILogger напрямую, думая, что могу добавить его в свой файл конфигурации - .Enrich.FromLogContext() и заменить BeginScope эквивалентом Serilog - LogContext.PushProperty("Name", RunInLogFile). Получившийся код я попытался закрыть только текущий журнал, но все же закрыл все журналы.
using (LogContext.PushProperty("Name", RunInLogFile))
{
RunInLogger.Log.Information(logEntry);
Log.CloseAndFlush()
}
Есть ли способ вызвать в LogContext только закрыть журнал, связанный с моим RunInLogFile?