私はlog4netを使用しており、コードにはこれがたくさんあります:
public class Foo {
private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
....
}
欠点の 1 つは、この 10 語のセクションをあちこちに貼り付けることになり、ときどき誰かがクラス名を変更するのを忘れてしまうことです。log4net FAQでは、この別の可能性についても言及されていますが、これはさらに詳細です。
public class Foo {
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
...
}
これを定義するデコレータを書くことは可能ですか? 私は本当に簡単に言いたいです:
[LogMe] // or perhaps: [LogMe("log")]
public class Foo {
...
}
私は他の言語で同様のことを行ったことがありますが、C# のような静的にコンパイルされた言語では決して行いませんでした。デコレーターからクラス メンバーを定義できますか?
編集:へー。私は Lisp プログラマーです。言語を切り替えるという提案には感謝していますが、実際には、より優れたメタプログラミング機能のために言語を切り替える場合は、中途半端になるのではなく、Lisp に行きます。残念ながら、このプロジェクトでは別の言語を使用することはできません。