이 항목에서는 추적을 사용하도록 설정하고 추적 소스를 구성하여 추적을 내보내고 추적 수준을 설정하고, 엔드투엔드 추적 상관 관계를 지원하도록 활동 추적 및 전파를 설정하고, 추적에 액세스하도록 추적 수신기를 설정하는 방법을 설명합니다.
프로덕션 또는 디버깅 환경의 추적 설정 권장 사항은 추적 및 메시지 로깅에 대한 권장 설정을 참조하세요.
중요합니다
Windows 8에서는 애플리케이션이 추적 로그를 생성하려면 관리자 권한으로 애플리케이션을 실행(관리자 권한으로 실행)해야 합니다.
추적 활성화
WCF(Windows Communication Foundation)는 진단 추적을 위해 다음 데이터를 출력합니다.
작업 호출, 코드 예외, 경고 및 기타 중요한 처리 이벤트와 같은 애플리케이션의 모든 구성 요소에서 프로세스 중요 시점을 추적합니다.
추적 기능이 오작동할 때 발생하는 Windows 오류 이벤트입니다. 이벤트 로깅을 참조하세요.
WCF 추적은 System.Diagnostics 위에 구축됩니다. 추적을 사용하려면 구성 파일 또는 코드에서 추적 원본을 정의해야 합니다. WCF는 각 WCF 어셈블리에 대한 추적 원본을 정의합니다. 추적 원본은 System.ServiceModel
가장 일반적인 WCF 추적 원본이며, 전송 입력/종료에서 사용자 코드 입력/종료에 이르기까지 WCF 통신 스택에서 중요 시점을 처리하는 레코드입니다. 추적 원본은 System.ServiceModel.MessageLogging
시스템을 통해 흐르는 모든 메시지를 기록합니다.
추적은 기본적으로 사용하도록 설정되지 않습니다. 추적을 활성화하려면 추적 수신기를 만들고 구성에서 선택한 추적 원본에 대해 "Off" 이외의 추적 수준을 설정해야 합니다. 그렇지 않으면 WCF는 추적을 생성하지 않습니다. 수신기를 지정하지 않으면 추적이 자동으로 비활성화됩니다. 수신기가 정의되었지만 수준이 지정되지 않은 경우 수준은 기본적으로 "끄기"로 설정되므로 추적이 내보내지지 않습니다.
사용자 지정 작업 호출자와 같은 WCF 확장성 지점을 사용하는 경우 고유한 추적을 내보내야 합니다. 확장성 지점을 구현하는 경우 WCF는 더 이상 기본 경로에서 표준 추적을 내보낼 수 없기 때문입니다. 추적을 내보내 수동 추적 지원을 구현하지 않으면 예상한 추적이 표시되지 않을 수 있습니다.
웹 호스팅 애플리케이션에 대한 Web.config 또는 자체 호스팅 애플리케이션에 대한 Appname.exe.config 애플리케이션의 구성 파일을 편집하여 추적을 구성할 수 있습니다. 다음은 이러한 편집의 예입니다. 이러한 설정에 대한 자세한 내용은 "추적을 사용하도록 추적 수신기 구성" 섹션을 참조하세요.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
비고
Visual Studio에서 WCF 서비스 프로젝트의 구성 파일을 편집하려면 웹 호스팅 애플리케이션에 대한 Web.config 또는 솔루션 탐색기에서 자체 호스팅 애플리케이션에 대한 Appname.exe.config 애플리케이션의 구성 파일을 마우스 오른쪽 단추로 클릭합니다. 그런 다음 WCF 구성 편집 상황에 맞는 메뉴 항목을 선택합니다. 그러면 그래픽 사용자 인터페이스를 사용하여 WCF 서비스의 구성 설정을 수정할 수 있는 구성 편집기 도구(SvcConfigEditor.exe)가 시작됩니다.
추적을 발생시키도록 추적 원본 구성하기
WCF는 각 어셈블리에 대한 추적 원본을 정의합니다. 어셈블리 내에서 생성된 추적은 해당 원본에 대해 정의된 수신기에 의해 액세스됩니다. 다음 추적 원본이 정의됩니다.
System.ServiceModel: 구성을 읽을 때마다 전송, 보안 처리에서 메시지가 처리되고, 메시지가 사용자 코드로 디스패치되는 등 WCF 처리의 모든 단계를 기록합니다.
System.ServiceModel.MessageLogging: 시스템을 통해 흐르는 모든 메시지를 기록합니다.
System.IdentityModel.
System.ServiceModel.Activation.
System.IO.Log: CLFS(공용 로그 파일 시스템)에 대한 .NET Framework 인터페이스에 대한 로깅입니다.
System.Runtime.Serialization: 개체를 읽거나 쓸 때 로그를 기록합니다.
CardSpace.
다음 구성 예제에 표시된 대로 동일한(공유) 수신기를 사용하도록 각 추적 원본을 구성할 수 있습니다.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
또한 다음 예제와 같이 사용자 정의 추적 원본을 추가하여 사용자 코드 추적을 내보낼 수 있습니다.
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
사용자 정의 추적 원본을 만드는 방법에 대한 자세한 내용은 추적 확장을 참조하세요.
추적을 소비하도록 추적 수신기를 구성하기
런타임에 WCF는 추적 데이터를 수신기에 피드하여 데이터를 처리합니다. WCF는 출력 형식에 따라 System.Diagnostics과 관련하여 여러 가지 미리 정의된 수신기를 제공합니다. 사용자 지정 수신기 형식을 추가할 수도 있습니다.
사용할 추적 수신기의 이름과 형식을 지정하는 데 사용할 add
수 있습니다. 예제 구성에서는 수신기 traceListener
의 이름을 지정하고 표준 .NET Framework 추적 수신기(System.Diagnostics.XmlWriterTraceListener
)를 사용하려는 형식으로 추가했습니다. 각 원본에 대해 임의의 수의 추적 수신기를 추가할 수 있습니다. 추적 수신기가 추적을 파일로 내보내는 경우 구성 파일에서 출력 파일 위치와 이름을 지정해야 합니다. 이 작업은 해당 수신기의 파일 이름으로 설정 initializeData
하여 수행됩니다. 파일 이름을 지정하지 않으면 사용된 수신기 형식에 따라 임의의 파일 이름이 생성됩니다. 사용되는 경우 XmlWriterTraceListener 확장명 없는 파일 이름이 생성됩니다. 사용자 지정 수신기를 구현하는 경우 이 특성을 사용하여 파일 이름 이외의 초기화 데이터를 받을 수도 있습니다. 예를 들어 이 특성에 대한 데이터베이스 식별자를 지정할 수 있습니다.
네트워크를 통해 예를 들어 원격 데이터베이스로 추적 정보를 전송할 수 있도록 사용자 지정 추적 수신기를 구성할 수 있습니다. 애플리케이션 배포자는 원격 컴퓨터의 추적 로그에 적절한 액세스 제어를 적용해야 합니다.
프로그래밍 방식으로 추적 수신기를 구성할 수도 있습니다. 자세한 내용은 방법: 추적 수신기 만들기 및 초기화 및 사용자 지정 TraceListener 만들기를 참조하세요.
주의
System.Diagnostics.XmlWriterTraceListener
스레드로부터 안전하지 않으므로 추적 원본은 추적을 출력할 때 리소스를 단독으로 잠글 수 있습니다. 많은 스레드가 이 수신기를 사용하도록 구성된 추적 원본에 추적을 출력하는 경우 리소스 경합이 발생하여 심각한 성능 문제가 발생할 수 있습니다. 이 문제를 해결하려면 스레드로부터 안전한 사용자 지정 수신기를 구현해야 합니다.
추적 수준
추적 수준은 switchValue
에 의해 설정된 추적 소스로 제어됩니다. 사용 가능한 추적 수준은 다음 표에 설명되어 있습니다.
추적 수준 | 추적된 이벤트의 특성 | 추적된 이벤트의 콘텐츠 | 추적된 이벤트 | 사용자 대상 |
---|---|---|---|---|
끄기 | 해당 없음(N/A) | 해당 없음(N/A) | 내보낸 추적이 없습니다. | 해당 없음(N/A) |
중요한 | "부정" 이벤트: 예기치 않은 처리 또는 오류 조건을 나타내는 이벤트입니다. | 다음을 포함하여 처리되지 않은 예외가 기록됩니다. - OutOfMemoryException (메모리 부족 예외) - ThreadAbortException(CLR이 ThreadAbortExceptionHandler를 호출함) - StackOverflowException(catch할 수 없음) - ConfigurationErrorsException - SEHException - 애플리케이션 시작 오류 - Failfast 이벤트 - 시스템 중단 - 포이즌 메시지: 애플리케이션이 실패하게 만드는 메시지 추적입니다. |
관리자 애플리케이션 개발자 |
|
오류 | "부정" 이벤트: 예기치 않은 처리 또는 오류 조건을 나타내는 이벤트입니다. | 예기치 않은 처리가 발생했습니다. 애플리케이션이 예상대로 작업을 수행할 수 없습니다. 그러나 애플리케이션은 여전히 실행 중입니다. | 모든 예외가 기록됩니다. | 관리자 애플리케이션 개발자 |
경고 | "부정" 이벤트: 예기치 않은 처리 또는 오류 조건을 나타내는 이벤트입니다. | 가능한 문제가 발생했거나 발생할 수 있지만 애플리케이션은 여전히 올바르게 작동합니다. 그러나 제대로 작동하지 않을 수 있습니다. | - 애플리케이션이 제한 설정에서 허용하는 것보다 더 많은 요청을 수신합니다. - 수신 큐가 구성된 최대 용량에 가깝습니다. - 시간 제한이 초과되었습니다. - 자격 증명이 거부됩니다. |
관리자 애플리케이션 개발자 |
정보 | "긍정적" 이벤트: 성공적인 중요 시점을 표시하는 이벤트 | 애플리케이션이 제대로 작동하는지 여부에 관계없이 애플리케이션 실행의 중요하고 성공적인 중요 시점입니다. | 일반적으로 시스템 상태 모니터링 및 진단, 성능 측정 또는 프로파일링에 유용한 메시지가 생성됩니다. 용량 계획 및 성능 관리에 이러한 정보를 사용할 수 있습니다. - 채널이 만들어집니다. - 엔드포인트 수신기가 만들어집니다. - 메시지가 전송 경로로 들어가거나 나옵니다. - 보안 토큰이 검색됩니다. - 구성 설정을 읽습니다. |
관리자 애플리케이션 개발자 제품 개발자. |
장황한 | "긍정적" 이벤트: 성공적인 중요 시점을 표시하는 이벤트입니다. | 사용자 코드와 서비스 둘 다에 대한 하위 수준 이벤트가 내보내집니다. | 일반적으로 디버깅 또는 애플리케이션 최적화에 이 수준을 사용할 수 있습니다. - 인식된 메시지 헤더입니다. |
관리자 애플리케이션 개발자 제품 개발자. |
활동 추적 | 처리 작업과 구성 요소 간의 흐름 이벤트입니다. | 이 수준을 사용하면 관리자와 개발자가 동일한 애플리케이션 도메인에서 애플리케이션의 상관 관계를 지정할 수 있습니다. - 시작/중지와 같은 활동 경계에 대한 추적입니다. - 전송에 대한 추적입니다. |
모두 | |
모두 | 애플리케이션이 제대로 작동할 수 있습니다. 모든 이벤트가 내보내집니다. | 모든 이전 이벤트 | 모두 |
Verbose에서 Critical까지의 수준은 서로 겹쳐져 있습니다. 즉, 각 로그 수준에는 Off 수준을 제외한 위의 모든 수준이 포함됩니다. 예를 들어 경고 수준에서 듣고 있는 청취자는 중요, 오류 및 경고 추적을 받습니다. 모든 수준에는 상세한 정보부터 심각한 수준까지의 이벤트 및 활동 추적 이벤트가 포함됩니다.
주의
정보, 자세한 정보 표시 및 ActivityTracing 수준은 많은 추적을 생성하므로 컴퓨터에서 사용 가능한 모든 리소스를 사용한 경우 메시지 처리량에 부정적인 영향을 미칠 수 있습니다.
상관 관계에 대한 활동 추적 및 전파 구성
특성에 지정된 activityTracing
값은 switchValue
활동 추적을 사용하도록 설정하는 데 사용되며, 이 추적은 엔드포인트 내에서 활동 경계 및 전송에 대한 추적을 내보낸다.
비고
WCF에서 특정 확장성 기능을 사용할 때 활동 추적을 사용하도록 설정하면 NullReferenceException이 발생할 수 있습니다. 이 문제를 해결하려면 애플리케이션의 구성 파일을 확인하고 추적 원본의 switchValue
특성이 activityTracing
로 설정되지 않았는지 확인하십시오.
이 특성은 propagateActivity
작업이 메시지 교환에 참여하는 다른 엔드포인트로 전파되어야 하는지 여부를 나타냅니다. 이 값을 true
설정하여 두 엔드포인트에서 생성된 추적 파일을 가져와 한 엔드포인트의 추적 집합이 다른 엔드포인트의 추적 집합으로 이동하는 방식을 관찰할 수 있습니다.
활동 추적 및 전파에 대한 자세한 내용은 전파를 참조 하세요.
propagateActivity
및 ActivityTracing
두 부울 값은 System.ServiceModel TraceSource에 적용됩니다.
ActivityTracing
값은 WCF 또는 사용자 정의 추적 원본을 포함한 모든 추적 원본에도 적용됩니다.
사용자 정의 추적 원본에는 propagateActivity
특성을 사용할 수 없습니다. 사용자 코드 활동 ID 전파의 경우, ServiceModel ActivityTracing
을 설정하지 않으면서 ServiceModel propagateActivity
특성이 true
로 설정되어 있는지 확인하세요.