即使浏览器站点已关闭,Log4net 文件也会被锁定
Log4net File gets locked even though browser site is closed
我正在使用 VS 2013 和 Log4Net 为 .Net 应用程序记录数据。我可以创建日志。但是当我尝试删除或移动日志文件时,它显示
The file is open in another process...
即使浏览器已关闭,我也会收到此消息。当我关闭 Visual studio IDE 工具时,我只能 edit/cut/ 重命名 .. 日志文件。我怎么解决这个问题。我希望能够随时删除/编辑文件。
这是 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>
关于您关于关闭浏览器的评论
opens/locks/manipulates 文件不是浏览器,而是 Web 服务器。
浏览器向网络服务器发送请求,网络服务器回复响应,但与此同时,在这些 requests/responses 交换之外,两者之间没有链接。如果您在收到响应后关闭浏览器,服务器并不知道。它只是等待浏览器更多可能的请求,它不知道它已经关闭。
您的网络服务器可能是 IIS Express 或本地 IIS。正是这个 Web 服务器是锁定文件的进程。
如何立即发布文件
如果您使用的是 IIS Express,当您在 Visual Studio 中启动应用程序时它会 started/shut 关闭。当您停止调试时,它应该释放文件。
如果您使用的是本地或远程 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>
我正在使用 VS 2013 和 Log4Net 为 .Net 应用程序记录数据。我可以创建日志。但是当我尝试删除或移动日志文件时,它显示
The file is open in another process...
即使浏览器已关闭,我也会收到此消息。当我关闭 Visual studio IDE 工具时,我只能 edit/cut/ 重命名 .. 日志文件。我怎么解决这个问题。我希望能够随时删除/编辑文件。 这是 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>
关于您关于关闭浏览器的评论
opens/locks/manipulates 文件不是浏览器,而是 Web 服务器。
浏览器向网络服务器发送请求,网络服务器回复响应,但与此同时,在这些 requests/responses 交换之外,两者之间没有链接。如果您在收到响应后关闭浏览器,服务器并不知道。它只是等待浏览器更多可能的请求,它不知道它已经关闭。
您的网络服务器可能是 IIS Express 或本地 IIS。正是这个 Web 服务器是锁定文件的进程。
如何立即发布文件
如果您使用的是 IIS Express,当您在 Visual Studio 中启动应用程序时它会 started/shut 关闭。当您停止调试时,它应该释放文件。
如果您使用的是本地或远程 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>