我有兩個使用redis底板和使用log4net的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
設置爲-1(相當於無窮大)和log.txt文件砝碼〜16MB,遠從maximumFileSize
。我嘗試過和沒有MinimalLock
,沒有任何影響。
這裏是Startup
類,在那裏我開始log4net的:
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);
});
}
}
...和Common.Logger
類,封裝log4net的:
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);
}
}
的Logger.Info
方法是在一個名爲每個集線器的方法,所以我想知道它是否可能是一個併發問題,但log4net文檔聲明它是安全的 - 雖然我不知道它在哪個級別;並且問題發生在第二個SignalR完全在同一時間。每次我重新啓動應用程序時,日誌都會在未定義的時間內運行,然後再次停止。
我試着改變log4net配置,禁用內部日誌,但沒有任何工作。我不知道該怎麼辦......爲什麼日誌停止了?爲什麼log4net無法追加到文件中,即使內部日誌顯示Opening file [...] append [True]
?如果有人有一些想法,我會永遠感激:)
編輯:顯然,權限設置正確 - 我是如此F * cked了我可恥地試圖Full control
到Everyone
...
@stuartd該參數已經存在。 – gobes
抱歉抱歉..... – stuartd