2016-09-28 5 views
0

私は、「ログ」と「ログ確認」という異なるテーブルに挿入するように設定されている設定ファイルに2つのアペンダーを持っていますが、どちらも両方のテーブルにロガーが挿入されています。log4net異なるアペンダーが異なるテーブルを挿入する

<log4net debug="true"> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="1" /> 
     <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIp],[Username],[Controller],[Action],[Parameters]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @clientip, @username, @controller, @action, @parameters)" /> 
     ... 
    </appender> 
    <appender name="AdoNetAppenderForFirms" type="log4net.Appender.AdoNetAppender" additivity="false"> 
     <bufferSize value="1" /> 
     <commandText value="INSERT INTO LogFirms ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIp],[Username],[Controller],[Action],[Parameters]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @clientip, @username, @controller, @action, @parameters)" /> 
     ... 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="AdoNetAppender" /> 
     <appender-ref ref="AdoNetAppenderForFirms" /> 
    </root> 
    </log4net> 

ここにはロガークラスがあります。

public static class Logger 
    { 
     private static ILog log { get; set; } 
     private static ILog logFirms { get; set; } 
     static Logger() 
     { 
      log = LogManager.GetLogger("AdoNetAppender"); 
      logFirms = LogManager.GetLogger("AdoNetAppenderForFirms"); 
     } 
public static void Error(string controller, string action, string parameters, object msg, Exception ex) 
     { 
      if (controller == "AccountController" && logFirms.IsErrorEnabled) 
      { 
       logFirms.Error(msg, ex); 
      } 
      else if (log.IsErrorEnabled) 
      { 
       log.Error(msg, ex); 
      } 
     } 

問題は構成である必要がありますので、コントローラで見られるエラーが、ありません...私は検索し

加法=「false」を

プロパティを追加してみました「AdoNetAppenderForFirms」要素に追加しましたが、それは何も変更されませんでした。あなたはこれを解決するためのアドバイスをお持ちですか?

+0

コンフィグがOKに見えます。子ロガーの場合と同じように 'additivity'は必要ありませんが、あなたはrootだけを定義しています。ロガークラスにブレークポイントを設定し、各ロガーに接続されているベンダーを調べて、OKの場合はlog4netの内部デバッグを有効にして、手がかりを調べることができます。 – stuartd

答えて

2

あなたが代わりにアペンダのルートレベルで、あなたの設定にロガーを追加することによってこれを行うことができます。

<root> 
    <level value="ALL" /> 
</root> 

<logger name="AdoNetAppender" additivity="false"> 
    <level value="ALL" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 
<logger name="AdoNetAppenderForFirms" additivity="false"> 
    <level value="ALL" /> 
    <appender-ref ref="AdoNetAppenderForFirms" /> 
</logger> 
+0

thats私がやったことはうまくやってくれてありがとう! – TyForHelpDude

関連する問題