我想在我的MVC Controller 抽象基类中构建log4net记录器,如下所示:
protected static readonly ILog Log = LogManager.GetLogger(typeof(AuthorizedController));
通过这种方式,我可以一次定义记录器并完成它。唯一的问题是,日志输出中的logger属性将始终为
AuthorizedController
,如果我从FooController
继承了AuthorizedController
,我希望日志输出能够反射(reflect)出来。这样做有什么好的KISS,DRY和有效方式?
最佳答案
我不确定LogManager.GetLogger()
的调用有多昂贵,但我怀疑log4net系统中存在一些聪明的缓存和/或惰性初始化,这些请求使实例可以快速检索。毕竟,没有理由为什么使用相同类型参数两次调用LogManager.GetLogger()
会返回不同的实例。
就是说,也许用以下属性替换该字段就足够了。
protected ILog Logger
{
get { return LogManager.GetLogger(GetType()); }
}
GetType()
是虚拟的并且已重载,因此每种具体类型都将在调用此属性时提供其类型。关于c# - 在基类中定义的log4net记录器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12008592/