2010-09-02 186 views
6

我想将log4net记录的所有内容重定向到System.Diagnostics跟踪类。我理解我应该做的是在system.diagnostics.traceappender上指向log4net,然后配置system.diagnostics。这里是我的web.config中的重要部分:Log4net traceappender没有记录任何东西

<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> 

我错过了连接事情的关键步骤?如果我绕过log4net,只是创建一个新的traceource,它会登录到我的资源。

回答

3

我添加了调用XmlConfigurator.Configure()和打开内部日志记录。我看到的是log4net正在进行日志记录,但没有任何内容到达跟踪系统。在玩了我的app.config一段时间后,我发现一个工作的配置,最显着的变化似乎是在我的Systems.Diagnostics配置中放弃源,并确保设置了log4net级别属性。工作配置部分:

<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

你打电话给XmlConfigurator.Configure();方法吗?

如果这不是问题,那么你可以打开内部调试(解释为here),或者可能配置控制台appender,看看它是否工作。

编辑:我不是那个熟悉的跟踪系统,但如果配置跟踪侦听如下,你应该得到log4net的输出:

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

加入XmlConfigurator.Configure一个电话,依然没有记录。我会尝试启用内部调试。 – 2010-09-07 12:22:52