log4net 上下文设置。如何将上下文传播到任务并行库生成的子线程
log4net context setting. how to propogate context to child threads spawn by Task parallel library
我正在使用以下代码设置 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 更改为逻辑 ThreadContext.Properties
看起来它正在工作
解决方案参考 link 是
我正在使用以下代码设置 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 更改为逻辑 ThreadContext.Properties 看起来它正在工作
解决方案参考 link 是