2009-07-23 5 views
14

TextWriterTraceListener을 사용하여 진단 메시지를 텍스트 파일에 기록합니다. 그러나 나는 또한 추가 된 모든 추적 메시지의 타임 스탬프를 기록하지 않을 것입니다. 자동적으로 타임 스탬프를 추가하는 리스너를위한 일종의 포맷터를 정의 할 수 있습니까?추적 출력 형식 지정

현재 모든 Trace.WriteLine() 전화에 수동으로 타임 스탬프를 추가하고 있지만 이는별로 편안하지 않습니다.

답변

15

대신 사용자 지정 가능성이 훨씬 높은 Log4Net을 사용하는 것이 좋습니다.

또는 자신의 TraceListener 구현을 작성하여 타임 스탬프를 사용할 수 있습니다. 당신 도 단지 TextWriterTraceListener에서 파생 수있을 WriteWriteLine 오버라이드 (override) :

public override void Write(string x) 
{ 
    // Use whatever format you want here... 
    base.Write(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); 
} 

public override void WriteLine(string x) 
{ 
    // Use whatever format you want here... 
    base.WriteLine(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); 
} 
1

당신은베이스에 장식 된 문자열의를 WriteLine 메소드를 오버라이드 (override) 라인을 장식하고 전달 자신의 경우 TextWriterTraceListener 서브 클래스를 쓸 수 클래스 구현은 실제 출력을 수행합니다.

-1

질문에 대한 답변이 아니지만 단지 log4Net을 사용하셨습니까?

다른 유용한 기능과 함께 시간 등을 추가하도록 구성 할 수 있습니다.

1

또는 단지는 traceOutputOption으로 "날짜 시간"을 추가 사용하는 것이 좋습니다.

+4

' TextWriterTraceListener'가 내 케이스에서 쓸모 없게 만듭니다. – RaYell

0

비록 이것이 낡았지만 대답이 받아 들여졌지만, 나는 하나 더 옵션을 던질 것입니다. codeplex의 Ukadc.Diagnostics 애드온을 사용할 수 있습니다. 무엇보다도 log4net 및 NLog로 정의 할 수있는 형식과 유사한 사용자 지정 서식을 정의 할 수 있습니다. 이는 구성 전용 종속성입니다. 즉, app.config 파일을 통해 Ukadc.Diagnostics의 사용을 구성합니다. 소스 의존성은 없습니다 (특수 API를 통하지 않고 System.Diagnostics를 통해 계속 로그합니다). TraceSources에 로그인 할 때 현재 정말에만 제대로 작동 Ukadc.Diagnostics에서 구현

  1. 서식 옵션 : 당신이 알아야 할 몇 가지 제한이 이루어야한다고들한다. Trace.Write 및 Trace.WriteLine을 사용하여 로깅 할 때 TraceEventCache 개체는 채워지지 않으며 대부분의 서식 지정 개체가 해당 정보를 가져옵니다.

  2. 출력에 사용자 지정 서식을 표시하려면 Ukadc.Diagnostics TraceListener (또는 Ukadc.Diagnostics 기본 TraceListener에서 파생 된 사용자 지정 수신기)를 사용해야합니다. 새로운 Super duper 롤링 파일 TraceListener를 발견했다면, Ukadc.Diagnostics 포맷과 함께 사용하기 위해 몇 가지 작업을해야 할 것입니다. 이는 Ukadc.Diagnostics 기반 TraceListener 측면에서 리스너를 다시 구현하는 것만 큼 어려울 수 있습니다. 또는 Super duper 롤링 TraceListener가 포함 된 새로운 Ukadc.Diagnostics 기반 TraceListener를 만들고 Ukadc.Diagnostics 당 메시지의 서식을 지정한 다음 포함 된 Listener의 Write/WriteLine 메서드에 위임하면 더 쉽습니다.

12

내가 최근에 비슷한 상황이 발생하고 지금 우리는 매우 적합한 작업, 즉 Essential Diagnostics위한 도구를 것 같습니다. 아래 코드와 같이 app.config에 리스너를 설정 한 다음 Essential.Diagnostics.dll을 같은 폴더에 놓습니다.아무런 조제도 필요하지 않습니다. 소스를 소유하지 않은 경우에도 추적을 위해 System.Diagnostics를 사용하는 모든 응용 프로그램에서이 옵션을 사용할 수 있습니다. 그게 놀랍지 않니?

이 파라미터의 Write`과``WriteLine` 방법에 의해 사용되지 http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.traceoutputoptions.aspx에 작성된
<sharedListeners> 
    <add name="rollingfile" 
    type="Essential.Diagnostics.RollingFileTraceListener, Essential.Diagnostics" 
    initializeData="{ApplicationName}-{DateTime:yyyy-MM-dd}.log" 
    convertWriteToEvent="true" 
    template="{DateTime:yyyy-MM-dd HH:mm:ss.fff} {Message}{Data}" 
    /> 
</sharedListeners> 
+0

설치하는 가장 쉬운 방법은 NuGet입니다. Install-Package Essential.Diagnostics.RollingFileTraceListener (참고 : Essential.Diagnostics의 관리자입니다.) –

+0

또한, out "convertWriteToEvent"설정은 Write 이벤트와 WriteLine 이벤트를 추적하므로 타임 스탬프도 가져옵니다. (Trace의 정적 메소드보다는 TraceSource를 사용하는 것이 더 좋을 수도 있지만) –

+0

Essential Diagnostics가 codeplex에서 github로 이동되었습니다. 업데이트 링크 : https://github.com/sgryphon/essential-diagnostics – dimaaan