我根据此答案Measure Time Invoking ASP.NET MVC Controller Actions
创建了一个全局操作过滤器来衡量操作执行时间我想使用log4net记录结果。 我想知道为每次调用创建一个logguer是否会对性能产生影响。 我在我的每个控制器中都有一个静态的ILog实例,如下所示
private static ILog logger = log4net.LogManager.GetLogger(typeof(CompteController));
我可以直接在动作过滤器中访问它吗?
还是有更好的方法吗?
答案 0 :(得分:0)
您可以访问操作过滤器中的控制器类型,并使用控制器类型(typeof(filterContext.Controller.GetType())
)实例化记录器。如果创建单例并在阵列/集合中分配每个新控制器类型记录器,则应该能够在以后的请求中访问它。
如果控制器的记录器在单例中不存在,则在那时创建一个新记录器。实例化新记录器的成本仍然存在,但仅在创建新记录器时才存在。
答案 1 :(得分:0)
我为减少记录器开销所做的是为Global.asax.cs中的整个应用程序创建一个静态记录器
public static ILog logger = LogManager.GetLogger(typeof(MvcApplication));