2012-12-11 3 views
0

기본 No Op 추적 기록기를 바꾸어 추적 기능을 사용할 수 있습니다.Web Api : 서버가 실행 중일 때 추적 기능을 사용하지 않음

GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer()); 

그러나 서버를 실행하는 동안 어떻게 비활성화 할 수 있습니까?

열거 형 "TraceLevel"에는 TraceLevel.Off 옵션이 있습니다. 추적 프레임 워크 양식 web api를 TraceLevel.Off로 설정하는 방법이 있습니까?

+0

"서버가 실행"을 사용 설정은 최대입니다 제안? 서버가 "실행 중이 지 않을 때 어떻게 사용할 수 있습니까?" 누가 당신의 코드를 실행할 것입니까? – tugberk

답변

1

이 기사 here을보십시오.

WebApi는 현재 범주 또는 수준과 관련하여 추적 기록기를 구성 할 수있는 방법을 제공하지 않습니다.

그리고 현재 사용되는 범주와 수준을 결정

는 ITraceWriter 구현의 책임입니다. 웹 API 프레임 워크에는 추적 구성 또는 어떤 범주와 수준이 사용되는지 결정하는 개념이 없습니다.

이 방법의 목적은 ITraceWriter 구현 자체의 메커니즘을 사용하여 추적 대상을 구성하고 위치를 사용하는 것입니다.

예를 들어, NLog 관련 ITraceWriter를 사용하는 경우 NLog 구성 메커니즘을 통해 추적을 구성해야합니다.

요약하면 추적을 사용하거나 사용하지 않도록 설정하거나 특정 수준의 추적을 기록하지 않기로 결정한 경우 사용자가 SimpleTracer 내부에 구현할 수 있습니다.

고유 한 스레드 세이프 싱글 톤 TraceConfiguration (GlobalConfiguration과 유사) 구현을 작성하여 코드 내에서 토글을 켜거나 끌 수 있도록 추적 구성을 제어 할 수 있습니다.

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction) 
{ 
    if(TraceConfiguration.Configuration.IsEnabled) 
    { 
     //trace 
    } 
} 

또는 요청 개체의 속성을 설정하고 액세스하여 추적을 사용할지 여부를 결정할 수 있습니다. 액션 및 컨트롤러의 ActionFilters로 설정하거나 컨트롤러 내에서 설정할 수도 있습니다. 당신이 NLog 또는 Log4Net 등을 사용하는 경우

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction) 
{ 
    if(request.Properties["SupressTracing"] as string != "true") 
    { 
     //trace 
    } 
} 

또는 기사로

당신이 수준을 통해 설정 등 u는 무엇을 의미합니까

+0

좋습니다. 내가 혼자서 일해야만하는 것처럼 보입니다. BTW : 나는 NLog를 사용하고 싶지 않다. 이 프레임 워크는 매우 나쁜 성능을 보입니다. – user437899

관련 문제