문제

내 응용 프로그램이 machinename_username_yyyymmdd_hhmmss.txt와 같은 다른 추적 파일을 작성하려고합니다. 여기서 사용자 이름은 현재 로그인 한 사용자이며 시간은 응용 프로그램의 시작 시간입니다. .NET 리스너 TextWriterTraceListener는 구성 파일에 지정된 하드 코딩 된 파일 이름 만 지원하는 것 같습니다. 커스텀 트레이스 리스너를 쓰지 않고이 작업을 수행 할 수있는 방법이 있습니까?

맞춤 트레이스 리스너를 작성해야한다고 가정하면 다음과 같은 Tracelistener를 구현했습니다.

Imports System.Diagnostics

Public Class MyCustomTraceListener
    Inherits TextWriterTraceListener

    Public Sub New()
        'Need to do it this way as the Base constructor call has to be the first statement
        MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _
                                                       Environment.MachineName, _
                                                       Environment.UserName, _
                                                       DateTime.Now.ToString("yyyy"), _
                                                       DateTime.Now.ToString("MM"), _
                                                       DateTime.Now.ToString("dd"), _
                                                       DateTime.Now.ToString("HH"), _
                                                       DateTime.Now.ToString("mm"), _
                                                       DateTime.Now.ToString("ss")))
        Me.IndentSize = 4
    End Sub

End Class

구성 파일에서 다음과 같이 추적 소스를 구성했습니다.

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="MyTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="MyTraceListener"
            type="MyNameSpace.MyCustomTraceListener"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Warning" />
    </switches>
  </system.diagnostics>

나는 다음과 같은 흔적 소스를 만들고 있습니다.

Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource")
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message")

그러나 시작시 "Mynamespace.myCustomTracelistener"유형을 찾을 수없는 오류가 계속 표시됩니다.

누구든지 여기에 문제가 무엇인지 알 수 있습니까?

감사.

도움이 되었습니까?

해결책

유형 어셈블리에 알릴 필요가 없습니까?

<add name="MyTraceListener"
     type="MyNameSpace.MyCustomTraceListener, MyAssembly"
     traceOutputOptions="ProcessId, DateTime, Callstack" />

다른 팁

파생 클래스의 필요성을 완전히 피하는 또 다른 접근법 :

Config XML에서 기본 클래스 TextWriterTracEListener를 작성한 다음 시작시 청취자 컬렉션을 열거하여 (일반적으로 DefaultTracElistener 및 TextWriterTracelistener가 있음) 로깅 스트림을 새 스트림으로 설정할 수 있습니다.

코드로 tracelistener를 설정하는 것은 어떻습니까? 로그 경로와 같은 특정 매개 변수와 같은 특정 매개 변수를 app.config에 있으면 AppSettings 섹션에서 정의하고 리스너를 만들 때 읽으십시오.

' VB
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate)
Dim traceListener As New TextWriterTraceListener(traceLog)
Trace.Listeners.Add(traceListener)

// C#
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate);
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog);
Trace.Listeners.Add(traceListener);

구성의 모든 요소는 API에 해당하므로 필요한 모든 것을 수행 할 수 있습니다.

traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId;

작은 오래된 게시물이지만 누군가가 온 경우를 대비하여 - 날짜와 시간으로 롤링 플랫 파일 추적 리스너를 설정하는 방법에 대해 자세히 설명하는 링크가 있습니다. http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29.aspx

로깅 응용 프로그램 블록에 대한 학부모 기사가 있습니다 http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

추가해야 할 수도 있습니다 너겟 패키지 Visual Studio에서 호출되었습니다 엔터프라이즈 라이브러리 - 로깅 애플리케이션 블록

Enterprise Library의 로깅 애플리케이션 블록에 깊이 빠져들려면 다음과 같은 전체 PDF 책이 있습니다. http://www.microsoft.com/en-us/download/details.aspx?id=41145

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top