即使关闭浏览器网站,Log4net文件仍然被锁定

3

我正在使用VS 2013和Log4Net为一个.NET应用程序记录数据。我能够创建日志,但是当我尝试删除或移动日志文件时,它会显示:

The file is open in another process... 

即使浏览器关闭,我仍然收到此消息。只有在关闭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>
1个回答

8

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

打开/锁定/操作文件的不是浏览器,而是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>

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 这个在生产环境中推荐使用吗?它不会有副作用吗? - SunilA
根据文档:https://logging.apache.org/log4net/release/faq.html#single-file,这对性能有负面影响,因此您可能需要在生产环境中考虑这个问题。因此,这基本上是在文件锁定较少或者更好的日志记录引擎性能之间进行权衡。 - Gilles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接