删除ThreadContext属性

时间:2011-09-30 17:00:20

标签: .net asp.net-mvc-3 logging log4net

我已经设置了ThreadContext.Properties,需要在我的代码的生命周期中更新它的值。过去我使用过log4j MDC并且不得不: MDC.remove(跟踪);

然后通过以下方式添加另一个值: MDC.put(TRACKING,trackingIdStr);

现在我正在使用Log4Net,我们的应用程序使用属性: log4net.ThreadContext.Properties [“TrackingId”] = tracker;

问题:如何删除以前的值并添加新值?是否像以下一样简单: log4net.ThreadContext.Properties [“TrackingId”] = tracker2;

2 个答案:

答案 0 :(得分:3)

是的,就这么简单。您可以按照问题中的显示进行重新分配,也可以在完成后完全删除该值。

//set
ThreadContext.Properties["TrackingId"] = tracker1;

//reset
ThreadContext.Properties["TrackingId"] = tracker2;

//completely remove
ThreadContext.Properties.Remove("TrackingId");

如果您希望您的上下文属性对特定代码段有效(通过使用),那么您可以尝试ThreadContext.Stacks:

using(ThreadContext.Stacks["TrackingId"].Push("hello"))
{
  //messages logged here will be tagged with TrackingId="hello"
}
//messages logged here will not be tagged with TrackingId="hello"

答案 1 :(得分:0)

也许这不会直接回答您的问题,但在您的情况下,您可能会考虑使用计算的上下文值。这里解释得很好:

Log4Net Tutorial pt 6: Log Event Context

(向下滚动一下)