私は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に組み込まれていますか?
${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>