Настройка контекста log4net.Как распространить контекст для порождения дочерних потоков с помощью параллельной библиотеки задач - PullRequest
0 голосов
/ 30 ноября 2018

Я использую следующий код для установки контекста log4net

 public static IDisposable ThreadContextSet(string key, object value)
        {
            //object oldVal = ThreadContext.Properties[key];
            ThreadContext.Properties[key] = value;
            var topMostCleaner = new DispCleaner();
            topMostCleaner.EvDispose += () => {
                // Pop = restore old value
                //ThreadContext.Properties[key] = oldVal;
                ThreadContext.Properties[key] = null;
            };
            return topMostCleaner;
        }

        private class DispCleaner : IDisposable
        {
            public event Action EvDispose;

            public void Dispose()
            {
                if (EvDispose != null)
                {
                    EvDispose();
                }
            }
        }

Проблема в том, что я создаю дочернюю нить из метода, когда контекст не передается в эту нить.

Как

public void InitiateTransaction(InitiateTransactionRequest info)
{
..
...
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.Ip, this.RequestIp))
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.TransactionMsisdn, msisdn))
                using (Log4NetExt.ThreadContextSet(StringConstants.Log4NetContextConstants.TransactionId, transactionId))
                {

                ...
                ....

                Task.Factory.StartNew(() => ProcessTransactionAync()); // context not transfer
                }

}

Может ли какое-либо тело помочь мне в этом

1 Ответ

0 голосов
/ 30 ноября 2018

Я изменил код с ThreadContext.Properties на LogicalThreadContext.Properties и выглядит так, как будто он работает

Ссылочная ссылка для решения Конфликт между ThreadContext Log4Net и задачей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...