log4net上下文设置.如何将上下文分配给任务并行库生成的子线程



我使用以下代码设置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
}
}

有人能帮我吗

我已将代码从ThreadContext.Properties更改为LogicalThreadContent.Properties看起来它正在工作

解决方案的参考链接是Log4Net';s线程上下文和任务

最新更新