2012-01-23 5 views
1

私の問題は、開発とテスト環境ではコードがうまく動作することですが、実稼働環境にリリースされるとうまく動作しません。
リリース後、INFOレベルで約9つの異なるログエントリである最初のユーザー要求がログに記録されます。最初の9の後には、サーバが再起動されるまで何も記録されません。私は今、この裸のコードを生産中に持っていますが、それでも同じ挙動を示しています。
これを引き起こしている可能性のあることの提案はありますか?log4netは、新しいリリース後の最初のユーザーのログを記録しないようにする

構成:

<log4net> 
<root> 
    <level value="INFO" /> 
    <appender-ref ref="AdoNetAppender" /> 
    <appender-ref ref="EventLogAppender" /> 
</root> 
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1" /> 
    <reconnectonerror value="true" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="Data Source=SQLHOTELL-FT,10433;Initial Catalog=BEKS;Integrated Security=True" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[UserId]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @userid)" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 
    <parameter> 
    <parameterName value="@log_date"/> <dbType value="DateTime"/> <layout type="log4net.Layout.RawTimeStampLayout"/> 
    </parameter>  
    <parameter>  
    <parameterName value="@thread"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread"/> 
    </layout> 
    </parameter>  
    <parameter>  
    <parameterName value="@log_level"/> <dbType value="String"/> <size value="50"/> <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level"/> 
    </layout> 
    </parameter>  
    <parameter>   
    <parameterName value="@logger"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger"/> 
    </layout> 
</parameter>  
<parameter>  
    <parameterName value="@message"/> <dbType value="String"/> <size value="4000"/> <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message"/> 
    </layout> 
    </parameter>  
    <parameter>   
    <parameterName value="@exception"/> <dbType value="String"/> <size value="2000"/> <layout type="log4net.Layout.ExceptionLayout"/> 
    </parameter> 
    <parameter> 
</appender> 
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
    <applicationName value="BeksWebInterface" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="FATAL" /> 
    <levelMax value="FATAL" /> 
    </filter> 
</appender>  
</log4net> 

はコード:

public static class Log 
{ 
    private static ILog log; 

    public static void CreateLogEntry(string message) 
    { 
     try 
     { 
      log = LogManager.GetLogger(typeof(Log)); 

      log4net.Config.XmlConfigurator.Configure(); 

      log.Info(message); 

     } 
     catch 
     { 
     } 
    } 
} 

答えて

1

なぜあなたは最初のロガーを取得し、その後のlog4netを設定しますか。通常、それは逆です。例えば。

// Configure log4net 
var info = new FileInfo("myapp.log4net"); 
log4net.Config.XmlConfigurator.Configure(info); 

// get the logger 
var logger = LogManager.GetLogger(this.GetType()); 
+0

私が見た例がそのようにしている可能性が高いためです。開発とテストでうまくいったので、私はそれらを変更する特別な理由はありません。 – Boppster

関連する問題