2017-09-14 65 views
2

我正在使用VS 2013和Log4Net爲.Net應用程序記錄數據。我可以創建日誌。但是,當我嘗試刪除或移動日誌文件,它說即使瀏覽器網站已關閉,Log4net文件也會被鎖定

The file is open in another process... 

這個消息我得到即使在瀏覽器關閉。我只能編輯/剪切/重命名..當我關閉Visual Studio IDE工具的日誌文件。我怎麼解決這個問題。我希望能夠隨時刪除/編輯文件。 下面是在web.config中

<configSections> 
<section name="log4net" 
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:\logs\jwhXMLDev.log" /> 
    <appendToFile value="true" /> 
    <!-- <layout type="log4net.Layout.XmlLayout"/>--> 
    <layout type="log4net.Layout.XmlLayout" /> 
    </appender> 
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> 
    <onlyFixPartialEventData value="true" /> 
    </appender> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 

回答

4

使用關於你提到的關於關閉瀏覽器

這不是打開的瀏覽器評論爲log4net的代碼/鎖/操縱文件,但Web服務器。

瀏覽器向Web服務器發送請求,該請求回覆響應,但與此同時,這些請求/響應交換之外的兩個之間沒有鏈接。如果在收到響應後關閉瀏覽器,則服務器不知道它。它只是等待瀏覽器提出更多可能的請求,它不知道它已經關閉。

您的Web服務器可能是IIS Express或本地IIS。這是這個Web服務器,它是鎖定文件的進程。

如何釋放文件現在

如果您使用的是IIS Express中,它開始/當你開始在Visual Studio中的應用程序關閉。當你停止調試時,它應該釋放文件。

如果您使用的是本地或遠程IIS,並且無法釋放文件,那麼回收應用程序池或重新啓動IIS將會有所裨益。

防止這種情況的發生

log4net的保持鎖定的文件,但你可以改變它的行爲通過添加以下行到你的<appender元素:與再次

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

這裏是你的配置添加的行:

<configSections> 
<section name="log4net" 
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:\logs\jwhXMLDev.log" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <!-- <layout type="log4net.Layout.XmlLayout"/>--> 
    <layout type="log4net.Layout.XmlLayout" /> 
    </appender> 
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> 
    <onlyFixPartialEventData value="true" /> 
    </appender> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 
+0

是這樣嗎?對生產部署表示讚賞。它不會有副作用? – SunilA

+0

@SunilA根據文檔:https://logging.apache.org/log4net/release/faq.html#single-file,它對性能有負面影響,所以這是您可能要考慮的生產環境。所以它基本上是在較少鎖定文件或爲日誌記錄引擎提供更好性能之間進行權衡。 – Gilles