NLog Выборочно грипп sh асин c целевые оболочки - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть большое количество asyn c целевых упаковщиков, созданных так:

                var fileTarget = new FileTarget("file_"+unique_id)
                {
                    FileName = $"{unique_id}.log"),
                    Layout = layout_string,
                    DeleteOldFileOnStartup = false,
                    KeepFileOpen = true,
                    AutoFlush = false
                };

                var asyncFileTarget =
                    new NLog.Targets.Wrappers.AsyncTargetWrapper(fileTarget, 10000, NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction.Block);
                asyncFileTarget.Name = unique_id;

                m_job_logger_factory.Configuration.AddTarget(asyncFileTarget);
                m_job_logger_factory.Configuration.AddRule(TranslateEnum(logLevel), NLog.LogLevel.Fatal, asyncFileTarget, assignedLogger.Name);
                m_job_logger_factory.ReconfigExistingLoggers();

Каждой цели назначен отдельный регистратор. Затем я регистрирую пару строк для каждой из созданных целей через назначенных им регистраторов. В файл еще ничего не записано, так как они асин c, а очередь не заполнена.

Теперь, если я сделаю

               Target t = m_job_logger_factory.Configuration.FindTargetByName(unique_id);
               t.Flush((e) => { });

, я бы ожидал только unique_id файл с новыми журналами, вместо этого я нахожу все файлы обновленными (как если бы я вызывал flu sh в LogManager / LogFactory, а не указывал эту c цель).

Является ли эта конфигурация неправильной или это ошибка с target.Flu sh (AsyncContinuation)?

...