使用日志检查操作的花费时间

时间:2017-10-03 10:53:33

标签: c# logging log4net

问题是我们都面临的问题:

如何检查并查看我的操作/方法的记录方式?

当然,一种方法是使用秒表并在开始动作之前启动它并在完成后停止它:

...
logger.Debug("Starting action Blah Blah");
var sw = new StopWatch();
sw.Start();

..
//Doing the action
..
sw.Stop();
logger.Debug($"action Blah Blah spent {sw.Elapsed}");

右?

如果不在我的代码中添加日志记录逻辑,是不是有更简单的方法呢?

1 个答案:

答案 0 :(得分:1)

我们使用的一种方法是向MVC应用程序添加自定义过滤器。

LogActionFilter

public class LogActionFilter : ActionFilterAttribute
{
    private static NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        _logger.Trace("{0} Controller: {1}, Action: {2}",
                      MethodBase.GetCurrentMethod().Name,
                      filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                      filterContext.ActionDescriptor.ActionName);
        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        _logger.Trace("{0} Controller: {1}, Action: {2}",
                      MethodBase.GetCurrentMethod().Name,
                      filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                      filterContext.ActionDescriptor.ActionName));
        base.OnActionExecuted(filterContext);
    }
}

然后在FilterConfig;

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new LogActionFilter());
    }
}

上面的示例记录了时间,但您可以根据需要调整此时间以执行其他操作。