配置NLog以英文

时间:2016-07-26 08:43:44

标签: .net logging ninject nlog currentuiculture

是否可以将NLog配置为用英语而不是当前的线程文化编写异常消息?

可能通过切换此处Exception messages in English?建议的当前线程文化来解决此问题,但如果有其他解决方案,我不想这样做。

我的记录器作为Ninject ILogger公开,所以我也可以实现每个方法并改变线程文化,但如果还有其他解决方案,我宁愿避免这种情况。

1 个答案:

答案 0 :(得分:3)

我找到了一些有帮助的解决方案。见github.com/NLog/NLog/issues/172感谢Julian

可以编写一个自定义WrapperLayoutRenderer,在记录异常之前切换文化。

namespace NLog.LayoutRenderers.Wrappers
{
    [LayoutRenderer("InvariantCulture")]
    [ThreadAgnostic]
    public sealed class InvariantCultureLayoutRendererWrapper : WrapperLayoutRendererBase
    {
        protected override string Transform(string text)
        {
            return text;
        }

        protected override string RenderInner(LogEventInfo logEvent)
        {
            var currentCulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
                return base.RenderInner(logEvent);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = currentCulture;
            }
        }
    }
}

必须在创建任何记录器之前注册

ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("InvariantCulture", typeof(InvariantCultureLayoutRendererWrapper));

可以在配置

中使用
layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${InvariantCulture:${exception:format=tostring}}"