* 1. TraceSource를 사용하고자하는 각 클래스에서 정의하십시오. TraceSource를 정적으로 만들면 정의한 클래스의 모든 인스턴스간에 공유 할 수 있습니다. 동일한 "TraceSource"가 필요한 모든 클래스 (유형)간에 인스턴스를 공유 할 필요가 없습니다. 새로운 TraceSource (TraceSource ts = new TraceSource ("somename"); 인스턴스)를 해제 할 때마다 새 TraceSource 객체를 얻지 만 동일한 구성 정보를 참조합니다. 따라서 여러 클래스 각각에 새 TraceSource를 만들고 간단히 말해 TraceSource의 인스턴스를 클래스간에 공유하려고하지 않아도됩니다. 또한 TraceSource 인스턴스를 만들지 않아도됩니다. 정적 싱글과 더미 클래스입니다. 아래에있는 내 예. 나는 또한 TraceSources와 함께 작동하는 방법에 대해 설명합니다 여기에서 SO에 대한 몇 가지 더 많은 링크를 포함 시켰 참조하십시오. 여러 TraceSources을 사용하는 것입니다에
//
// In this example, tracing in classes A and B is controlled by the "TraceTest" TraceSource
// in the app.config file. Tracing in class C is controlled by the "TraceTestTwo"
// TraceSource in the app.config.
//
// In addition to using different TraceSource names, you can also use SourceSwitches
// (in the app.config). See some examples of app.config in the
// "turning-tracing-off-via-app-config" link below.
//
public class A
{
private static readonly TraceSource ts = new TraceSource("TraceTest");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
public class B
{
//
//Use the same config info for TraceTest in this class
//It's ok to use a different instance of TraceSource, but with the same name,
//in this class, the new instance will be configured based on the params in the
//app.config file.
//
private static readonly TraceSource ts = new TraceSource("TraceTest");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
public class C
{
//
//Use a different TraceSource in this class.
//
private static readonly TraceSource ts = new TraceSource("TraceTestTwo");
public void DoSomething()
{
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
}
}
* 2. 한 가지 장점 추적 기능을보다 세부적으로 제어 할 수 있습니다. "추적 기능 t "를 한 수준에서 (또는 전혀) 사용하지 않고"TraceTestTwo "를 통해 다른 수준에서 (또는 다시는 전혀) 사용하지 않습니다. 각 TraceSource를 자체 TraceListener로 보내거나 모두 동일한 TraceListener로 보내거나 혼합하여 일치시킬 수 있습니다. 개별 TraceSources의 구성을 조정하는 기능을 Trace 클래스의 정적 메서드 만 사용하는 제한과 비교하십시오. "추적 정보"(TraceListener (s)) 정보의 위치 또는 "추적"정보의 레벨을 구성 할 수 있지만 TraceSources를 사용할 때처럼 클래스 당 또는 기능 영역마다 레벨을 제어 할 수는 없습니다. 마지막으로, 여러 TraceSources에 대한 또 다른 이점은 출력에서 얻을 수있는 "자유로운"컨텍스트 정보입니다. 기본적으로 (또는 선택적으로 기억이 나지 않습니다.) TraceListener는 메시지를 기록한 TraceSource의 이름을 기록합니다. 따라서 출력에서 해당 라인을보고 호출 사이트에 컨텍스트 정보를 기록 할 필요없이 클래스 또는 기능 영역에 대한 아이디어를 얻을 수 있습니다. 위의 코드 예제에서 클래스 A와 B의 출력 추적에는 "TraceTest"태그가 지정되고 클래스 B의 추적 출력에는 "TraceTestTwo"태그가 지정됩니다.
아래의 링크 폭격을 용서해주십시오.하지만 TraceSource 및 System.Diagnostics에 대한 정보는 게시 해 두었습니다. 당신이 TraceSource를 사용하려는 경우
는 SO log4net/NLog처럼 출력 포맷에 대한 게시이 언급 라이브러리를 사용하는 것이 좋습니다 :
Does the .Net TraceSource/TraceListener framework have something similar to log4net's Formatters?
는 TraceSource 사용에 대한 자세한 정보를 원하시면 this post에 내 대답을 참조하십시오 "TraceSource 경험"을 향상시킬 수있는 방법에 대한 아이디어를 얻을 수 있습니다.TraceSource에
상세 정보 : TraceSource에 Add Trace methods to System.Diagnostics.TraceListener
상세 정보 : TraceSource에 System.Diagnostics.Debug namespace vs Other logging solutions (log4net, MS Enterprise Library, etc.)
추가 정보 :이 여러 스레드를 취한다 때 여러 tracesources를 사용 Turning tracing off via app.config
이 좋지 않다. TraceSource 메서드는 잠금 메커니즘을 사용하는 스레드로부터 안전합니다. 스레드간에 하나의 TraceSource 인스턴스를 공유하면 스레드 안전 동작을 보장 할 수 있습니다. 여러 TraceSource 인스턴스를 사용하면 다른 동작이 생성됩니다. 여전히 스레드 안전하지만 thread-safety는 listner-level에 있습니다. 즉, 두 개의 스레드가 동시에 동일한 파일을 추적하는 경우 원본 파일이 잠겨 GUID 접두사가 붙은 파일 복사본이 생성됩니다. –
프로덕션 코드에서 TraceSource를 많이 사용하지는 않았으며 멀티 스레드 코드에서는 훨씬 적습니다. 다음은 작성자가 UseGlobalLock 플래그를 사용하여 설명하는 블로그 게시 링크입니다. 이미 본 적이 있거나 특히 도움이 될 수도 있지만 그렇지 않을 수도 있습니다. 그의 블로그에는 System.Diagnostics를 사용하여 추적을 사용하는 몇 가지 다른 기사가 있습니다. http://www.neovolve.com/post/2009/01/08/Disable-Trace-UseGlobalLock-For-Better-Tracing-Performance.aspx – wageoghe
@wageoghe, 링크가 끊어졌습니다. – Spirit