我正在使用log4net,在我们的代码中有很多这样的东西:
public class Foo {
private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
....
}
缺点之一是这意味着我们会在很多地方粘贴这个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,而不是半途而废。不幸的是,在这个项目中使用不同的语言不是一个选项。