ASP.NET 應用程式中,呼叫 StreamWriter.WriteLine 寫入網站目錄下的日誌檔後,Session 立即遺失;註解該行則正常。
**ASP.NET 檔案監視機制**:網站根目錄(含子目錄)下的檔案變更(建立、修改、刪除),會觸發 **應用程式域重啟**,導致 In-Process Session 清空。
HttpRuntime 內建 FileChangesMonitor 監視 *.config、*.aspx、App_Code、Bin 等目錄。LogPath 若在網站虛擬目錄下,即會觸發重啟。// 設定在 web.config 或程式碼中
string logPath = @"D:\Logs\MyApp\"; // 非網站目錄
fcnMode 忽略特定目錄在 web.config 中設定:
<httpRuntime fcnMode="Disabled" />
// 或
<httpRuntime fcnMode="NotSet" /> // 僅停用子目錄監視
但會失去自動偵測程式碼變更重啟的便利性,**不建議生產環境使用**。
App_Data 外部路徑,不觸發重啟。<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="D:\Logs\MyApp\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
StreamWriter 管理檔案鎖定、效能、格式化問題。App_Data 且設定 fcnMode,但仍有風險。遵循「日誌不進網站目錄」原則,即可徹底解決 Session 遺失問題。