2010-09-02 9 views
6

Chciałbym przekierować wszystko zarejestrowane przez log4net na klasy Trace System.Diagnostics. Moje rozumienie tego, co powinienem robić, wskazuje log4net na system.diagnostics.traceappender, a następnie konfiguruję system.diagnostics. Oto ważne elementy w moim web.config:Logappnet traceappender nie rejestruje niczego

<log4net> 
<appender name="trace" type="log4net.Appender.TraceAppender, log4net"> 
    <immediateFlush value="true" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <param name="ConversionPattern" 
     value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" /> 
    </layout> 
</appender> 

<root> 
    <priority value="DEBUG"/> 
    <appender-ref ref="trace"/> 
</root>  
</log4net> 


<system.diagnostics> 
<sources> 

    <source name="Console" switchName="DefaultSwitch"> 
    <listeners> 
     <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
     <filter type="" /> 
     </add> 
    </listeners> 
    </source> 

    <source name="Metabase" switchName="MetabaseSwitch"> 
    <listeners> 
     <add name="MetabaseListener" /> 
     <remove name="Default" /> 
    </listeners> 
    </source> 

    <source name="TextFile" switchName="TextFileSwitch"> 
    <listeners> 
     <add name="TextFileListener" /> 
     <remove name="Default" /> 
    </listeners> 
    </source> 

</sources> 
<sharedListeners> 
    <!--<add name="ConsoleListener" type="XXX.Manufacturing.Utilities.Diagnostics.ColorConsoleTraceListener,XXX.Manufacturing.Utilities" />--> 
    <add name ="TextFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextFile.log" /> 
    <add name="MetabaseListener" type="XXX.Manufacturing.Utilities.Diagnostics.MetabaseTraceListener,XXX.Metabase.Proxies" /> 
</sharedListeners> 
<switches> 
    <add name="MetabaseSwitch" value="Information" /> 
    <add name="DefaultSwitch" value="Verbose" /> 
    <add name="TextFileSwitch" value="Verbose"/> 
</switches> 
</system.diagnostics> 

Czy brakowało mi kluczowego kroku łączącego rzeczy? Jeśli pominę log4net i po prostu utworzę nowy zasób śladów, zaloguje się on do moich źródeł.

Odpowiedz

3

dodałem wywołanie XmlConfigurator.Configure() i włączone wewnętrzne rejestrowanie. To, co zobaczyłem, to log4net, który się logował, ale nic nie docierało do systemu śledzenia. Po graniu z aplikacją app.config przez chwilę znalazłem konfigurację, która działała, najbardziej znaczące zmiany zdawały się zrzucać źródła w mojej konfiguracji Systems.Diagnostics i upewnić się, że ustawiony został atrybut poziomu log4net. Pracujące sekcje config:

<log4net> 
<appender name="trace" type="log4net.Appender.TraceAppender, log4net"> 
    <immediateFlush value="true" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <param name="ConversionPattern" 
     value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" /> 
    </layout> 
</appender> 

<root> 
    <level value="ALL"/> 
    <appender-ref ref="trace"/> 
</root>  
</log4net> 

<system.diagnostics> 
<trace autoflush="true" > 
    <listeners> 
    <add name="TextFileListener" /> 
    <add name="MetabaseListener" /> 
    </listeners> 
</trace> 
<sharedListeners> 
    <add name ="TextFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextFile.log" /> 
    <add name="MetabaseListener" type="XXXX.Manufacturing.Utilities.Diagnostics.MetabaseTraceListener, XXXX.Metabase.Proxies" /> 
</sharedListeners> 

3

Czy zadzwoniłeś na metodę XmlConfigurator.Configure();?

Jeśli to nie jest problem, możesz włączyć wewnętrzne debugowanie (wyjaśniono here) lub skonfigurować wtyczkę konsoli i sprawdzić, czy to działa.

Edycja: nie jestem zaznajomiony z systemem śledzenia, ale jeśli skonfigurować detektor śladowych należy uzyskać wyjście log4net:

<system.diagnostics> 
    <trace autoflush="true"> 
    <listeners> 
     <add 
     name="textWriterTraceListener" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="C:\temp\log4net.txt" /> 
    </listeners> 
    </trace> 
</system.diagnostics> 
+0

dodał wezwanie do XmlConfigurator.Configure, nadal nie zalogowaniu. Spróbuję włączyć wewnętrzne debugowanie. –