【问题标题】:Configure NLog to write exception messages in English配置NLog用英文写异常信息
【发布时间】:2016-07-26 08:43:44
【问题描述】:

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

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

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

【问题讨论】:

标签: .net logging ninject nlog currentuiculture


【解决方案1】:

我在一些帮助下找到了解决方案。请参阅 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}}"

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多