42

私は現在、組み込みの TraceListener を使用してアプリケーション ログ ライブラリを開発しています。このライブラリは多くのプロジェクトで使用され、ログ ファイルに何が書き込まれるかを気にするだけでよく、方法は気にしなくてもよい単純なインターフェイスを提供する必要があります。

リフレクション名前空間を使用することで、どのアプリケーションが現在ログ関数を呼び出しているか (実行アセンブリ名を取得) を把握できますが、ログ関数を呼び出した関数とクラスの名前も必要です。

私が持っているとしましょう:

public static void LogInfo(string vLogText) {
   Trace.WriteLine(
        MethodInfo.GetCurrentMethod().Name
        + this.GetType().ToString() + vLogText);
   }

別のプロジェクト(クラス:TestClass、メソッド:TestMethod)から呼び出す場合

Tracer.LogInfo("log this!")

ログに表示されることを期待しています:

TestClass, TestMethod, log this!

しかし、代わりに私は得ました

TracerClass, LogInfo, log this!

親メソッドとクラス名を取得するには?

4

2 に答える 2

33

次のようにしてみてください。

var mth = new StackTrace().GetFrame(1).GetMethod();
var cls = mth.ReflectedType.Name;
// where 1 illustrates how deep into the stack to reflect.

C# 5.0 > にはもっと洗練されたソリューションがありますが、古いフレームワークを使用している場合は、上記が役に立ちます。

于 2013-02-13T08:36:21.150 に答える
3

を使用してメソッドを呼び出すだけでなく、スタックトレース全体を記録することもできますEnvironment.StackTrace。これは、同じログ構造を使用して例外をログに記録する場合に役立つことがあります。

詳細については、このmsdnページを参照してください。

于 2013-02-13T08:39:03.147 に答える