Jer*_*acs 14 c# inheritance logging log4net static
我想在我的MVC控制器抽象基类中构建我的log4net记录器,如下所示:
protected static readonly ILog Log = LogManager.GetLogger(typeof(AuthorizedController));
通过这种方式,我可以定义一次记录器并完成它.唯一的问题是日志输出中的logger属性将永远是AuthorizedController,如果我FooController继承了AuthorizedController我想像日志输出那样反映.
这样做会有什么好的KISS,DRY和高效方式?
Ste*_*idi 18
我不确定调用的成本是多少LogManager.GetLogger(),但我怀疑在log4net系统中有一些聪明的缓存和/或延迟初始化,可以保证请求的实例可以快速检索.毕竟,没有理由为什么LogManager.GetLogger()使用相同类型参数调用两次会返回不同的实例.
也就是说,或许用以下属性替换该字段就足够了.
protected ILog Logger
{
    get { return LogManager.GetLogger(GetType()); }
}
GetType() 是虚拟和重载,因此每个具体类型将在调用此属性时提供其类型.
| 归档时间: | 
 | 
| 查看次数: | 8913 次 | 
| 最近记录: |