用于捕获浏览器功能的log4net上下文

时间:2015-03-10 12:18:45

标签: c# asp.net-mvc logging log4net

我想在log browser capabilities中使用log4net到custom property。这里使用的context最好的是什么?

  • log4net.GlobalContext
  • log4net.ThreadContext
  • log4net.ThreadLogicalContext
  • log4net.Core.LoggingEvent

1 个答案:

答案 0 :(得分:1)

正如您在链接到的页面中所看到的,以下是所有这些背景的预期差异:

  • 全局上下文由当前AppDomain中的所有线程共享。此上下文是线程安全的,可供多个线程同时使用。
  • 线程上下文仅对当前托管线程可见。
  • 逻辑线程上下文对逻辑线程可见。逻辑线程可以从一个托管线程跳转到另一个托管线程。有关更多详细信息,请参阅.NET API System.Runtime.Remoting.Messaging.CallContext。
  • 每个事件都会捕获事件生成时的当前上下文状态。可以在事件本身上设置上下文数据。此上下文仅对生成事件本身的代码可见。

正如您所看到的,背景会影响您的财产所在的范围。由于您希望记录浏览器功能,因此我认为您可以使用多个线程。如果您要将属性保存在共享上下文(全局)中,则可能会丢失信息。我不确定线程​​上下文,因为线程在等待某些异步数据时可能会收到其他一些请求。

最后,事件上下文似乎是最安全和最合乎逻辑的选择,因为您肯定会为每个浏览器(或每个请求)记录一个事件,并且不需要与其他记录器共享此信息。