Traceappender Log4net ничего не регистрирует - PullRequest
7 голосов
/ 02 сентября 2010

Я бы хотел перенаправить все, что зарегистрировано log4net, в классы трассировки System.Diagnostics.Мое понимание того, что я должен делать, - это указать 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 и просто создаю новый источник трассировки, он войдет в мои источники.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Я добавил вызов XmlConfigurator.Configure () и включил внутреннюю регистрацию. Я увидел, что log4net регистрирует, но ничего не дошло до системы трассировки. Поработав некоторое время с моим app.config, я обнаружил, что конфигурация работает, и наиболее заметными изменениями, по-видимому, являются отказ от источников в моей конфигурации System.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 голосов
/ 03 сентября 2010

Вы вызывали метод XmlConfigurator.Configure();?

Если проблема не в этом, вы можете либо включить внутреннюю отладку (объяснено здесь ), либо, возможно, настроить консольный приложение и посмотретьесли это работает.

Редактировать: Я не очень знаком с системой трассировки, но если вы настроите прослушиватель трассировки следующим образом, вы должны получить вывод log4net:

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