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

标签 .net logging log4net log4net-configuration

我正在使用 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>

最佳答案

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

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

关于.net - 即使浏览器站点关闭,Log4net 文件也会被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46218205/

相关文章:

c# - 对代码库进行大修:.NET还是Delphi后端?

logging - 消费后删除日志: logstash

c# - 如何最好地应用WPF MVVM?

.net - Simple Injector vs Hiro vs Autofac

c# - 在 C# 2.0 中同步两个 IList 的最佳算法

logging - 如何在 golang 中使用并发日志?

c# - log4net:配置为忽略来自特定类的消息

Nhibernate show_sql=false 不工作

c# - log4net AdoNetAppender 在数据库中插入 "Null"字符串而不是空值

c# - Log4net - 记录到错误的附加程序