将多个参数发送到log4net

将多个参数发送到log4net,log4net,Log4net,我试图在运行时将任意参数发送到log4net。是否可以动态定义参数并将其发送?我知道您可以这样定义全局参数: log4net.GlobalContext.Properties["MyColumn"] = "MyValue"; 但我想的更多的是: myArrayOfCoolStuff["IP"] = "127.0.0.1"; myArrayOfCoolStuff["UserName"] = "jbleaux"; log.Error(myArrayOfCoolStuff); 考虑到当你把log

我试图在运行时将任意参数发送到log4net。是否可以动态定义参数并将其发送?我知道您可以这样定义全局参数:

log4net.GlobalContext.Properties["MyColumn"] = "MyValue"; 
但我想的更多的是:

myArrayOfCoolStuff["IP"] = "127.0.0.1";
myArrayOfCoolStuff["UserName"] = "jbleaux";
log.Error(myArrayOfCoolStuff);

考虑到当你把log4net当成垃圾时,它往往会悄无声息地失败,我希望找到专业知识,而不仅仅是尝试。对此有什么建议吗?

看看这个,尤其是“计算的上下文值”部分。您可以创建一个类,该类接受您的参数并以您需要的任何格式写入它们。

Neato。在asp.net情况下,有一个请求设置了threadContext,而另一个请求使用它是否存在风险?我担心将Alice的错误记录到Bob的IP或其他东西上。如果您将信息保留在线程上下文中“更长”的时间,这肯定会是一个问题。但是,您可以将信息存储在会话中,并在“写入”(全局)上下文属性时访问会话。我最终在扩展方法中这样做,并在log对象周围放置一个锁(log){},它似乎可以工作。这是对性能的影响,但这段代码只在异常处理时被调用,因此对锁的性能影响是我们最不担心的。谢谢