2013-06-12 5 views
11

ActionFilter를 사용하여 ASP.NET 웹 API 프로젝트의 모든 동작 호출을 기록합니다. OnActionExecuted 메서드는 어떤 일이 일어나고 있는지 많은 것을 알려줍니다.ASP 웹 API 동작의 로그 지속 시간

난 그냥 실행 시간을 측정 할 수있는 효율적인 방법을 찾는 방법을 알아낼 수 없습니다

... 어떤 도움

감사합니다! 트릭을 할해야이 같은

+1

System.Diagnostics.Stopwatch? – Joe

+0

MVC API 및 웹 API 모두 [이 기사] (https://www.simple-talk.com/dotnet/performance/building-performance-metrics-into-asp.net-mvc-applications/)를 확인하십시오. –

답변

28

뭔가 ...

public class StopwatchAttribute : ActionFilterAttribute 
{ 
    private const string StopwatchKey = "StopwatchFilter.Value"; 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     base.OnActionExecuting(actionContext); 

     actionContext.Request.Properties[StopwatchKey] = Stopwatch.StartNew(); 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     base.OnActionExecuted(actionExecutedContext); 

     Stopwatch stopwatch = (Stopwatch)actionExecutedContext.Request.Properties[StopwatchKey]; 
     // TODO something useful with stopwatch.Elapsed 
     Trace.WriteLine("Elapsed = " + stopwatch.Elapsed); 
    } 
} 

는 여기에 우리가 요구 프로퍼티의 새로운 Stopwatch를 저장하고 요청이 완료되면 중지.

+0

고맙습니다. 딘! 이것은 완벽한 해결책입니다! – RooSoft

+0

요청에 인스턴스를 저장하는 이유는 무엇입니까? 왜 그걸 개인 필드로 만들지 않는거야? – user49126

+3

@ user49126 작업 필터는 여러 작업에서 공유되며 여러 개의 기내 요청이있을 수 있습니다. 동시성 관련 문제를 제거하려면 요청에 인스턴스를 저장하는 것이 가장 안전합니다. –