StackTrace
.NET フレームワークは、スタック トレースを取得するためのオプション [1] を、クラスを直接、経由Exception
、または文字列として使用する以外に提供していないため、Environment.StackTrace
NLog でできることはほとんどありません。さらに、コールスタックは (潜在的に) ログ呼び出しごとに異なります。1 つの例外は、ループ内のログ呼び出しです。しかし、その場合でも、呼び出しが前のものと「同じ場所」から行われたことを NLog が認識できるようにするための機械が必要です。これは、(再び) コールスタックを見て判断するしかありませんでした。
したがって、全体として、NLog はまさにそれを行う必要があると思います: 行われるすべてのログ呼び出しでコールスタックをキャプチャします (呼び出しを処理するすべてのレイアウト/アペンダーではありません) - ちなみに log4net のように、「警告」しますこのオプションは、ログ呼び出しの頻度が高く、パフォーマンスの問題です。
いずれにせよ、 sourceを見てみるといいかもしれませんが、ログ呼び出しごとに 1 つのコールスタックがキャプチャされていることも示されています (デバッガーでステップスルーしていませんが)。
更新完全を期すために、.NET 4.5 以降では、caller info attributesを使用できます。ただし、タイプ名を含めないなど、独自の「制限」があります。ただし、現在 NLog では使用されていません。
[1] 一部の IL レベルの書き換えを使用するか、デバッガーでアプリケーションを実行する以外。