c# - 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 更改为 LogicalThreadContext.Properties 看起来它正在工作
解决方案的参考链接是Log4Net 的 ThreadContext 和 Task 之间的冲突
推荐阅读
- c++ - C++ 模板类给出了“错误:非模板 X 用作模板”
- java - Citrus Simulator 在接收序列化的 xml 数据时抛出 Nullpointer 异常
- c++ - 对于 C++,有 std::strchr() 的任何现代替代品吗?
- node.js - 如何使用 node.js(Firefox 或 Chrome)在 Heroku 上运行 Selenium-Webdriver
- uitableview - 在 javafx 中的 tableView 中自定义 TableCell
- amazon-web-services - 与 aws-cli s3 同步的文件模式匹配
- python - Python通过串口将数据写入Vellemank8090
- c# - 如何通过标识符(名称,Uid ...)访问用户控件?
- mysql - 查询以查找与同事超过 x 次的员工及其部门对
- java - 如果 db 中的布尔值不为 0,则相同的查询不返回任何内容