2016-12-14 27 views
2

私はRedisバックプレーンとlog4netを使って動作する2つのSignalRサーバを持っています。アプリケーションを起動すると、すべて正常です。ログファイルは両方のサーバーに正しく書き込まれます。しかし、時には、ログファイルはもう書かれていませんし、内部デバッグログは言う:Log4netがランダムに停止してSignalRにログオンするのはなぜですか?

log4net: Opening file for writing [C:\myLogPath\] append [True]

...毎回新しいラインは秒(100回以上ログインする必要があります - それは、予想されるログですレート)を表示することができます。この問題は、両方のサーバーで同じ時刻に発生します。ログに記録された最後の行はまったく同じです。そのため、私はSignalRサーバがバックプレーンを使用していると書いています。ここに私のlog4net.configは次のとおりです。

<log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
     <param name="File" value="C:\myLogPath\SignalR\log.txt" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <maxSizeRollBackups value="-1" /> 
     <maximumFileSize value="100MB" /> 
     <datePattern value="ddMMyyyy" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date - %-5level - %message%newline" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="ALL" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
</log4net> 

maxSizeRollBackupsが遠く、16メガバイト〜-1に設定する(無限に相当)とlog.txtファイルの重みれるように私は、ファイルがロールアップされていないと確信していますmaximumFileSizeから私はMinimalLockの有無を問わず試してみました。ここで


私はlog4netのを開始Startupクラス、次のとおりです。Logger.Infoメソッドが呼ばれている

public static class Logger 
    { 
     private static log4net.ILog Log { get; set; } 

     static Logger() 
     { 
      Log = log4net.LogManager.GetLogger(typeof(Logger)); 
     } 

     public static void Start(string path) 
     { 
      log4net.Config.XmlConfigurator.Configure(new FileInfo(path)); 
     } 

     public static void Error(object msg) 
     { 
      Log.Error(msg); 
     } 

     public static void Info(object msg) 
     { 
      Log.Info(msg); 
     } 
    } 

public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      Common.Logger.Start(ConfigurationManager.AppSettings["pathLog4net"]); 
      Common.Logger.Info("Démarrage SignalR"); 

      //Connect to backplane, make some DI, singletons initialisations... 

      Common.Logger.Info("Mapping"); 
      app.Map("/signalr", map => 
      { 
       map.UseCors(CorsOptions.AllowAll); 
       var hubConfiguration = new HubConfiguration 
       { 
        EnableJSONP = true, 
        EnableDetailedErrors = HttpContext.Current.IsDebuggingEnabled 
       }; 
       map.RunSignalR(hubConfiguration); 
      }); 
     } 
    } 

...とlog4netのをカプセル化Common.Loggerクラス、どのハブ・メソッドでも、同時実行性の問題になるかどうかは疑問でしたが、log4netのドキュメントにはトレッドが安全だと書かれています。この問題は、正確に2番目のSignalRで発生します。私がアプリを再起動するたびに、ログは未定義のアマウントの間に働いていて、再び停止します。

私はlog4net設定を変更しようとしましたが、内部ログを無効にしましたが、何も動作しません。もう何をすべきかわからない...なぜログが止まっているの?なぜ内部ログがOpening file [...] append [True]と言っても、log4netがファイルに追加できないのですか?誰もがいくつかのアイデアを持っている場合、私は永遠に感謝するでしょう:)


EDIT:権限が正しく設定されて明らかに - 私はfを*私は恥EveryoneFull controlを試してみましアップckedた...

+0

@stuartdパラメータは既に存在します。 – gobes

+0

申し訳ありません..... – stuartd

答えて

1

SOOOOO ...実際それは単純な問題でした。私のウェブサイトはビジネス層で働いていて、同じ設定ファイルを使って独自のlog4netインスタンスを持っていたので、単純にロックエラーでした。

ビジネス層のlog4netを使用するようにシグナルロギングカプセル化を変更しましたが、今はすべて問題ありません。

お役立ち情報:ロックエラーが発生した場合、log4netは最初に上記のファイルを書き込もうとしたときにのみログに記録するようです。

関連する問題