什么是最好的记录IFormatProvider?

时间:2012-10-30 02:36:23

标签: asp.net .net

我有一个可安装的ASP.Net应用程序,它使用Common.Logging进行日志记录。

编写日志消息时:

_log.InfoFormat(CultureInfo.???, "{0}: Writing to the Log", DateTime.UtcNow);

我对我应该使用哪种文化感到困惑。我想要的结果是使用服务器的区域设置格式化日志消息。这样,当管理员安装应用程序时,他们可以控制日志消息的格式化。

有四种选择但似乎没有一种是正确的选择:

  • CultureInfo.CurrentCulture:这似乎是Windows应用程序的正确选择,但ASP.Net正在改变这一点以匹配浏览网站的用户 - 因此它适合格式化内容显示给用户而不是用于写入到日志。
  • CultureInfo.CurrentUICulture:与CurrentCulture类似的问题 - 将与浏览网站的当前用户相匹配。
  • CultureInfo.InstalledUICulture:系统安装文化 - 似乎与已安装但不可由用户更改的Windows副本相关。显然这个有点useless
  • CultureInfo.InvariantCulture:这不是用户可配置的。我想知道这是否是这四个选项中最好的,但至少它是一致的,并且不会因浏览网站/安装媒体窗口的人而有所不同。

我想知道是否需要在web.config中为系统文化添加显式配置,以便安装程序可以选择文化。我真正想要的答案是,在ASP.Net将其更改为与当前用户匹配之前,CultureInfo.CurrentCulture是什么。

注意:我知道我可以关闭ASP.Net来更改每个用户的CurrentCulture,但是UI依赖于这种行为。

1 个答案:

答案 0 :(得分:1)

管理员喜欢控制日志。告诉他们配置他们的服务器文化,以便日志采用特定格式似乎不是我的最佳解决方案。

在web.config中添加配置选项是个好主意。这将让管理员根据需要配置日志格式。

在使用CultureInfo.CurrentCulture安装时,您可以做出明智的猜测,而不是询问用户。如果用户想要它是不同的东西,他总是可以改变它。

如果您确实想要从CultureInfo.CurrentCulture而不是配置中获取它,您可以在Application_Start事件期间选择它,并将其保留在应用程序上下文中。