7

log4netによってログに記録されたすべてのものをSystem.DiagnosticsTraceクラスにリダイレクトしたいと思います。私が何をすべきかを理解しているのは、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をバイパスして、新しいtracesourceを作成するだけで、ソースにログが記録されます。

4

2 に答える 2

4

メソッドを呼び出しました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>
于 2010-09-03T11:49:18.240 に答える
4

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>
于 2010-09-08T17:51:27.023 に答える