Я понимаю, что NLog LogManager.Shutdown () эффективно удаляет все элементы журналов и прекращает журналирование. После этого должно работать программное удаление заблокированного файла журнала, вместо этого я обнаружил, что он не удаляется сразу, файл все еще заблокирован и разблокируется только после завершения процесса.
Это моя программа c config:
var fileTarget = new FileTarget()
{
FileName = "logs.txt",
Layout = <string layout>,
KeepFileOpen = true,
ArchiveAboveSize = 50000000,
ArchiveEvery = FileArchivePeriod.Day,
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
ArchiveDateFormat = DatePattern
};
var asyncFileTarget =
new NLog.Targets.Wrappers.AsyncTargetWrapper(fileTarget, 10000, NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction.Block);
asyncFileTarget.Name = "async_target";
var config = new LoggingConfiguration();
config.AddTarget(asyncFileTarget);
config.AddRule(NLog.LogLevel.Debug, NLog.LogLevel.Fatal, asyncFileTarget);
Тогда, если я это сделаю,
LogManager.Shutdown(); //logs get flushed and written to the file
File.Delete("logs.txt"); //Nothing happens, file deletes only after process exits
Я также попытался
LogManager.Configuration = null;
, который имел тот же результат.
I необходимо иметь KeepFileOpen = true по соображениям производительности. Как мне заставить NLog выпустить заблокированные целевые файлы?