【问题标题】:Log4net traceappender not logging anythingLog4net traceappender 没有记录任何内容
【发布时间】:2011-04-07 12:13:33
【问题描述】:

我想将 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 并创建一个新的跟踪源,它将记录到我的源。

【问题讨论】:

    标签: log4net system.diagnostics


    【解决方案1】:

    你调用XmlConfigurator.Configure();方法了吗?

    如果这不是问题,那么您可以打开内部调试(解释为 here),或者配置一个控制台附加程序,看看它是否有效。

    编辑:我对跟踪系统不是很熟悉,但是如果您按如下方式配置跟踪侦听器,您应该会得到 log4net 输出:

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

    【讨论】:

    • 添加了对 XmlConfigurator.Configure 的调用,但仍然没有记录。我将尝试启用内部调试。
    【解决方案2】:

    我添加了对 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>
    </system.diagnostics>
    

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 2020-11-17
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多