web-dev-qa-db-ja.com

NLogにメソッド名を追加する

私はNLogを使用しており、どのクラス/メソッドがログに書き込んだかを追跡できるようにするために、各クラスでログを宣言するという推奨パターンに従っています。これは、ログの書き込みごとにトップレベルの 'スタックトレース'を取得するのに非常に便利です。

私のコードは次のようになりました:

class SomeClass {

  private static readonly Logger logger = LogManager.GetCurrentClassLogger();
     void DoStuff()   {
      logger.Debug("stuff");   }   

}

私は最近、3つの個別のログファイルに書き込むという単一のプロジェクトの要件があり、これを行うために、ここで指定されているように複数のロガーとターゲットを追加しました: https://stackoverflow.com/a/21711838/191206 =

ただし、ログファイルで、クラスレベルの名前が失われました。 NLog.configで指定したログ名を書き込むだけです。自分でメソッド名を追加して、

System.Reflection.MethodBase.GetCurrentMethod(); // use Name property

または、Reflectionで this のようなものを使用する

しかし、私はNLogにこれに組み込まれている何かが欠けているのではないかと思っていますか? Debug()メソッド私は、パラメーターとオプションでフォーマットされた文字列を書き込む機能しか見ていません。

これはNLogに組み込まれていますか?

21
dferraro

${callsite}と呼ばれる組み込みのレイアウトレンダラー があり、ログエントリに呼び出しサイト情報(クラス名、メソッド名、ソース情報)を含めるために使用できます。

<targets>
  <target
    name="task1File"
    xsi:type="File"
    layout="${callsite} - ${message}"
    fileName="${basedir}../Data/debugLog1.txt"
    archiveAboveSize ="5000000"
    maxArchiveFiles="2"/>
  <target
    name="task2File"
    xsi:type="File"
    layout="${callsite} - ${message}"
    fileName="${basedir}../Data/debugLog2.txt"
    archiveAboveSize ="5000000"
    maxArchiveFiles="2"/>
</targets>
45
nemesv