我正在使用 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,而不是半途而废。不幸的是,在这个项目中不能选择使用不同的语言。