私は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を*私は恥Everyone
にFull control
を試してみましアップckedた...
@stuartdパラメータは既に存在します。 – gobes
申し訳ありません..... – stuartd