2011-09-30 137 views
2

我已经设置了ThreadContext.Properties,需要我的代码的生命周期中,以更新其价值。在过去,我使用log4j MDC,并且必须: MDC.remove(TRACKING);删除ThreadContext属性

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

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

问:我如何删除以前的值,并添加一个新的价值?是否如此简单: log4net.ThreadContext.Properties [“TrackingId”] = tracker2;

回答

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" 
0

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

Log4Net Tutorial pt 6: Log Event Context

(向下滚动位)