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 内部实现 InfoFormatWarnFormatDebugFormat 等的所有调用如果不是,则使用 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);
    }