Log4Net regional/cultural 设置
Log4Net regional/cultural settings
如何配置 log4nets 区域/文化信息设置?
如果我将日期传递给格式方法,它会以美国格式记录,忽略我的应用程序和 o/s 设置
log.InfoFormat("Invalid date of {0} found in field {1}", date, field.Name);
这会以月/日/年格式写出日期,这与我当前的文化不匹配。
我是不是漏掉了一些非常简单的东西?
在 log4net 的默认 ILog
内部实现 InfoFormat
、WarnFormat
、DebugFormat
等的所有调用如果不是,则使用 CultureInfo.InvariantCulture
明确指定(方法有重载)。这有点愚蠢,因为像 Thread.CurrentThread.CurrentCulture
这样的东西会更正确,但我们能做什么。
所以...您可以明确指定您选择的 IFormatProvider 以在那里使用它。例如
log.InfoFormat(CultureInfo.CurrentCulture, "Invalid date of {0} found in field {1}", date, field.Name);
或者,您也可以在自己的记录器中代理此 class,该记录器在内部使用区域性调用 log4net 记录器对象:
public static class Logger
{
...
public static void InfoFormat(string pattern, params object[] values)
{
_log4net.InfoFormat(CultureInfo.CurrentCulture, pattern, values);
}
如何配置 log4nets 区域/文化信息设置?
如果我将日期传递给格式方法,它会以美国格式记录,忽略我的应用程序和 o/s 设置
log.InfoFormat("Invalid date of {0} found in field {1}", date, field.Name);
这会以月/日/年格式写出日期,这与我当前的文化不匹配。
我是不是漏掉了一些非常简单的东西?
在 log4net 的默认 ILog
内部实现 InfoFormat
、WarnFormat
、DebugFormat
等的所有调用如果不是,则使用 CultureInfo.InvariantCulture
明确指定(方法有重载)。这有点愚蠢,因为像 Thread.CurrentThread.CurrentCulture
这样的东西会更正确,但我们能做什么。
所以...您可以明确指定您选择的 IFormatProvider 以在那里使用它。例如
log.InfoFormat(CultureInfo.CurrentCulture, "Invalid date of {0} found in field {1}", date, field.Name);
或者,您也可以在自己的记录器中代理此 class,该记录器在内部使用区域性调用 log4net 记录器对象:
public static class Logger
{
...
public static void InfoFormat(string pattern, params object[] values)
{
_log4net.InfoFormat(CultureInfo.CurrentCulture, pattern, values);
}