2

現在のスレッド カルチャではなく英語で例外メッセージを書き込むように NLog を構成することは可能ですか?

ここで提案されているように、現在のスレッド カルチャを切り替えることで、この問題を回避できる可能性があります。 Exception messages in English? しかし、別の解決策がある場合はやりたくありません。

私のロガーは Ninject ILogger として公開されているので、各メソッドを実装してスレッド カルチャを変更することもできますが、別の解決策がある場合はそれを避けたいと考えています。

4

1 に答える 1

4

私はいくつかの助けを借りて解決策を見つけました。Julian のおかげでgithub.com/NLog/NLog/issues/172を参照してください

例外がログに記録される前にカルチャを切り替えるカスタム 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}}"
于 2016-07-26T19:09:26.110 に答える