记录全局动作过滤器内部的性能影响

时间:2016-02-02 16:39:57

标签: asp.net-mvc asp.net-mvc-5 log4net

我根据此答案Measure Time Invoking ASP.NET MVC Controller Actions

创建了一个全局操作过滤器来衡量操作执行时间

我想使用log4net记录结果。 我想知道为每次调用创建一个logguer是否会对性能产生影响。 我在我的每个控制器中都有一个静态的ILog实例,如下所示

private static ILog logger = log4net.LogManager.GetLogger(typeof(CompteController));

我可以直接在动作过滤器中访问它吗?

还是有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以访问操作过滤器中的控制器类型,并使用控制器类型(typeof(filterContext.Controller.GetType()))实例化记录器。如果创建单例并在阵列/集合中分配每个新控制器类型记录器,则应该能够在以后的请求中访问它。

如果控制器的记录器在单例中不存在,则在那时创建一个新记录器。实例化新记录器的成本仍然存在,但仅在创建新记录器时才存在。

答案 1 :(得分:0)

我为减少记录器开销所做的是为Global.asax.cs中的整个应用程序创建一个静态记录器

public static ILog logger = LogManager.GetLogger(typeof(MvcApplication));