我想将log4net记录的所有内容重定向到System.Diagnostics Trace类。我对我应该做的事情的理解是将log4net指向system.diagnostics.traceappender,然后配置system.diagnostics。这是我的web.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>
<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,它将登录到我的源。
答案 0 :(得分: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>
答案 1 :(得分: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>