2016-03-24 11 views
0

以下の設定ログはEventlogに記録され、SmtpSenderで使用できます。しかし、ファイルロガーはログを記録せず、パスにログファイルを作成しますが、デバッグログは作成しません。Log4net複数ロガー - ファイルロガーが機能しない

<root> 
    <level value="DEBUG" />  
    <appender-ref ref="EventLogAppender" /> 
</root> 
<logger additivity="false" name="SmtpLogger"> 
    <level value="FATAL"/> 
    <appender-ref ref="SmtpAppender" /> 
</logger> 
<logger name="RollingFileAppender"> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender"/> 
</logger>  

しかし、私はそれをファイルに記録しますRollingFileAppenderするルートロガーを変更、

<root> 
    <level value="DEBUG" />  
    <appender-ref ref="RollingFileAppender" /> 
</root> 
<logger additivity="false" name="SmtpLogger"> 
    <level value="FATAL"/> 
    <appender-ref ref="SmtpAppender" /> 
</logger> 
<logger name="RollingFileAppender"> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender"/> 
</logger>  

これがなぜ起こるか任意のアイデア?このシナリオでファイルロガーを動作させるにはどうしたらいいですか?

答えて

0

私は、ログの仕事を得ることができ、実際に私は実験としてこれを行なったし、それが働きました。

ルート要素に追加RollingFileAppender、

<root> 
    <level value="DEBUG" />  
    <appender-ref ref="EventLogAppender" />  
    <appender-ref ref="RollingFileAppender"/> 
</root> 
<logger additivity="false" name="SmtpLogger"> 
<level value="FATAL"/> 
<appender-ref ref="SmtpAppender" /> 
</logger> 
<logger name="RollingFileAppender"> 
<level value="DEBUG"/> 
<appender-ref ref="RollingFileAppender"/> 
</logger> 
0

あなたはアペンダのコンフィグレーションを投稿していませんが、何がうまくいかないのかを簡単に判断する方法は内部デバッグを有効にすることです。これは、ローリングファイルアペンダでうまくいかない何を教えてくれます:

log4netの内部デバッグを有効にするには2種類の方法があります。 これらは以下のとおりです。推奨される方法は、アプリケーションの設定ファイルに log4net.Internal.Debugオプションを指定することです。 (log4netの設定データは、アプリケーションのconfig ファイルに埋め込まれていない限りないlog4netの設定ファイル、 )内部デバッグ•

も アプリケーションの構成ファイルに値を設定することで有効にすることができます。 log4net.Internal.Debugアプリケーション設定を の値に設定する必要があります。たとえば:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

この設定はすぐに読み込まれ、起動時にすべての内部 デバッグメッセージが放出されることになります。

•log4netの内部デバッグをプログラムで有効にするには、 log4net.Util.LogLog.InternalDebuggingプロパティをtrueに設定する必要があります。明らかに これがより早く設定されるほど、より多くのデバッグが生成されます。

内部デバッグメッセージは、コンソールおよび System.Diagnostics.Traceシステムに書き込まれます。アプリケーションに コンソールがない場合、そこに記録されたメッセージは失われます。 アプリケーションは、 System.Console.Outを設定することによりコンソールストリームをリダイレクトできます。 Traceシステムは、デフォルトでメッセージ を添付されたデバッガに送信します(メッセージは出力 ウィンドウに表示されます)。プロセスにデバッガが接続されていない場合、 メッセージがシステムデバッガに送信されます。 DebugView のようなユーティリティをhttp://www.sysinternals.comから使用して、これらのメッセージをキャプチャすることができます。

log4netの内部デバッグメッセージは、 System.Diagnostics.Traceシステムに書き込まれるため、これらのメッセージをローカルファイルにリダイレクトすることができます。トレースリスナを定義するには、 を次のようにアプリケーションに追加します。設定ファイル:

<configuration> 
    ... 

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

    ... 
</configuration> 

Make sure that the process running your application has permission to write to this file. 

log4net faq

+0

おかげでピーターは、私はすでにこれをしませんでした。例外はなく、RollingfileAppenderを正しく構成します。 RollingFileAppenderがルートアペンダーとして作成されていると、正常に動作します。 – Dhanuka777

関連する問題