log4net Context Stack support

log4net supports  a concept of using stacks in the code that that each log statement doesn't have to include contextual information. For example, if processing everything for a user, the block can be wrapped with a stack value with a UserID.

using(log4net.ThreadContext.Stacks["NDC"].Push("UserID: 323-3223-dcs3234324"))
{
    log.Info("This message will get the stack");
   log.Error("So will this message");
}

http://logging.apache.org/log4net/release/manual/contexts.html