4

末尾のドット文字のにロガーの名前をログに記録できれば、構成ファイル内のターゲットの数を減らすことができるというシナリオがあります。

これを使用${logger:shortName=true}すると、ロガーの短い名前 (定義上、末尾のドット文字の後の部分) をレンダリングできます。ただし、ログに記録したいのは、ドット文字の前の部分です。

たとえば、 のロガー名を使用するMyNamespace.MyClass${logger:shortName=true}、 の値を取得できますが、 の完全な名前を返すのMyClassと同じように の値を取得する方法がわかりません。MyNamespace${logger:shortName=false}MyNamespace.MyClass

それで、これが可能かどうか知りたいですか?

4

1 に答える 1

6

次のようなカスタム ラッパー LayoutRenderer を作成することをお勧めします。

using NLog.Config;
using NLog.LayoutRenderers;

namespace NLog.LayoutRenderers.Wrappers
{
    [LayoutRenderer("loggerprefix")]
    [ThreadAgnostic]
    public sealed class LoggerPrefixRendererWrapper : WrapperLayoutRendererBase
    {
        protected override string Transform(string text)
        {
            return text.Substring(0,text.LastIndexOf('.'));
        }
    }
}

アイデアは、このラッパーを次のloggerように LayoutRendererに適用することです。

${loggerprefix:${logger}}

Transform メソッドは、ロガーの完全な名前 (クラス名をロガー名として使用している場合は完全修飾クラス名) を受け取る必要があります。Transform の内部では、最後の'.'.

また、NLog 構成でアセンブリへの参照を追加する必要があります。

  <extensions>
    <add assembly="MyAssembly"/>
  </extensions>

これは、NLog リポジトリにある WrapperLayoutRenderers に基づいています。

幸運を!

于 2012-06-11T17:14:30.627 に答える