2014-12-17 2 views
3

이 항목에 대한 두 가지 답변을 보았지만 이해할 수 없습니다. 사용자 지정 TextWriterTraceListener가 있고 내 tracesource에서 사용하려고합니다.web.config에 사용자 지정 TextWriterTraceListener 구성

namespace MyTraceLogger 
{ 
public class MyTextTraceListener : TextWriterTraceListener 
    { 

     public override void Write(string message) 
     { 
      this.Write(string.Format("{0},{1}", 
          DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 
          message)); 
     } 

     public override void WriteLine(string message) 
     { 
      this.WriteLine(string.Format("{0},{1}", 
          DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 
          message)); 
     } 
    } 

}

<system.diagnostics> 
<sources> 
    <source name="SpendingTrace" switchName="SpendingSourceSwitch" switchType="System.Diagnostics.SourceSwitch" > 
    <listeners> 
     <add name="Spending" type="MyTraceLogger.MyTraceLogger.MyTextTraceListener,MyTraceLogger.MyTraceLogger" initializeData="Spending.log" /> 
     <remove name ="Default" /> 

    </listeners> 
    </source> 

</sources> 
<switches> 
    <!-- You can set the level at which tracing is to occur --> 
    <add name="SpendingSourceSwitch" value="Warning" /> 
    <!-- You can turn tracing off --> 
    <!--add name="SourceSwitch" value="Off" --> 

</switches> 
<trace autoflush="true" indentsize="4"></trace> 

이 내가 오류입니다 : 클래스 MyTraceLogger.MyTraceLogger.MyTextTraceListener, MyTraceLogger.MyTraceLogger에 대한 유형을 찾을 수 없습니다.

MyTraceLogger의 프로젝트 속성을 마우스 오른쪽 단추로 클릭하면 어셈블리가 MyTraceLogger이고 내 네임 스페이스는 MyTraceLogger입니다.

+0

혼란 MyTraceLogger.MyTraceLogger 그것이 MyTraceLogger 클래스에서 중첩, 내가 한 이유를 찾을 수 . 나는 그것을 꺼내서 설정을 MyTraceLogger.MyTextTraceListener, MyTraceLogger, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null로 설정했다. 이제 오류가 발생한다. MyTraceLogger.MyTextTraceListener, MyTraceLogger, Version = 1.0.0.0, Culture = 중립, PublicKeyToken = null 다른 게시물은 생성자를 오버로드했다. 어떤 것을 오버로드해야할지 모르겠다. 그래서 이것을 시도해 보라 : public MyTextTraceListener() : base() {} 그리고 여전히 생성 할 수 없다. –

+0

public MyTextTraceListener (문자열 이름) : base (name) {}을 디버깅했는데 전달 된 문자열이 내 로그 이름 인 것을 볼 수 있지만이 생성자가 2 ~ 3 번 호출 된 것 같은데 stackoverflow 오류가 발생합니다. –

+0

나는이 기사를 비틀 거린다. http://nicholas.piasecki.name/blog/2009/03/on-textwritertracelistener-inheritance-initializedata-aspnet-and-paths/ –

답변

2

왜 구성 파일을 사용하고 코드 내에서 로컬로 인스턴스화하지 않을까요? 이와 같은 방법으로 향후 설정 및 유지 관리에서 설정 파일이 혼동되거나 이동되거나 잘못 사용되는 것을 방지 할 수 있습니다.

당신의 MyTextTraceListener의 인스턴스를 생성하고 청취자를 추적 추가 :

MyTextTraceListener myTraceListener = new MyTextTraceListener ("application.log"); 
    Trace.Listeners.Add(myTraceListener); 

도이 게시물을 참조하십시오 : How to define custom TraceListener in app.config

+0

특정 유형 또는 로깅을 특정 시간 (예 : 오류 또는 경고 또는 정보 로깅)에서 제어하려고합니다. –

+0

내 대답을 자세히 들여다 보면 설정이 단순하고 제어 가능한 방식을 제외하고 정확하게 수행됩니다. 선언 인스턴스 메서드를 사용하여 동일한 동작을 얻습니다. – sonne

+0

그런 식으로 시도하지는 않았지만 로그 이름을 변경하려면 어떻게해야합니까? 아마도 appsetting 키를 사용할 수 있습니다.나는 아직도 가능하다면 설정 방법을 사용하고 싶다. –

0

왜 네임 스페이스를 두 번 배치합니까? 그냥 필요한 것 같아요 :

<add name="Spending" type="MyTraceLogger.MyTextTraceListener,MyTraceLogger" initializeData="Spending.log" /> 
+0

어셈블리 이름과 네임 스페이스 이름이 필요하다고 생각했습니다. 어쨌든 나는 이미 제안한 것과 똑같은 오류를 시도해 본다. –

+0

typeof (MyTraceLogger) .AssemblyQualifiedName –

+0

과 함께 사용할 올바른 문자열을 얻을 수 있습니다. MyTraceLogger.MyTraceLogger, MyTraceLogger, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 그런 다음 웹에서 변경합니다. .config : MyTraceLogger.MyTraceLogger.TextWriterTraceListener, MyTraceLogger, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 같은 오류 –

관련 문제