即使关闭浏览器站点,Log4net文件也会被锁定

Sun*_*ilA 2 .net logging log4net log4net-configuration

我正在使用VS 2013和Log4Net来记录.Net应用程序的数据。我可以创建日志。但是当我尝试删除或移动日志文件时,它说

The file is open in another process... 
Run Code Online (Sandbox Code Playgroud)

即使浏览器关闭,我也会收到此消息。关闭Visual Studio IDE工具时,我只能编辑/剪切/重命名..日志文件。我怎么解决这个问题。我希望能够随时删除/编辑文件。这是web.config中使用的log4net的代码

 <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>
Run Code Online (Sandbox Code Playgroud)

Gil*_*les 6

关于您关于关闭浏览器的评论

打开/锁定/操作文件的不是浏览器,而是Web服务器。

浏览器将请求发送到Web服务器,该服务器回复响应,但与此同时,在这些请求/响应交换之外的两个外部之间没有链接。如果在收到响应后关闭浏览器,则服务器将不知道该响应。它只是在等待浏览器发出更多可能的请求,无法知道它已关闭。

您的Web服务器可能是IIS Express或本地IIS。正是这个Web服务器是锁定文件的过程。

如何立即释放文件

如果您使用的是IIS Express,则在Visual Studio中启动应用程序时会启动/关闭它。停止调试时,应释放文件。

如果您使用的是本地IIS或远程IIS,但无法释放文件,则回收应用程序池或重新启动IIS即可解决问题。

防止这种情况的发生

Log4Net会锁定文件,但您可以通过在<appender元素中添加以下行来修改其行为:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
Run Code Online (Sandbox Code Playgroud)

再次在您的配置中添加以下行:

<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>
Run Code Online (Sandbox Code Playgroud)