1

エンドユーザーがクラスごとにログを有効/無効にできる GUI を提供するログ ライブラリがあります。これにより、サポート担当者はエンドユーザーが問題を解決するために関心のあるクラスにログオンできるようにすることができます (これにはもう少し続きがありますが、この質問の目的には十分なはずです)。 . GUI は、ログ ライブラリを使用するすべてのクラスを一覧表示する必要があります。

私が過去に (Win32 アプリで) 使用したアプローチは、ライブラリを使用するクラスを一覧表示するためにライブラリのユーザーが呼び出すレジスタ関数を提供することでした。これは機能しますが、面倒でエラーが発生しやすくなります。私は現在 .NET で作業しているので、実行時に何らかの方法でこれらのクラスのリストを自分で取得して、登録を必要とせずに GUI に入力できることを望んでいました。

これを達成する方法はありますか?

4

4 に答える 4

1

ログを記録するとき、ログを記録したい各クラスは、そのタイプのロガーの静的インスタンスを作成します。この方法により、作成された各インスタンスを追跡し、ユーザーが必要に応じてログを無効にできるようにすることができます。

private static readonly ILog LOG = LogManager.GetLog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

ただし、これは当然、クラスの静的メンバーがロードされるまで (クラス/型が最初にアクセスされたときだと思います) 起動されないため、必要なクラスの完全なリストが表示されない可能性が高いと思います。それらがすべてアクセスされるまでログに記録します。

于 2012-05-28T14:36:13.030 に答える
0

新しいStackTraceを作成することはできますが(これは例外レポートのためだけではありません)、あまり高速ではありません...

于 2012-05-28T14:20:22.860 に答える
0

はい、リフレクションを使用できます。現在ロードされているすべてのクラス (および構造体) を一覧表示する次のコード:

foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()
   foreach(Type type in asm.GetTypes()){   

   } 
}

AppDomain.CurrentDomain.GetAssemblies()は、アプリ ドメインに読み込まれたすべてのアセンブリを一覧表示し、GetTypes()を使用して、アセンブリに含まれるすべてのクラスと構造体を一覧表示します。

于 2012-05-28T14:21:40.830 に答える
0

4.5 - シンプル。呼び出されたメソッドに必要な情報をパラメーターとして追加し、それらに注釈を付けます。残りはコンパイラーが行います。

http://www.wintellect.com/cs/blogs/jgarland/archive/2012/03/05/using-the-new-callerinfo-attributes-for-reliable-property-change-notifications.aspxに詳細情報があります。

次のようになります: private void OnPropertyChanged([CallerMemberName] String caller = null)

悲しいことにクラス名はありません;)そう、運が悪いこともあります。

それ以外の場合 - 高速で信頼できる方法はありません。申し訳ありません。

クラスごとにロギングを有効/無効にします。

私がしていることは、クラス(Logger)の汎用ロガーを持っていることです。これはエラーの可能性がありますが、別のクラス (ヘルパー メソッドなど) のログを手動で記録することもできます。それが得るのとほぼ同じくらい良く、QUITE標準です(nlogには同様のメカニズムがあります)。

于 2012-05-28T14:30:43.677 に答える