私はそれを自動的に行う方法を知らない。しかし、CastleのgitリポジトリにあるTraceLoggerを見ると、「hierarichal」という名前をサポートするためにTraceSourceが本質的にラップされ拡張されていることがわかります。
https://github.com/castleproject/Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs
私はここのコードをコピーしますが、それだけでSOにあり、コードをカット&ペーストして適切ではないかもしれません。
私はクラスで提示アイデアが(それがものをログに記録したい)クライアントコードでは、本質的には
(お城を使用せずに)あなたのために働く可能性がどのように説明することができ、あなたがインスタンスを作成しますあなたの "ロガー"(TraceSourceではなく)の。ロガーへの入力として、たとえば、完全修飾クラス名を指定します。コンストラクタ内では、入力名を使用してTraceSourceを解決します。その名前で構成されたTraceSourceがある場合は、そのTraceSourceを使用して作業します。そうでない場合は、完全修飾名の右端を切り取ります。その名前のTraceSourceを解決しようとします。その名前で構成されたTraceSourceがある場合は、それを使用します。等々。 TraceSourcesが見つからない場合は、「ロガー」から何もログに記録しないでください。ワイルドカード名( "")で構成されたTraceSourceを認識する機能を追加することができます。名前トリミングテクニックを使用してTraceSourceを見つけたことがなく、 "" TraceSourceがある場合は、 "*" TraceSourceをフォールバックとして使用します。
class MyTraceSource
{
private TraceSource ts;
public MyTraceSource(string name)
{
ResolveTraceSource(name);
}
private void ResolveTraceSource(string name)
{
//Check for a configured TraceSource from most qualified name (as input) to least qualified ("").
//Assume name like this: Namespace1:Namespace2:Class
//Try to resolve:
// TraceSource("Namespace1.Namespace2.Class");
// TraceSource("Namespace1.Namespace2");
// TraceSource("Namespace1");
//If you still haven't found one, try to resolve
// TraceSource("*");
}
//Implement either TraceSource API, or whatever API you prefer for logging.
}
私は実際に試作品の一部として、このように自分自身を何かを行っている(私たちが使用していないことになったということ)、それは道を模倣するためにかなりうまく機能:
だから、あなたはこのようなものを持っているかもしれませんlog4netとNLogにロガーを指定することができます。
幸運を祈る!
この回答は素晴らしいです。私はすでにあなたが提案したのとほぼ同じことをしました。私はロガーに完全なクラス名を与え、アセンブリを解決しようとしました。次に、アセンブリ名をログソースとして使用しました。 (私はすべての私のアセンブリが設定されているため、さまざまな情報源を持っていました)。しかし私は自分のワイルドカードソースを作ることについて決して考えなかった。また、私は解決のあなたの方法はよりflexabillityを持っていると確かに高速です。ありがとう、私はこれを実装するのは難しい、非常に便利です! –