gpt4 book ai didi

c# - 在基类中定义的 log4net 记录器

转载 作者:可可西里 更新时间:2023-11-01 08:05:32 25 4
gpt4 key购买 nike

我想像这样在我的 MVC Controller 抽象基类中构建我的 log4net 记录器:

protected static readonly ILog Log = LogManager.GetLogger(typeof(AuthorizedController));

以这种方式,我可以一次定义记录器并完成它。唯一的问题是日志输出中的记录器属性将始终是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com